Partage
  • Partager sur Facebook
  • Partager sur Twitter

fetchAll() retourne faux

    21 janvier 2018 à 15:11:46

    Bonjour,
    J'aimerais enregistrer ces informations dans la base de donnée si seulement si elles n'existent pas déjà celle-ci. Mais je constate que ça refuse malgré que ça n'existent pas dans ma bdd. : Ces informations existent déjà


    $stmt = $pdo->prepare('SELECT COUNT(*) FROM client WHERE username = :username AND compte = :compte AND code1 = :code1 AND code2 = :code2 AND code3 = :code3');
    		$stmt->execute(array( 
    			'username' => $username,
    			'compte' => $compte,
    			'code1' => $code1,
    			'code2' => $code2,
    			'code3' => $code3
    		));
    		if ($stmt->fetchAll() == 0){
    			$query = $pdo->prepare('INSERT INTO client (nom, prenom, username, compte, password, code1, code2) VALUES (:nom, :prenom, :username, :compte, :password, :code1, :code2, :code3)');
    			$query->execute(array(
    				'nom' => $nom,	'prenom' => $prenom, 'username' => $username, 'compte' => $compte, 'password' => $password, 'code1' => $code1, 'code2' => $code2, 'code' => $code3
    			)); 
    			header("Location: login.php");
    		} else {
    			$error = true;
    			$champsexisteError = "Ces informations existent déja .";
    		}



    -
    Edité par IamLouky 21 janvier 2018 à 15:15:51

    • Partager sur Facebook
    • Partager sur Twitter
      21 janvier 2018 à 15:15:02

      Tu as fais un var_dump sur $stmt->fetchAll() pour voir ce qu'il y avait dedans ?
      • Partager sur Facebook
      • Partager sur Twitter
        21 janvier 2018 à 15:17:22

        Nephthys a écrit:

        Tu as fais un var_dump sur $stmt->fetchAll() pour voir ce qu'il y avait dedans ?


        $stmt->fetchAll()==0 pour voir si ces informations existent déjà dans la base de donnée, au cas où ça sera ==0 alors enrégistre INSERT INTO..

        -
        Edité par IamLouky 21 janvier 2018 à 15:19:27

        • Partager sur Facebook
        • Partager sur Twitter
          21 janvier 2018 à 15:18:46

          Salut,

          $stmt = $pdo->prepare('SELECT COUNT(*) FROM client WHERE username = :username AND compte = :compte AND code1 = :code1 AND code2 = :code2 AND code3 = :code3');
          //                                                                                   tes variables sont ici :  ^----^             ^----^             ^----^
          $stmt->execute(array(
              'username' => $username,
              'compte' => $compte,
              'codetransfert1' => $codetransfert1,
          //  ^--------------^ Erreur : PDO attendait 'code1'
              'codetransfert2' => $codetransfert2,
          //  ^--------------^ Erreur : PDO attendait 'code2'
              'codetransfert3' => $codetransfert3
          //  ^--------------^ Erreur : PDO attendait 'code3'
          ));
          if ($stmt->fetchAll() == 0){
              $query = $pdo->prepare('INSERT INTO client (nom, prenom, username, compte, password, code1, code2) VALUES (:nom, :prenom, :username, :compte, :password, :code1, :code2, :code3)');
          //                                                                                                                                           ta variable s'appelle 'code3' : ^----^
              $query->execute(array(
                  'nom' => $nom,   
                  'prenom' => $prenom, 
                  'username' => $username, 
                  'compte' => $compte, 
                  'password' => $password, 
                  'code1' => $code1, 
                  'code2' => $code2, 
                  'code' => $code3
          //      ^----^ Erreur : PDO attendait 'code3'
              ));
              header("Location: login.php");
          } else {
              $error = true;
              $champsexisteError = "Ces informations existent déja .";
          }

          Ton code manque de relecture ;)

          De plus voici la syntaxe de fetch_all()

          public array PDOStatement::fetchAll ([ int $fetch_style [, mixed $fetch_argument [, array $ctor_args = array() ]]] )

          Il renvoir un array contenant toutes tes données.. Utilises donc la fonction count()

          -
          Edité par Skayotix 21 janvier 2018 à 15:22:11

          • Partager sur Facebook
          • Partager sur Twitter
          Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell
            21 janvier 2018 à 15:22:17

            Skayotix a écrit:

            Salut,

            $stmt = $pdo->prepare('SELECT COUNT(*) FROM client WHERE username = :username AND compte = :compte AND code1 = :code1 AND code2 = :code2 AND code3 = :code3');
            //                                                                                   tes variables sont ici :  ^----^             ^----^             ^----^
            $stmt->execute(array(
                'username' => $username,
                'compte' => $compte,
                'codetransfert1' => $codetransfert1,
            //  ^--------------^ Erreur : PDO attendait 'code1'
                'codetransfert2' => $codetransfert2,
            //  ^--------------^ Erreur : PDO attendait 'code2'
                'codetransfert3' => $codetransfert3
            //  ^--------------^ Erreur : PDO attendait 'code3'
            ));
            if ($stmt->fetchAll() == 0){
                $query = $pdo->prepare('INSERT INTO client (nom, prenom, username, compte, password, code1, code2) VALUES (:nom, :prenom, :username, :compte, :password, :code1, :code2, :code3)');
            //                                                                                                                                           ta variable s'appelle 'code3' : ^----^
                $query->execute(array(
                    'nom' => $nom,   
                    'prenom' => $prenom, 
                    'username' => $username, 
                    'compte' => $compte, 
                    'password' => $password, 
                    'code1' => $code1, 
                    'code2' => $code2, 
                    'code3' => $code3
            //      ^----^ Erreur : PDO attendait 'code3'
                ));
                header("Location: login.php");
            } else {
                $error = true;
                $champsexisteError = "Ces informations existent déja .";
            }

            Ton code manque de relecture ;)

            Je l'ai déjà modifié et corrigé et toujours le même problème :

            $stmt = $pdo->prepare('SELECT COUNT(*) FROM client WHERE username = :username AND compte = :compte AND code1 = :code1 AND code2 = :code2 AND code3 = :code3');
                    $stmt->execute(array(
                        'username' => $username,
                        'compte' => $compte,
                        'code1' => $code1,
                        'code2' => $code2,
                        'code3' => $code3
                    ));
                    if ($stmt->fetchAll() == 0){
                        $query = $pdo->prepare('INSERT INTO client (nom, prenom, username, compte, password, code1, code2) VALUES (:nom, :prenom, :username, :compte, :password, :code1, :code2, :code3)');
                        $query->execute(array(
                            'nom' => $nom,   'prenom' => $prenom, 'username' => $username, 'compte' => $compte, 'password' => $password, 'code1' => $code1, 'code2' => $code2, 'code3' => $code3
                        ));
                        header("Location: login.php");
                    } else {
                        $error = true;
                        $champsexisteError = "Ces informations existent déja .";
                    }





            -
            Edité par IamLouky 21 janvier 2018 à 15:32:26

            • Partager sur Facebook
            • Partager sur Twitter
              21 janvier 2018 à 15:24:43

              il manque toujours 'code3' dans ta deuxième requête, et j'ai réédité mon message pour la syntaxe de fetchAll()

              Essais (une fois ton code corrigé) :

              if (count( $stmt->fetchAll() ) == 0)

              -
              Edité par Skayotix 21 janvier 2018 à 15:26:45

              • Partager sur Facebook
              • Partager sur Twitter
              Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell
                21 janvier 2018 à 15:27:09

                fetchAll avec un SELECT COUNT sans clause GROUP BY renverra toujours un tableau d'un élément ...

                Personnellement, je ne vois pas l'intérêt d'utiliser fetchAll quand on sait n'attendre qu'au plus une ligne (exactement une ici), un fetch, ou encore mieux, un fetchColumn suffit amplement ici.

                -
                Edité par julp 21 janvier 2018 à 17:47:38

                • Partager sur Facebook
                • Partager sur Twitter
                  21 janvier 2018 à 15:32:15

                  ce qui donne :

                  $stmt = $pdo->prepare('SELECT nom FROM client WHERE username = :username AND compte = :compte AND code1 = :code1 AND code2 = :code2 AND code3 = :code3');
                  $stmt->execute(array(
                      'username' => $username,
                      'compte' => $compte,
                      'code1' => $code1,
                      'code2' => $code2,
                      'code3' => $code3
                  ));
                  if (!$stmt->fetch()){
                      $query = $pdo->prepare('INSERT INTO client (nom, prenom, username, compte, password, code1, code2) VALUES (:nom, :prenom, :username, :compte, :password, :code1, :code2, :code3)');
                      $query->execute(array(
                          'nom' => $nom,
                          'prenom' => $prenom,
                          'username' => $username,
                          'compte' => $compte,
                          'password' => $password,
                          'code1' => $code1,
                          'code2' => $code2,
                          'code3' => $code3
                      ));
                      header("Location: login.php");
                  } else {
                      $error = true;
                      $champsexisteError = "Ces informations existent déja .";
                  }



                  • Partager sur Facebook
                  • Partager sur Twitter
                  Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell
                    21 janvier 2018 à 17:08:48

                    Skayotix a écrit:

                    ce qui donne :

                    $stmt = $pdo->prepare('SELECT nom FROM client WHERE username = :username AND compte = :compte AND code1 = :code1 AND code2 = :code2 AND code3 = :code3');
                    $stmt->execute(array(
                        'username' => $username,
                        'compte' => $compte,
                        'code1' => $code1,
                        'code2' => $code2,
                        'code3' => $code3
                    ));
                    if (!$stmt->fetch()){
                        $query = $pdo->prepare('INSERT INTO client (nom, prenom, username, compte, password, code1, code2) VALUES (:nom, :prenom, :username, :compte, :password, :code1, :code2, :code3)');
                        $query->execute(array(
                            'nom' => $nom,
                            'prenom' => $prenom,
                            'username' => $username,
                            'compte' => $compte,
                            'password' => $password,
                            'code1' => $code1,
                            'code2' => $code2,
                            'code3' => $code3
                        ));
                        header("Location: login.php");
                    } else {
                        $error = true;
                        $champsexisteError = "Ces informations existent déja .";
                    }


                    Toujours le même problème :

                    Ces informations existent déja


                    • Partager sur Facebook
                    • Partager sur Twitter
                      21 janvier 2018 à 17:15:41

                      Petit point sur lequel je souhaite revenir : header('Location: ...') redirige mais n'arrete pas la generation de la page, c'est l'une des plus grosse failles que l'on peut trouver sur un site.

                      Pour ce qui est de ce bout de code, tout m'a l'aire bon (sauf erreur de ma part), le problème vient peut-être de tes variables.

                      • Partager sur Facebook
                      • Partager sur Twitter
                      Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell
                        21 janvier 2018 à 17:25:29

                        Il ne faut pas utiliser fetch comme ça (parce que même si COUNT donne 0, il rentrera dans le else) mais plutôt fetchColum, donc remet le COUNT(*) dans ton SELECT et utilise fetchColumn().

                        Maintenant si PHP te donne un résultat contraire après avoir testé dans ton cas via PHPMYADMIN , là.

                        -
                        Edité par WillyKouassi 21 janvier 2018 à 17:26:54

                        • Partager sur Facebook
                        • Partager sur Twitter
                        le bienfait n'est jamais perdu

                        fetchAll() retourne faux

                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                        • Editeur
                        • Markdown