Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/03/2011, 16h02   #1
Nouveau Membre du Club
 
Inscription : octobre 2007
Messages : 89
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 89
Points : 31
Points : 31
Par défaut comparer des variables avec boucles et array

bonjour
Je ma casse la tête depuis plusieurs jour sur un problème de boucle pour comparer des variables.
Explication
=> réservation de chambre par l'admin et enregistrement dans un BDD sql phpmyadmin, les données enregistrées ont cette forme : "s18_1" pour "semaine 18 appartement 1"
Avant l'enregistrement je dois contrôler que l' entrée n'existe pas déjà, et c'est là que je galère !
Parce que pour récupérer les $_POST (max 40) je fais:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$x=0;
for ($semaine=18;$semaine<=27;$semaine++)
{
      for ($chbr=1;$chbr<=4;$chbr++)
	{
	$x++; 
	$recup='s'.$semaine.'_'.$chbr;
 
	    if (isset($_POST[$recup]))
	      {
		$envoie[$x]=$_POST[$recup]; // 
		}		
 
	}
}
.
ex :s20_4 la 1ere boucle me crée le chiffre 20 et la 2eme le chiffre 4

Pour lister la base :
Code :
1
2
3
4
5
6
$retour = mysql_query('SELECT reserv FROM reservation ');
while ($donnees = mysql_fetch_array($retour)) 
{
 
???????????????
}
Et c'est la que je bloque pour faire une comparaison avant un enregistrement.
si je prend la premiere entree de la table=> $ent
que je crée une boucle x jusqu'à 40
je compare $envoie[$x] avec $ent
si elles sont differentes :
Code :
1
2
$req="INSERT INTO reservation (id, reserv) VALUES ('', $envoie[$x])";
mysql_query($req);
sinon je passe.
Mais ou ça n'enregistre rien ou je me retrouve avec les nlles entrées multipliée par 3 4 voir 5 fois

Mon histoire de boucle n'est pas bonne, il faudrait que je compare, si c'est bon je récupère une info et hors boucle je resorte l'info pour pouvoir enregistrer simplement les nlles entrées....

j'espere que je suis clair,

Merci de votre aide
.ps: j'ai abrégé le code...
bilcosby est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2011, 16h41   #2
Membre habitué
 
Homme
Développeur Web
Inscription : mars 2007
Messages : 112
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : Service public

Informations forums :
Inscription : mars 2007
Messages : 112
Points : 110
Points : 110
Bonjour,

je ne comprend pas trop l'utilité de la boucle,
pourquoi ne pas faire une recherche du $_POST sur la base.
Si le résultat est vide, on enregistre.
Si le résultat n'est pas vide, envoi d'un message pour dire que c'est réserver

Yasen77
yasen77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2011, 17h11   #3
Nouveau Membre du Club
 
Inscription : octobre 2007
Messages : 89
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 89
Points : 31
Points : 31
merci de ton attention.

il y à plusieurs $_POST, que je met dans un array..donc il faut bien que je boucle !
il peux y avoir 40 $_POST max à récupérer.

.
.
bilcosby est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2011, 17h24   #4
Membre habitué
 
Homme
Développeur Web
Inscription : mars 2007
Messages : 112
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : Service public

Informations forums :
Inscription : mars 2007
Messages : 112
Points : 110
Points : 110
Dans se cas, fait plutôt un FOREACH de ton $_POST :

du style :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
 
foreach ($_POST['Array'] as $val)
 {
     $retour = mysql_query('SELECT reserv FROM reservation WHERE champ="'.$val.'"');
     while ($donnees = mysql_fetch_array($retour)) 
        {
             if($donnees['champ'] == "")
               {
                     //j'enregistre
               }
             else {
                     echo "Occupé";
               }
        }
 }
yasen77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2011, 19h27   #5
Nouveau Membre du Club
 
Inscription : octobre 2007
Messages : 89
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 89
Points : 31
Points : 31
Message d'erreur, mais je ne connais pas trop foreach...
Warning: Invalid argument supplied for foreach() in (la ligne du foreach ! )

je te met le code.....
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$x=0;
for ($semaine=18;$semaine<=27;$semaine++)
{
for ($chbr=1;$chbr<=4;$chbr++)
{
$x++; 
$recup='s'.$semaine.'_'.$chbr;
 
$envoie[$x]=$_POST[$recup];
 
foreach ($envoie[$x] as $val)  =>erreur sur cette ligne
{
$retour = mysql_query('SELECT reserv FROM reservation WHERE champ="'.$val.'"');
while ($donnees = mysql_fetch_array($retour)) 
 
{if($donnees['champ'] == ""){//j'enregistre}
else {echo "Occupé";}}	
 
}						
}
}
Donc je n'ai pas pu tester, mais je crains retomber sur mon problème,
Il faudrait que j'arrive a comparer :
$_post1 et toute les entrées déjà dans la base(sachant que la recup du $_post ce creer avec une boucle..)
=>si no doublons j'enregistre et je passe au $_post2.
=> si doublons non seulement je n'enregistre pas, mais le test doit s'arrêter.
Le souci c'est qu'il peut être doublons sur la 10eme entrée mais pas sur les autres (évidement)donc 1 passage sur 40 il sera doublons mais 39 passages il sera bon , donc 39 enregistrements acceptés c'est ce problème que je n'arrive pas à résoudre..

.
.
bilcosby est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2011, 19h50   #6
Membre habitué
 
Homme
Développeur Web
Inscription : mars 2007
Messages : 112
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : Service public

Informations forums :
Inscription : mars 2007
Messages : 112
Points : 110
Points : 110
il faut enlever les boucles for

pour foreach le fonctionnement est :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
 
$chb = array("s18_1","s18_2",etc);
 
foreach ($chb as $val)
{
 $retour = mysql_query('SELECT reserv FROM reservation WHERE champ="'.$val.'"');
 while ($donnees = mysql_fetch_array($retour)) 
 
{if($donnees['champ'] == ""){//j'enregistre}
else {echo "Occupé";}}
}
il suffit donc de remplacer $chb par ton $_POST, est cela devrais fonctionner
yasen77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2011, 20h56   #7
Nouveau Membre du Club
 
Inscription : octobre 2007
Messages : 89
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 89
Points : 31
Points : 31
merci beaucoup, je suis désolé dans la précipitation j'ai copier coller un extrait qui n'est plus vraiment d'actualité, j'ai mis les $_post dans un array donc plus de boucles qui s'entremêlent ( mais ça ne change pas grand chose au problème)
Cependant j'ai oublié de préciser que je récupère les $_post sans savoir combien il y en aura, d'où cette portion de code:
Code :
1
2
3
4
5
6
7
8
9
10
$x=0;
for ($semaine=18;$semaine<=27;$semaine++)
{
for ($chbr=1;$chbr<=4;$chbr++)
{
$x++; 
$recup='s'.$semaine.'_'.$chbr;
 
$envoie[$x]=$_POST[$recup]; <= le array pour les $_post
etc...........................
ensuite je compte travailler avec' $envoie[$x]' et une boucle qui monte jusqu'à 40 (nbr de chambre(4) x 10 semaines).

certain ' $envoie[$x]' seront vides, certain des doublons et d'autres positifs
.
.je bricolerais demain avec le foreach...
.
Merci et à demain pour la suite...et fin j'espère
.
.
bilcosby est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2011, 09h00   #8
Nouveau Membre du Club
 
Inscription : octobre 2007
Messages : 89
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 89
Points : 31
Points : 31
Bon apparemment le premier paramètre de foreach ne peut être un array, donc ça ne peut pas fonctionner.
je reprend tout a zéro, en y réfléchissant autrement, peut etre simplifier la nomination des champs d'envoi et leur contenu pour une réception plus simple !!

je laisse ce post ouvert....si quelqu'un à une idée

Merci de votre attention
bilcosby est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2011, 09h54   #9
Nouveau Membre du Club
 
Inscription : octobre 2007
Messages : 89
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 89
Points : 31
Points : 31
C'est OK merci à vasen77
Je n'ai pas assuré tout à l'heure avec la foreach..
Voici le code fini, j'ai abrégé la boucle du $_post et ça va mieux :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
$x=0; 	   
for ($semaine=18;$semaine<=27;$semaine++)
{
for ($chbr=1;$chbr<=4;$chbr++)
{
$recup='s'.$semaine.'_'.$chbr;
if ($_POST[$recup]=='') {$x--;}
else
{$x++;$envoie[$x]=$_POST[$recup]; }
if ($x<0){$x=0;}
}			
} 
 
foreach ($envoie as $val)
{
$retour = mysql_query('SELECT reserv FROM reservation WHERE reserv="'.$val.'"');
while ($donnees = mysql_fetch_array($retour)) 
{
if($donnees['reserv'] == "")
{
//j'enregistre
}
else {
//j'enregistre pas 
}}}

Merci et à bientôt
.
.
bilcosby est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h30.


 
 
 
 
Partenaires

Hébergement Web