Partage
  • Partager sur Facebook
  • Partager sur Twitter

Requête qui n'écrit rien et n'affiche pas d'erreur !

Sujet résolu
    9 septembre 2010 à 20:48:04

    Bonsoir,
    je m'arrache les cheveux sur un requête qui ne veut pas passer. J'utilise du MVC, donc ceci est un fichier dans /modele/connexion/inscrire.php ! Le problème, c'est qu'il n'y a pas de message d'erreur qui s'affiche sur la page de vérification d'inscription, mais la requête ne fonctionne pas (la table dans la base de données membre reste vide).

    <?php
    function inscrire($pseudonyme, $nouveau_mot_de_passe, $valide, $courrier, $courrier, $sexe, $nom, $nom, $prenom, $prenom, $presentation, $pays, $region, $origine, $professionnelle, 
    $amicale, $amoureuse, $autre, $naissance, $messages)
    {
    	global $bdd;
    	$inscrire = $bdd->prepare('INSERT INTO membre (membre_pseudonyme, membre_mot_de_passe, membre_valide, membre_courrier, membre_courrier_insription, membre_sexe, membre_nom, membre_nom_inscription, membre_prenom, membre_prenom_inscription, membre_presentation, membre_pays, membre_region, membre_origine, membre_professionnelle, membre_amicale, membre_amoureuse, membre_autre, membre_naissance, membre_inscrit, membre_derniere_visite, membre_messages) 
    	VALUES (:pseudonyme, :mot_de_passe, :valide, :courrier, :courrier_insription, :sexe, :nom, :nom_inscription, :prenom, :prenom_inscription, :presentation, :pays, :region, :origine, :naissance, :professionnelle, :amicale, :amoureuse, :autre, :naissance, NOW(), NOW(), :messages)');
    	$inscrire->execute(array(
    	'pseudonyme' => $pseudonyme,
    	'mot_de_passe' => $nouveau_mot_de_passe,
    	'valide' => $valide,
    	'courrier' => $courrier,
    	'courrier_insription' => $courrier,
    	'sexe' => $sexe,
    	'nom' => $nom,
    	'nom_inscription' => $nom,
    	'prenom' => $prenom,
    	'prenom_inscription' => $prenom,
    	'presentation' => $presentation,
    	'pays' => $pays,
    	'region' => $region,
    	'origine' => $origine,
    	'naissance' => $naissance,
    	'professionnelle' => $professionnelle,
    	'amicale' => $amicale,
    	'amoureuse' => $amoureuse,
    	'autre' => $autre,
    	'naissance' => $naissance,
    	'inscrit' => $naissance,
    	'derniere_visite' => $naissance,
    	'messages' => $messages,
    	)); 
    }
    


    Comment résoudre ce problème ?

    La table :
    CREATE TABLE `membres` (
      `membre_id` int(11) NOT NULL AUTO_INCREMENT,
      `membre_pseudonyme` varchar(30) collate utf8_general_ci NOT NULL,
      `membre_mot_de_passe` varchar(32) collate utf8_general_ci NOT NULL,
      `membre_valide` int(11) NOT NULL,
      `membre_courrier` varchar(250) collate utf8_general_ci NOT NULL,
      `membre_courrier_inscription` varchar(250) collate utf8_general_ci NOT NULL,
      `membre_sexe` varchar(30) collate utf8_general_ci NOT NULL,
      `membre_nom` varchar(30) collate utf8_general_ci NOT NULL,
      `membre_nom_inscription` varchar(30) collate utf8_general_ci NOT NULL,
      `membre_prenom` varchar(30) collate utf8_general_ci NOT NULL,
      `membre_prenom_inscription` varchar(30) collate utf8_general_ci NOT NULL,
      `membre_presentation` varchar(200) collate utf8_general_ci NOT NULL,
      `membre_pays` varchar(100) collate utf8_general_ci NOT NULL,
      `membre_region` varchar(100) collate utf8_general_ci NOT NULL,
      `membre_origine` varchar(100) collate utf8_general_ci NOT NULL,
      `membre_professionnelle` enum('0','1') collate utf8_general_ci NOT NULL,
      `membre_amicale` enum('0','1') collate utf8_general_ci NOT NULL,
      `membre_amoureuse` enum('0','1') collate utf8_general_ci NOT NULL,
      `membre_autre` enum('0','1') collate utf8_general_ci NOT NULL,
      `membre_naissance` datetime  NOT NULL,
      `membre_inscrit` datetime  NOT NULL,
      `membre_derniere_visite` datetime  NOT NULL,
      `membre_messages` int(11) NOT NULL,
      PRIMARY KEY  (`membre_id`)
    );
    
    • Partager sur Facebook
    • Partager sur Twitter
      9 septembre 2010 à 21:39:05

      Lorsque tu fais un execute après un prepare, les "variables" SQL qui remplacent les valeurs se précèdent d'un ':' :

      <?php
      $inscrire->execute(array(
      	':pseudonyme' => $pseudonyme,
      	':mot_de_passe' => $nouveau_mot_de_passe,
      	':valide' => $valide,
      	...
      	)); 
      ?>
      


      De plus, fait gaffe, un array se termine sans virgule !

      A+ ;)
      • Partager sur Facebook
      • Partager sur Twitter
        9 septembre 2010 à 22:30:56

        Pourtant, c'est comme ça dans le cours de M@téo21 !
        Sinon, j'ai essayé en enlevant la virgule de la dernière ligne de l'array, et en ajoutant les : , et cette fois-ci, à chaque fois, j'ai des messages d'erreurs qui s'affichent.

        Citation : PDO

        Warning: PDOStatement::execute() [pdostatement.execute]: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in /public_html/modele/connexion/inscrire.php on line 32



        Ce message s'affiche avec :
        <?php
        function inscrire($pseudonyme, $nouveau_mot_de_passe, $valide, $courrier, $courrier, $sexe, $nom, $nom, $prenom, $prenom, $presentation, $pays, $region, $origine, $professionnelle, 
        $amicale, $amoureuse, $autre, $naissance, $messages)
        {
        	global $bdd;
        	$inscrire = $bdd->prepare('INSERT INTO membre (membre_pseudonyme, membre_mot_de_passe, membre_valide, membre_courrier, membre_courrier_insription, membre_sexe, membre_nom, membre_nom_inscription, membre_prenom, membre_prenom_inscription, membre_presentation, membre_pays, membre_region, membre_origine, membre_professionnelle, membre_amicale, membre_amoureuse, membre_autre, membre_naissance, membre_inscrit, membre_derniere_visite, membre_messages) 
        	VALUES (:pseudonyme, :mot_de_passe, :valide, :courrier, :courrier_insription, :sexe, :nom, :nom_inscription, :prenom, :prenom_inscription, :presentation, :pays, :region, :origine, :naissance, :professionnelle, :amicale, :amoureuse, :autre, :naissance, NOW(), NOW(), :messages)');
        	$inscrire->execute(array(
        	':pseudonyme' => $pseudonyme,
        	':mot_de_passe' => $nouveau_mot_de_passe,
        	':valide' => $valide,
        	':courrier' => $courrier,
        	':courrier_insription' => $courrier,
        	':sexe' => $sexe,
        	':nom' => $nom,
        	':nom_inscription' => $nom,
        	':prenom' => $prenom,
        	':prenom_inscription' => $prenom,
        	':presentation' => $presentation,
        	':pays' => $pays,
        	':region' => $region,
        	':origine' => $origine,
        	':naissance' => $naissance,
        	':professionnelle' => $professionnelle,
        	':amicale' => $amicale,
        	':amoureuse' => $amoureuse,
        	':autre' => $autre,
        	':naissance' => $naissance,
        	':inscrit' => $naissance,
        	':derniere_visite' => $naissance,
        	':messages' => $messages
        	)); 
        }
        


        Citation : PDO

        Warning: PDOStatement::execute() [pdostatement.execute]: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in /public_html/modele/connexion/inscrire.php on line 32



        Avec :
        <?php
        function inscrire($pseudonyme, $nouveau_mot_de_passe, $valide, $courrier, $courrier, $sexe, $nom, $nom, $prenom, $prenom, $presentation, $pays, $region, $origine, $professionnelle, 
        $amicale, $amoureuse, $autre, $naissance, $messages)
        {
        	global $bdd;
        	$inscrire = $bdd->prepare('INSERT INTO membre (membre_pseudonyme, membre_mot_de_passe, membre_valide, membre_courrier, membre_courrier_insription, membre_sexe, membre_nom, membre_nom_inscription, membre_prenom, membre_prenom_inscription, membre_presentation, membre_pays, membre_region, membre_origine, membre_professionnelle, membre_amicale, membre_amoureuse, membre_autre, membre_naissance, membre_inscrit, membre_derniere_visite, membre_messages) 
        	VALUES (:pseudonyme, :mot_de_passe, :valide, :courrier, :courrier_insription, :sexe, :nom, :nom_inscription, :prenom, :prenom_inscription, :presentation, :pays, :region, :origine, :naissance, :professionnelle, :amicale, :amoureuse, :autre, :naissance, NOW(), NOW(), :messages)');
        	$inscrire->execute(array(
        	'pseudonyme' => $pseudonyme,
        	'mot_de_passe' => $nouveau_mot_de_passe,
        	'valide' => $valide,
        	'courrier' => $courrier,
        	'courrier_insription' => $courrier,
        	'sexe' => $sexe,
        	'nom' => $nom,
        	'nom_inscription' => $nom,
        	'prenom' => $prenom,
        	'prenom_inscription' => $prenom,
        	'presentation' => $presentation,
        	'pays' => $pays,
        	'region' => $region,
        	'origine' => $origine,
        	'naissance' => $naissance,
        	'professionnelle' => $professionnelle,
        	'amicale' => $amicale,
        	'amoureuse' => $amoureuse,
        	'autre' => $autre,
        	'naissance' => $naissance,
        	'inscrit' => $naissance,
        	'derniere_visite' => $naissance,
        	'messages' => $messages,
        	)); 
        }
        


        Bref, j'ai fait aussi d'autres essais.
        Je ne sais plus quoi faire.
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          10 septembre 2010 à 8:33:15

          Citation

          'inscrit' => $naissance,
          'derniere_visite' => $naissance,


          Or ces paramètres n'existent pas dans ta requête, où tu as mis NOW() pour les colonnes concernées.


          Et aussi :

          Citation

          INSERT INTO membre
          [..]
          CREATE TABLE `membres`

          • Partager sur Facebook
          • Partager sur Twitter
            11 septembre 2010 à 16:28:20

            Merci pour ces précisions, j'ai corrigé ces erreurs (j'en ai trouvé d'autres en plus par moi-même) dans le fichier .sql et dans le fichier /modele/connexion/inscrire.php , et maintenant, il n'y a plus de message d'erreur, mais quand la page est exécuté, et que je vais voir dans ma base de données avec PHPMyAdmin, je vois que rien a été écris (j'ai une croix rouge sur Afficher).
            Pourtant, pas de message d'erreur) !

            <?php
            function inscrire($pseudonyme, $nouveau_mot_de_passe, $valide, $courrier, $courrier, $sexe, $nom, $nom, $prenom, $prenom, $presentation, $pays, $region, $origine, $professionnelle, 
            $amicale, $amoureuse, $autre, $naissance, $messages)
            {
            	global $bdd;
            	$inscrire = $bdd->prepare('INSERT INTO membres (membre_pseudonyme, membre_mot_de_passe, membre_valide, membre_courrier, membre_courrier_insription, membre_sexe, membre_nom, membre_nom_inscription, membre_prenom, membre_prenom_inscription, membre_presentation, membre_pays, membre_region, membre_origine, membre_professionnelle, membre_amicale, membre_amoureuse, membre_autre, membre_naissance, membre_inscrit, membre_derniere_visite, membre_messages) 
            	VALUES (:pseudonyme, :mot_de_passe, :valide, :courrier, :courrier_insription, :sexe, :nom, :nom_inscription, :prenom, :prenom_inscription, :presentation, :pays, :region, :origine, :professionnelle, :amicale, :amoureuse, :autre, :naissance, :inscrit, :derniere_visite, :messages)');
            	$inscrire->execute(array(
            	'pseudonyme' => $pseudonyme,
            	'mot_de_passe' => $nouveau_mot_de_passe,
            	'valide' => $valide,
            	'courrier' => $courrier,
            	'courrier_insription' => $courrier,
            	'sexe' => $sexe,
            	'nom' => $nom,
            	'nom_inscription' => $nom,
            	'prenom' => $prenom,
            	'prenom_inscription' => $prenom,
            	'presentation' => $presentation,
            	'pays' => $pays,
            	'region' => $region,
            	'origine' => $origine,
            	'professionnelle' => $professionnelle,
            	'amicale' => $amicale,
            	'amoureuse' => $amoureuse,
            	'autre' => $autre,
            	'naissance' => $naissance,
            	'inscrit' => $naissance,
            	'derniere_visite' => $naissance,
            	'messages' => $messages
            	)); 
            }
            




            CREATE TABLE `membres` (
              `membre_id` int(11) NOT NULL AUTO_INCREMENT,
              `membre_pseudonyme` varchar(30) collate utf8_general_ci NOT NULL,
              `membre_mot_de_passe` varchar(32) collate utf8_general_ci NOT NULL,
              `membre_valide` int(11) NOT NULL,
              `membre_courrier` varchar(250) collate utf8_general_ci NOT NULL,
              `membre_courrier_inscription` varchar(250) collate utf8_general_ci NOT NULL,
              `membre_sexe` varchar(30) collate utf8_general_ci NOT NULL,
              `membre_nom` varchar(30) collate utf8_general_ci NOT NULL,
              `membre_nom_inscription` varchar(30) collate utf8_general_ci NOT NULL,
              `membre_prenom` varchar(30) collate utf8_general_ci NOT NULL,
              `membre_prenom_inscription` varchar(30) collate utf8_general_ci NOT NULL,
              `membre_presentation` varchar(200) collate utf8_general_ci NOT NULL,
              `membre_pays` varchar(100) collate utf8_general_ci NOT NULL,
              `membre_region` varchar(100) collate utf8_general_ci NOT NULL,
              `membre_origine` varchar(100) collate utf8_general_ci NOT NULL,
              `membre_professionnelle` enum('0','1') collate utf8_general_ci NOT NULL,
              `membre_amicale` enum('0','1') collate utf8_general_ci NOT NULL,
              `membre_amoureuse` enum('0','1') collate utf8_general_ci NOT NULL,
              `membre_autre` enum('0','1') collate utf8_general_ci NOT NULL,
              `membre_naissance` datetime  NOT NULL,
              `membre_inscrit` datetime  NOT NULL,
              `membre_derniere_visite` datetime  NOT NULL,
              `membre_messages` int(11) NOT NULL,
              PRIMARY KEY  (`membre_id`)
            );
            


            Je n'y comprend rien ! Sinon, je viens de mettre les magic_quotes et variables_env sur OFF du php.ini, et ça fait pareil.

            Merci encore pour votre aide !

            Édition : En affichant tous les messages d'erreur, j'ai vu qu'une variable n'était pas renseignée, et que j'avais mis insription et pas inscription.

            Merci beaucoup !
            • Partager sur Facebook
            • Partager sur Twitter

            Requête qui n'écrit rien et n'affiche pas d'erreur !

            × 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