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

PHP & Base de données Discussion :

Petit soucis de boucle [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2012
    Messages : 6
    Points : 3
    Points
    3
    Par défaut Petit soucis de boucle
    Bonjour,

    c'est mon premier post et je viens avc un soucis ;-).

    voila, j'ai un site qui a besoin d'être un peu restructurer car il a pris quelques rides. dans l'ensemble, tout tourne, mais j'ai un petit soucis dans une boucle que je n'arrive pas à élucider.

    j'ai un formulaire d'une dizaine de question, les réponses sont stockées dans une table. j'ai ensuite une table qui contient une liste de fruit. or, je compare les réponses d'un coté avec la liste de fruit, pour valider un compteur. et c'est la que ca se complique, il ne reconnait que la première valeur de ma table de fruits et pas les suivants et donc ne les valide jamais. voici le code de comparaison :

    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
    <?php
     
    connection base de données.
     
    $questionnaire=mysql_query("SELECT fruits, idquest, date FROM questionnaire ORDER BY date DESC LIMIT 0,10");
    $fruitscompare=mysql_query("SELECT * FROM db_fruits");
     
    $ligne2 = mysql_fetch_array($fruitscompare);
     
    while($ligne = mysql_fetch_array($questionnaire)) {
    	$idquest = $ligne['idquest'];
    	$fruits = $ligne['fruits'];
     
    	foreach($ligne2 as $veriffruits) {
    		if ($veriffruits==$fruits) {
    		$result = mysql_query("UPDATE questionnaire SET verifenordre='0' WHERE idquest='$idquest'");
    		}
    	}
    }
    ?>
    Merci davance pour vos idées.

  2. #2
    Membre émérite
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 563
    Points : 2 390
    Points
    2 390
    Par défaut
    En effet, j'avais fait ça un peut trop vite sans reflechir.

    ça devrait marcher un peu 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
    <?php
     
    connection base de données.
     
    $questionnaire=mysql_query("SELECT fruits, idquest, date FROM questionnaire ORDER BY date DESC LIMIT 0,10");
    $fruitscompare=mysql_query("SELECT * FROM db_fruits");
     
    $listefruits = array();
    while($ligne2 = mysql_fetch_array($fruitscompare)){
    	$listefruits[] = $ligne2['fruit'];
    }
     
    while($ligne = mysql_fetch_array($questionnaire)) {
    	$idquest = $ligne['idquest'];
    	$fruits = $ligne['fruits'];
     
    	foreach($listefruits as $f){
    		if ($f==$fruits) {
    		$result = mysql_query("UPDATE questionnaire SET verifenordre='0' WHERE idquest='$idquest'");
    		}
    	}
    }
    ?>
    Il faut probablement modifier "$ligne2['fruit']" car ne je connais pas le nom du champ correspondant au 'fruit' dans la table db_fruits
    Zend Certified PHP Engineer

    « Crois-tu comprendre le monde juste en matant le 20H Ou connaître l'histoire en ayant lu que l'angle des vainqueurs ? » Keny Arkana

  3. #3
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2012
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    merci pour la réponse.

    j'avais déjà testé ca (enfin sans le ['listedesfruits'], avec malheureusement le même résultat. il compare bien les dix derniers questionnaires d'un coté, mais il ne compare que le premier fruit sur la liste. la table de la liste de fruits ne contient qu'un champ, listedefruits (elle date un peu ...), donc pas d'id rien. dois-je envisager de la changer ? en soi c'est pas bien compliqué de rajouter un champ.

    le but est d'avoir un chti questionnaire, qui demande des trucs simples du style, comment préfèrez vous votre crumble, ou votre tarte, etc ... donc les gens peuvent répondre plusieurs fois le même fruits. donc admettons que dans la liste y ai banane cerise fraise. si quelqu'un répond banane pas de soucis il ira incrémenter mon compteur de manière adéquate (j'ai simplifié la requete) mais s'il répond fraise, ca met pas à jour ... j'ai testé en ayant des formulaires commencant avec des fraises et en ayant des bananes plus loin.

    ps sorry pour les balises

  4. #4
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    ça manque de preuve tout ça.
    fait des prints sur des POST/GET et à chaque étape sinon c'est dur à debuger.

    Cependant tu imbriques les deux mysql_fetch_array. C'est TRES bizarre, d'autant qu'il n'y a pas d'order by. => C'est Seb333xxx

    tu veux bien enlever l'étoile de la requete, ça masque un truc que je ne comprends pas ?
    PHP fait nativement la validation d'adresse électronique .
    Celui qui a inventé mysql_connect(...) or die() est déjà mort plusieurs fois.

    Utilisez le bouton résolu!

  5. #5
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2012
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    enlever l'étoile ? dans SELECT * FROM db_fruits ? ben y a qu'un seul champ comme dit, c'est listedefruits. je vous fais un export de la table :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CREATE TABLE IF NOT EXISTS `db_fruits` (
      `listedefruits` varchar(16) COLLATE latin1_general_ci NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
    voila, rien de secret ni de bien particulier ^^.

    après oui, comme j'ai dit j'ai simplifié. il manque le order by dans la liste de fruits, mais ca ne change rien intrinsèquement. ca ressemble donc à ceci SELECT * FROM db_fruits ORDER BY listedefruits ASC.

  6. #6
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2012
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    et j'ai ausi commencé par le double while et j'ai ensuite changé pour foreach qui en principe une fois la boucle finie recommence à zéro pour la suivante.

    tel quel je supposais que j'initialise les deux requetes, ensuite je lance un while pour chacun des 10 derniers questionnaires, et ca inclus le compare avec la liste de fruit. bon, c'est peut-être pas la bonne manière de faire, mais ce qui m'embete c'est que ca fonctionne pour le premier de la liste mais pas pour les autres et je n'ai aucun message d'erreur ...

  7. #7
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    pourquoi tu fais un foreach $ligne2 alors que tu n'as qu'un seul champ dans cette table???? je regarde ton code initial !

    tu penses bcp et tu fais pas assez de var_dump pour voir ce qui se passe.

    on ne code jamais avec les étoiles. ça rend les schémas impossibles a faire évoluer (ajout de champs, renomage, ou simple "grep" de code). la seule exception que j'accepte c'est count(*), il faut des exceptions.
    PHP fait nativement la validation d'adresse électronique .
    Celui qui a inventé mysql_connect(...) or die() est déjà mort plusieurs fois.

    Utilisez le bouton résolu!

  8. #8
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2012
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par gene69 Voir le message
    pourquoi tu fais un foreach $ligne2 alors que tu n'as qu'un seul champ dans cette table???? je regarde ton code initial !

    tu penses bcp et tu fais pas assez de var_dump pour voir ce qui se passe.

    on ne code jamais avec les étoiles. ça rend les schémas impossibles a faire évoluer (ajout de champs, renomage, ou simple "grep" de code). la seule exception que j'accepte c'est count(*), il faut des exceptions.
    j'ai pris le foreach car il est sensé commencer lors de la première itération de la boucle de se placer sur la première valeur du champ et sauter d'un cran. une fois la boucle fini pour le premier questionnaire il repasse à la première valeur pour la deuxième itération.

    oki, je remplace donc * par listedesfruits et je suivrais ce conseil. mais en attendant, je ne vois toujours pas le bout du tunnel et pourtant, c'est pas faute d'avoir cherché.

  9. #9
    Membre émérite
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 563
    Points : 2 390
    Points
    2 390
    Par défaut
    oups... je voulais citer mon message précédent, mais je l'ai édité...

    Citation Envoyé par Seb33300 Voir le message
    En effet, j'avais fait ça un peut trop vite sans reflechir.

    ça devrait marcher un peu 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
    <?php
     
    connection base de données.
     
    $questionnaire=mysql_query("SELECT fruits, idquest, date FROM questionnaire ORDER BY date DESC LIMIT 0,10");
    $fruitscompare=mysql_query("SELECT * FROM db_fruits");
     
    $listefruits = array();
    while($ligne2 = mysql_fetch_array($fruitscompare)){
    	$listefruits[] = $ligne2['fruit'];
    }
     
    while($ligne = mysql_fetch_array($questionnaire)) {
    	$idquest = $ligne['idquest'];
    	$fruits = $ligne['fruits'];
     
    	foreach($listefruits as $f){
    		if ($f==$fruits) {
    		$result = mysql_query("UPDATE questionnaire SET verifenordre='0' WHERE idquest='$idquest'");
    		}
    	}
    }
    ?>
    Il faut probablement modifier "$ligne2['fruit']" car ne je connais pas le nom du champ correspondant au 'fruit' dans la table db_fruits
    Zend Certified PHP Engineer

    « Crois-tu comprendre le monde juste en matant le 20H Ou connaître l'histoire en ayant lu que l'angle des vainqueurs ? » Keny Arkana

  10. #10
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2012
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    oh, j'ai la petite larme à l'oeil pour le coup, ca marche

    un grand merci ^^

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

Discussions similaires

  1. [Encodage] Petit soucis de boucle XML - PHP
    Par gatweb dans le forum Langage
    Réponses: 2
    Dernier message: 17/02/2012, 13h31
  2. Petit souci sur une boucle PHP
    Par ns_deux dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 30/03/2009, 20h31
  3. [PHP 5.2] [PHP-JS] petit souci avec une boucle simple
    Par gtraxx dans le forum Langage
    Réponses: 2
    Dernier message: 05/02/2009, 15h26
  4. [VBA-E]Petit souci avec une boucle
    Par Mou dans le forum Macros et VBA Excel
    Réponses: 19
    Dernier message: 17/04/2007, 15h15

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