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

  1. #1
    Membre émérite

    Homme Profil pro
    Webmaster débutant
    Inscrit en
    octobre 2006
    Messages
    6 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant
    Secteur : Industrie

    Informations forums :
    Inscription : octobre 2006
    Messages : 6 842
    Points : 2 949
    Points
    2 949
    Billets dans le blog
    1
    Par défaut
    Bonsoir,

    j'ai des soucis pour faire ce test. Voici mon code :
    Code php : 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
    	$sql = 'SELECT question_name
    FROM `questions` t1
    JOIN `consultation_type_question` t2 ON t2.id_question=t1.id_question
    JOIN `consultation_type` t3 ON  t2.id_consultation_type=t3.id_consultation_type
    WHERE t3.titre_consultation_type="médecin"';
     
    $prep = $connexion->prepare($sql);
    $prep->execute();
     
    $sortie=0;
    while($question_name = $prep->fetch()) 
    {
    	//echo "name:".$question_name."<br/>";
    	//echo "POST:".$_POST[$question_name]."<br/>";
    		if (empty($_POST[$question_name])) {$sortie=1; continue;}
    		}
    La requête SQL est correcte (testée avec phpMYAdmin) ; en principe les champs sont non vides, mais ça me dit que si (et si je décommente les lignes 13 et 14, lignes blanches)

    J'ai un peu modifié le code :
    Code php : 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
    	$sql = 'SELECT question_name FROM `questions` t1
    JOIN `consultation_type_question` t2 ON t2.id_question=t1.id_question
    JOIN `consultation_type` t3 ON  t2.id_consultation_type=t3.id_consultation_type
    WHERE t3.titre_consultation_type="médecin"';
     
    $prep = $connexion->prepare($sql);
    $prep->execute();
     
    var_dump($prep->fetch());
     
    $sortie=0;
    while($question_name = $prep->fetch()) 
    {
    	echo "name:".$question_name."<br/>";
    	echo "POST:".$_POST[$question_name]."<br/>";
    	if (empty($_POST[$question_name])) {$sortie=1; continue;}
    }
     
    if (!$sortie)
    {
    echo "non vide<br/>";
    }
    else echo "un des champs est vide !";
    Il n'y a plus de page blanche, mais les echo des lignes 14 et 15 ne sont pas affichés, donc on ne passe pas dans la boucle alors que le var_dump juste avant montre qu'on devrait (PDO doit retourner un objet et celui-ci est non vide), et ça affiche "non vide"; j'y comprends rien...
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

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

    Informations forums :
    Inscription : juillet 2005
    Messages : 29 207
    Points : 43 386
    Points
    43 386
    Par défaut
    Enlève ton var_dump() il lit le premier résultat de la requête.

    Qu'est ce que tu essaies de faire avec ton "continue" ? Ce n'est pas plutôt "break" que tu veux ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre émérite

    Homme Profil pro
    Webmaster débutant
    Inscrit en
    octobre 2006
    Messages
    6 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant
    Secteur : Industrie

    Informations forums :
    Inscription : octobre 2006
    Messages : 6 842
    Points : 2 949
    Points
    2 949
    Billets dans le blog
    1
    Par défaut
    OK, ça n'aidait pas, mais pas encore bon :
    Code php : 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
    	$sql = 'SELECT question_name FROM `questions` t1
    JOIN `consultation_type_question` t2 ON t2.id_question=t1.id_question
    JOIN `consultation_type` t3 ON  t2.id_consultation_type=t3.id_consultation_type
    WHERE t3.titre_consultation_type="médecin"';
     
    $sortie=0;
    $prep = $connexion->prepare($sql);
    $prep->execute();
     
    //var_dump($prep->fetch());
    $sortie=0;
    while($question_name = $prep->fetch()) 
    {
    	echo "<br/> BOUCLE";
    	echo "name:".$question_name."<br/>";
    	echo "POST:".$_POST[$question_name]."<br/>";
    	if (empty($_POST[$question_name])) {$sortie=1; continue;}
    }
     
    if (!$sortie)
    {
    echo "non vide<br/>";
    }
    else echo "un des champs est vide !"; 
    echo "sortie=".$sortie;
    car on passe bien dans la boucle (ligne 14), mais les 2 echo des lignes 15 et 16 ne sont pas affichés ; même pas :
    name: et rien après
    et pas d'echo de la ligne 25...
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

  4. #4
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    août 2012
    Messages
    533
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : août 2012
    Messages : 533
    Points : 935
    Points
    935
    Par défaut
    car on passe bien dans la boucle (ligne 14), mais les 2 echo des lignes 15 et 16 ne sont pas affichés ; même pas :
    $question_name est un tableau il est donc impossible de l'afficher comme tel. Si tu avais activé l'affichage des erreurs tu devrais obtenir une erreur de type Notice: Array to string conversion
    Que veux-tu faire exactement?

  5. #5
    Membre émérite

    Homme Profil pro
    Webmaster débutant
    Inscrit en
    octobre 2006
    Messages
    6 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant
    Secteur : Industrie

    Informations forums :
    Inscription : octobre 2006
    Messages : 6 842
    Points : 2 949
    Points
    2 949
    Billets dans le blog
    1
    Par défaut
    Ceci est dans l'action d'un formulaire et les "names" sont dans une bdd, d'où j'utilise PDO pour les récupérer. Et je veux tester si l'un des champs du formulaire est vide...

    Si tu as besoin de plus de précision, dis-le...
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

  6. #6
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    avril 2007
    Messages
    8 356
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : avril 2007
    Messages : 8 356
    Points : 15 829
    Points
    15 829
    Par défaut
    Etant donné que ta requête ne retourne qu'une seule colonne et que tu ne veux que cette colonne dans ta boucle, essaye fetchColumn à la place de fetch, ça devrait mieux fonctionner
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while($question_name = $prep->fetchColumn())
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  7. #7
    Membre émérite

    Homme Profil pro
    Webmaster débutant
    Inscrit en
    octobre 2006
    Messages
    6 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant
    Secteur : Industrie

    Informations forums :
    Inscription : octobre 2006
    Messages : 6 842
    Points : 2 949
    Points
    2 949
    Billets dans le blog
    1
    Par défaut
    Je viens seulement d'essayer (car même si ça ne plait pas à Jreaux62, j'ai tellement de choses à faire que je manque un peu de temps... ) ; comme ça, ça marche bien mais ceci est un cas particulier et j'aurai d'autres pages où je regarderai plusieurs colonnes ; la solution sera-t-elle alors de faire plusieurs fetchColumn() ?
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $sql = 'SELECT col1,col2 FROM `questions`...;
     
    $sortie=0;
    $prep = $connexion->prepare($sql);
    $prep->execute();
     
    $res1=$prep->fetchColumn(0);
    $res2=$prep->fetchColumn(1);
    etc.
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

  8. #8
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    avril 2007
    Messages
    8 356
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : avril 2007
    Messages : 8 356
    Points : 15 829
    Points
    15 829
    Par défaut
    Non, chaque fetch fait avancer la liste des résultats.
    Donc si tu as un résultat du genre :
    Col1 | Col2 
    -----|-----
      1  |  A
      2  |  B  
    et que tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $res1=$prep->fetchColumn(0);
    $res2=$prep->fetchColumn(1);
    Tu vas obtenir
    res1 = 1
    res2 = B
    Ce qui n'est pas franchement le but de l'opération

    Si tu veux plusieurs colonnes d'une même ligne de résultat, il va falloir passer par fetch qui va te renvoyer un tableau (par défaut)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $res = $pre->fetch();
    $res1 = $res[0];
    $res2 = $res[1];
    te donnerait
    res1 = 1
    res2 = A
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  9. #9
    Membre émérite

    Homme Profil pro
    Webmaster débutant
    Inscrit en
    octobre 2006
    Messages
    6 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant
    Secteur : Industrie

    Informations forums :
    Inscription : octobre 2006
    Messages : 6 842
    Points : 2 949
    Points
    2 949
    Billets dans le blog
    1
    Par défaut
    Entendu, comme je ne suis dans le cas par défaut, vu que à la connexion, je demande que le fetch me retourne un objet, j'ai modifié le code comme suit :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $result = $prep->fetch();
    print("question_name=$result->question_name\n");
    echo "POST=".$_POST[$result->question_name]."<br/>";
    (sachant que la requête me retourne un "name" de formulaire), et ça a l'air de marcher...
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

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

Discussions similaires

  1. Vérification que les champs user et mdp ne sont pas vides avant submit
    Par LilliBrei dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 18/06/2014, 08h11
  2. verifier que tout les champs du formulaire sont remplis
    Par dirty_harry dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 15/03/2012, 12h50
  3. Vérifier que les champs sont remplis - formulaire
    Par bond70 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 03/11/2011, 23h22
  4. Vérifier que tous les champs du formulaire soient bien remplis
    Par arnaudperfect dans le forum Formulaires
    Réponses: 3
    Dernier message: 25/08/2007, 11h59
  5. Tester si un champ de formulaire est vide
    Par pekka77 dans le forum ASP
    Réponses: 3
    Dernier message: 28/06/2005, 16h18

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