IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

comparer des variables avec boucles et array


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 210
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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...

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2007
    Messages
    194
    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 : 194
    Par défaut
    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

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 210
    Par défaut
    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.

    .
    .

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2007
    Messages
    194
    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 : 194
    Par défaut
    Dans se cas, fait plutôt un FOREACH de ton $_POST :

    du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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é";
                   }
            }
     }

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 210
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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..

    .
    .

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2007
    Messages
    194
    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 : 194
    Par défaut
    il faut enlever les boucles for

    pour foreach le fonctionnement est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 210
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    .
    .

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 210
    Par défaut
    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

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 210
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    .
    .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 17/12/2009, 19h59
  2. initialisation des variable avec une boucle
    Par grospatapouf dans le forum Langage
    Réponses: 10
    Dernier message: 10/01/2009, 12h17
  3. Générer des variables avec une boucle
    Par Anamelech dans le forum Delphi
    Réponses: 15
    Dernier message: 03/11/2006, 12h33
  4. [struts] Comparer deux variables avec <logic:equal>
    Par trax020 dans le forum Struts 1
    Réponses: 4
    Dernier message: 29/05/2005, 11h08
  5. petit souci avec des variables avec des fonctions psql
    Par dust62 dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 02/04/2005, 13h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo