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 :

problème sur condition (if / elseif / else)


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 226
    Par défaut problème sur condition (if / elseif / else)
    Bonjour.


    J'essaie de faire un ajout dans une BDD avec une condition mais je rencontre un problème.
    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
     
     
    $requeteElements = $pdo->prepare('INSERT INTO Elements (...) VALUES(:...)');
    $requetVerifElements = $pdo->prepare('SELECT COUNT(...) FROM Elements WHERE nom=:nom');
     
    $nbElements = count($listeElements);
    for($i=0 ; $i<$nbElements ; $i++) {
        $cElem = $listeElements[$i][0];
     
         $requetVerifElements -> bindParam(':nom'=>$cElem["nom"]);
        $return = $requetVerifElements -> execute();
        $data = $requetVerifElements->fetch();
     
        if($return == FALSE)
            { break 2; }
        elseif($data == 0)
            { $return = $requeteElements -> execute(array(...)) or die("Erreur SQL!"); }
        else
            { $test = 1; }
    }
    Si j'ai le retour de mon comptage qui est faux, je sors.
    Sinon, si l'élément n'existe pas déjà, je l'ajoute.
    Sinon test =1.

    Je ne comprends pas pourquoi ça fonctionne sans le else mais dés que je rajout cette condition, ça ne marche plus.
    Je fais appel à ce scipt via une requête AJAX et je n'arrive pas à localiser le problème. Je sais par contre que mes requêtes SQL sont correctes.

    Quelqu'un pourrait-il m'apporter son aide =)?

    Merci.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 352
    Par défaut
    Citation Envoyé par flavors Voir le message
    if($return == FALSE)
    { break 2; }
    elseif($data == 0)
    { $return = $requeteElements -> execute(array(...)) or die("Erreur SQL!"); }
    else
    { $test = 1; }
    Selon ton premier test la variable $return est booléenne.Voilà ce que fait ton branchement conditionnel :

    si $return = faux exécution du premier code sinon si $data = 0 exécution du 2ème code sinon tu initialises une variable à 1 or $data est de type différent que $return et surtout vu qu'une booléenne ne prenne que 2 valeur donc après le IF c'est le ELSE qui doit automatiquement suivre mais il ne peux pas avoir un 3ème test sur cette variable.donc si tu veux utiliser $data fais un autre IF à part.

  3. #3
    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
    fetch retourne un tableau.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     $data = $requetVerifElements->fetch(PDO::FETCH_NUM);
    if($data[0] == 0) {
    Egalement ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $nbElements = count($listeElements);
    for($i=0 ; $i<$nbElements ; $i++) {
        $cElem = $listeElements[$i][0];
    s'écris proprement comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    foreach ($listeElements as $value) {
         $cElem = $value[0];
    et ton test
    signifierait que ta requête ne fonctionne pas.
    ce n'est pas vraiment le sujet.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 226
    Par défaut
    Merci pour vos réponses.

    if($return == FALSE)
    signifierait que ta requête ne fonctionne pas.
    ce n'est pas vraiment le sujet.
    Si on sait que notre requête SQL est correct, il est inutile de la tester en faisant ça?
    Dans le cas d'un ajout on peut quand même mettre ce test? Par exemple pour pouvoir faire un retour à l'utilisateur si il essaie de rentrer un champ déjà existant en BDD?

    Je rencontre le même probléme.
    J'ai remplacé mon code avec ce que vous m'avez dis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    foreach ($listeElements as $value) {
        $cElem = $value[0];
     
        $requetVerifElements -> bindParam(':nom'=>$cElem["nom"]);
        $return = $requetVerifElements -> execute();
        $data = $requetVerifElements->fetch();
     
        if($data[0] == 0)
            { $return = $requeteElements -> execute(array(...)) or die("Erreur SQL!"); }
        else
            { $test = 1; }
    }
    Encore une fois sans le else ça passe mais avec ça ne fonctionne pas.

    Merci.

  5. #5
    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
    Le symptome que tu décris n'est pas possible puisque ton else ne fait rien. Je pense que tu interpretes mal tes résultats.
    De plus tu n'as pas mis le PDO::FETCH_NUM de mon code.

    Un simple echo te montrera ce que fais ton traitement exactement :
    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 ($listeElements as $value) {
     
        $requetVerifElements -> bindParam(':nom'=>$value[0]['nom']);
        $return = $requetVerifElements -> execute();
        $data = $requetVerifElements->fetch(PDO::FETCH_NUM);
     
        if($data[0] == 0)
            { 
                $return = $requeteElements -> execute(array(...)) or die("Erreur SQL!"); }
                echo 'nom  : ' . $value[0]['nom'] .  ' non trouvé ; count = ' . $data[0] . ' - Insertion <br/>';
        else
            { 
                $test = 1;
                echo 'nom  : ' . $value[0]['nom'] .  ' trouvé ; count = ' . $data[0] . '<br/>';    
        }
    }
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 226
    Par défaut
    Je n'y comprends rien.

    J'ai mis votre code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    if($data[0] == 0)
            { 
                echo 'nom  : ' . $value[0]['nom'] .  ' non trouvé ; count = ' . $data[0] . ' - Insertion <br/>';
            }
    else
            { 
                echo 'nom  : ' . $value[0]['nom'] .  ' trouvé ; count = ' . $data[0] . '<br/>';    
            }
    echo $value[0]['nom']."<br/>";
    echo $data[0]."<br/>";
    Donc quand je laisse le else ça ne marche pas (j'ai Status Code:500 Internal Server Error dans l'outil developper).
    Par contre quand je ne l'ai pas , j'ai bien le nom et 1 ou 0 (de data[0]) qui s'affiche avec le if si la condition est remplie.

    Pourtant le else est correct, je ne vois pas d'accolade manquante ou d'erreur de syntaxe...

    PS : j'ai bien ajouté le fetch(PDO::FETCH_NUM)

  7. #7
    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
    Consulte tes logs d'erreur PHP.
    Erreur 500 c'est ce que donne un serveur qui n'affiche pas les erreurs.
    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. Problème sur condition IF
    Par asty69 dans le forum Débutez
    Réponses: 6
    Dernier message: 30/05/2011, 13h38
  2. Problème sur condition 'if '
    Par chrystobale dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 19/03/2009, 16h32
  3. [XSLT] Problème de condition sur un XSLT
    Par alex.nd dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 12/09/2006, 15h16
  4. problème sur une condition if
    Par boss_gama dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 19/07/2006, 12h04
  5. Réponses: 4
    Dernier message: 13/02/2006, 11h13

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