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 :

Arreter une boucle for sur chaque element


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2013
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 53
    Par défaut Arreter une boucle for sur chaque element
    Bonjour à tous,

    Je suis en train de créer un arbre binaire en php et mes données sont dans une bdd.

    Le principe c est que chaque noeud comporte un id, une question, une réponse, id_left, id_right. Je possède aussi deux boutons "oui" et "non" et je voudrais qu'a chaque click, je descende d'un cran dans l'arbre.

    Voila comment j'ai fait

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    //calcule le nombre d'element pour ma boucle
       $counting = $db->query('SELECT * FROM node where questions IS NOT NULL');
            $count = $counting->rowCount();
     
            for( $i = 0; $i < $count; $i++ ) {
            // si i égale 0, nous venons juste de rentrer dans la boucle donc j'initialise les élements
                if($i ==0){
                    $select = $db->query('SELECT * FROM node where id=1');
                    $nodes = $select->fetch();
                    $current_id = $nodes->id;
                    $current_id_left = $nodes->id_left_node_children;
                    $current_id_right = $nodes->id_right_node_children;
                    $current_question = $nodes->questions;
                    echo $current_question;
                }
     
                if(isset($_POST['yes'])){
                    $select = $db->prepare('SELECT * FROM node where id=:id');
                    $select->bindParam(':id', $current_id_left);
                    $select->execute();
                    $nodes = $select->fetch();
     
                    $current_id_left = $nodes->id_left_node_children;
                    $current_id_right = $nodes->id_right_node_children;
                    $current_question = $nodes->questions;
     
                    echo $current_question;
     
                }
                if(isset($_POST['no'])){
                    $select = $db->prepare('SELECT * FROM node where id=:id');
                    $select->bindParam(':id', $current_id_right);
                    $select->execute();
                    $nodes = $select->fetch();
     
                    $current_id_left = $nodes->id_left_node_children;
                    $current_id_right = $nodes->id_right_node_children;
                    $current_question = $nodes->questions;
                }
                if($nodes->questions == ""){
                    echo  "reponse " . $nodes->responses;
                    die();
                }
            }
    Ce bout de code m'affiche bien les élements mais il m'affiche TOUT les élements d'un coup. Résultat, je me retrouve au feuille de l'arbre en 1 click.

    Comment je peut faire pour qu il me pose chaque question une par une et que descende seulement d'un cran dans l'arbre ?

    Merci

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    PHP s'execute en une fois sur le serveur et envoi le résultat au client, il n'y a pas d'interaction entre le client et PHP.
    Tu as seulement besoin d'envoyer l'id que tu veux consulter ensuite par ton formulaire.

    Au passage ton code est affreusement redondant :
    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
     
    $select = $db->prepare('SELECT * FROM node where id=:id');
    if(!isset($_POST['id'])){
           $id = 1;
    }
    elseif ($_POST['choix'] == 'yes') {
           $id = $_POST['current_id_left'];
    }
    elseif ($_POST['choix'] == 'no') {
           $id = $_POST['current_id_right'];
    }
     
    $select->execute(array(':id'=>$id));
    $nodes = $select->fetch();
    $current_id_left = $nodes->id_left_node_children;
    $current_id_right = $nodes->id_right_node_children;
    $current_question = $nodes->questions;
    echo $current_question;
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2013
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 53
    Par défaut
    Donc si je comprends bien je dois mettre l'id que je veut récuperer dans le formulaire par un $_POST.

    Je vais essayer cela et je mettrais la réponse quand j'aurais terminé

    Pour l instant le code que tu ma filer ne fonctionne pas, je vais essayer d y remedier !

    Merci a toi

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    La seule différence entre mon code et le tiens (à part l'écriture) c'est que mes deux boutons submit ont le même nom "choix" avec une valeur "yes" ou une valeur "no".
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Ce n'est pas "yes"ou "no" qu'il faut transmettre, mais $id_right ou $id_left.

    Voire même toute la succession des id à chaque réponse.
    Ce qui permettra de descendre - et s'arreter - au cran suivant.

    Bref : histoire de logique et conception.
    Dernière modification par Invité ; 21/11/2015 à 09h48.

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    J'imaginais un formulaire avec deux bouton et deux champs cachés parce que sur le bouton submit la "value" c'est aussi ce qui est affiché sur le bouton.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

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

Discussions similaires

  1. [CS3] Faire une boucle for sur des champs texte
    Par Bubuk dans le forum ActionScript 3
    Réponses: 1
    Dernier message: 18/12/2013, 17h06
  2. Syntaxe pour une boucle for sur des combobox
    Par Tifriis dans le forum VBA Access
    Réponses: 3
    Dernier message: 20/10/2010, 13h52
  3. [MySQL] problème sur une boucle for
    Par leclone dans le forum PHP & Base de données
    Réponses: 13
    Dernier message: 28/12/2006, 10h33
  4. [VBA-E]PB sur une boucle for each next
    Par rond24 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 31/07/2006, 15h47
  5. Réponses: 3
    Dernier message: 06/07/2004, 10h21

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