Partage
  • Partager sur Facebook
  • Partager sur Twitter

Probleme de requête qui ne crée pas de données

Pas d'erreur en vue, malgrés "mysql_error()"

Sujet résolu
    13 août 2006 à 14:49:22

    Bonjour tout le monde !

    J'ai commencé il y a déjà plusieurs semaines un espace membre. Mais j'ai quelques problèmes au niveau de l'inscription : ma requete n'insère pas de données !


    mysql_query("INSERT INTO `membres` VALUES('', '" . $_COOKIE['PHPSESSID'] . "', '" . $pseudo . "', '" . $mot_de_passe . "', '" . $mail . "', '" . $affiche_mail . "', '" . $passions . "', '" . $ville . "', '" . $code_postal . "', '" . $date_naissance . "') ") or die(mysql_error());

    Ce bout de code ne renvoie aucune erreur !


    Le code entier:

    function protect($val)
    {
    if(get_magic_quotes_gpc())
    {
    $val = stripslashes($val);
    }
    if( !is_numeric($val) )
    {
    $val = mysql_real_escape_string($val);
    }
    return($val);
    }
                   
    //verification de mdp/mail
    if(!empty($_POST['pseudo']) AND !empty($_POST['mot_de_passe']) AND !empty($_POST['mot_de_passe_retaper']) AND !empty($_POST['mail']) AND !empty($_POST['mail_retaper']))
    {
    if($_POST['mot_de_passe'] == $_POST['mot_de_passe_retaper'] AND $_POST['mail'] == $_POST['mail_retaper'])
    {
    $_COOKIE['PHPSESSID'] = protect(htmlspecialchars(trim($_COOKIE['PHPSESSID'])));
                           
    $pseudo = protect(htmlspecialchars(trim($_POST['pseudo'], ENT_QUOTES)));
    $mot_de_passe = protect(htmlspecialchars(trim($_POST['mot_de_passe'], ENT_QUOTES)));
    $mail = protect(htmlspecialchars(trim($_POST['mail'], ENT_QUOTES)));

    //Plusieurs condition pour savoir si c'est rempli (non-obliger !)
    if(!empty($_POST['affiche_mail']))
    {
    $affiche_mail = $_POST['affiche_mail'] = "oui";
    }
    else
    {
    $affiche_mail = $_POST['affiche_mail'] = "non";
    }

    if(!empty($_POST['passions']))
    {
    $passions = protect(htmlspecialchars(trim($_POST['passions'], ENT_QUOTES)));
    }
    else
    {
    $passions = $_POST['passions'] = '';
    }

    if(!empty($_POST['ville']))
    {
    $ville = protect(htmlspecialchars(trim($_POST['ville'], ENT_QUOTES)));
    }
    else
    {
    $ville = $_POST['ville'] = '';
    }

    if(!empty($_POST['code_postal']))
    {
    $code_postal = protect(trim($_POST['code_postal'], ENT_QUOTES));
    }
    else
    {
    $code_postal = $_POST['code_postal'] = '00000';
    }

    if(!empty($_POST['date_naissance']))
    {
    $date_naissance = protect(trim($_POST['date_naissance'], ENT_QUOTES));
    }
    else
    {
    $date_naissance = $_POST['date_naissance'] = '00/00/0000';
    }
    $insertion_reussi = mysql_query("INSERT INTO `membres` VALUES('', '" . $_COOKIE['PHPSESSID'] . "', '" . $pseudo . "', '" . $mot_de_passe . "', '" . $mail . "', '" . $affiche_mail . "', '" . $passions . "', '" . $ville . "', '" . $code_postal . "', '" . $date_naissance . "') ") or die(mysql_error());

    //petit test pour vois si ça affiche les coordonnees entrées
    if($insertion_reussi)
    {
    echo '<p class="information">Vous êtes à présent inscrit au site, mais vous devez attendre un mail de confirmation.</p>';
    }
    echo $_COOKIE['PHPSESSID'] . '<br />' . $pseudo . '<br />' . $mot_de_passe . '<br />' . $mail . '<br />' . $affiche_mail . '<br />' . $passions . '<br />' . $ville . '<br />' . $code_postal . '<br/>' . $date_naissance;
    }
    else
    {
    echo '<p class="erreur">Vous avez mal retaper votre mot de passe/addresse e-mail</p><hr />';
    }
    }

    if(isset($_POST['pseudo']) OR isset($_POST['mot_de_passe']) OR isset($_POST['mot_de_passe_retaper']) OR isset($_POST['mail']) OR isset($_POST['mail_retaper']))
    {
    if($_POST['pseudo'] == NULL OR $_POST['mot_de_passe'] == NULL OR $_POST['mot_de_passe_retaper'] == NULL OR $_POST['mail'] == NULL OR $_POST['mail_retaper'] == NULL)
    {
    echo '<p class="erreur">Vous n\' avez pas rempli tous les champs.</p><hr />';
    }
    }
    //oui ! ça affiche ! mais rien dans la table :(
     


    Merci d'avance !
    • Partager sur Facebook
    • Partager sur Twitter
      13 août 2006 à 15:11:24

      Pourquoi tu fais un addslashes sur tes variables POST, et tu fais un stripslashes sur les variables dans ton INSERT ? o_O

      Manque également un addslashes sur ton cookie.
      • Partager sur Facebook
      • Partager sur Twitter
        13 août 2006 à 16:51:12

        Citation : strucky

        Pourquoi tu fais un addslashes sur tes variables POST, et tu fais un stripslashes sur les variables dans ton INSERT ? o_O

        Manque également un addslashes sur ton cookie.


        >_< C'est bête ! Je me suis trompé à l'endroit où mettre le "stripslashes". Et le cookie n'a pas besion de "addslashes" puisqu'il contient l'id de session (PHPSESSID) qui est généré par ... php (?).

        Enfin cela ne resout pas mon problème, mais c'est une bonne remarque.
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          13 août 2006 à 16:57:39

          Sans vouloir être méchant, ce code est une horreur, tu utilises des fonctions à tort et à travers sans même réfléchir à si il faut ou non les utiliser.
          • Partager sur Facebook
          • Partager sur Twitter
            13 août 2006 à 20:14:58

            Citation : Yondaime

            Sans vouloir être méchant, ce code est une horreur, tu utilises des fonctions à tort et à travers sans même réfléchir à si il faut ou non les utiliser.


            Tu parles des "htmlentities(addslashes(trim($_POST)))" ?

            J'ai supprimé tout les addslashes et j'ai rajouté ENT_QUOTES("MySQL n'aime pas trop les apostrophes en particulier")

            Heureusement que tu as fait cette remarque ! En réalité je savais même pas à quoi servait mes fonctions

            Que dois-je faire d'autre ?


            Et j'aurais aimé revenir à mon premier problème :euh: .
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              13 août 2006 à 20:23:49

              htmlentities() est superflu, il faut employer htmlscpecialchars() ;)
              addslashes n'est pas utile dans ce cas.
              Il faut utiliser stripslashes() si et seulement si get_magic_quotes_gpc() ( guillemet magique = echappement en rajoutant des slash ) renvoie true

              Et pour éviter les injections sql, on protège les variables avec mysql_real_escape_string()

              Fais déjà ça, après on pourra trouver le problème dans un script propre ^^
              • Partager sur Facebook
              • Partager sur Twitter
                15 août 2006 à 14:03:50

                Voilà j'ai édité mon premier post, je fais tout ce qu'il fallait (je ne suis pas sûr que c'est bien fait :( )

                Citation : Tryx_M.I.P.

                J'ai commencé il y a déjà plusieurs semaines un espace membre. Mais j'ai quelques problèmes au niveau de l'inscription : ma requete n'insère pas de données !


                • Partager sur Facebook
                • Partager sur Twitter
                  15 août 2006 à 14:18:39

                  Ca va pas du tout.

                  D'abord le mysql_real_escape_string et ensuite le htmlspecialchars.
                  D'ailleurs le htmlspecialchars, je préfère m'en servir quà l'affichage, m'enfin, c'est qu'une question d'avis.

                  Tiens une fonction toute bête :

                  function protect($val)
                  {
                      if(get_magic_quotes_gpc)
                      {
                          $val = stripslashes($val);
                      }
                      if( !is_numeric($val) )
                      {
                          $val = mysql_real_escape_string($val);
                      }
                      return($val);
                  }


                  Que tu utiliseras :

                  $pseudo = protect(trim($_POST['pseudo']);


                  Et rien d'autre, pas besoin de ta condition.

                  Et fait le également sur ton cookie, cette donnée provient de l'utilisateur.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    16 août 2006 à 16:42:58

                    Voilà j'ai re-re-édité mon post !
                    C'est bon ?

                    Et mon problème principal ?
                    • Partager sur Facebook
                    • Partager sur Twitter
                      17 août 2006 à 17:14:19

                      Up !

                      Rappel : Ma requete d'insertion ne marche pas !
                      • Partager sur Facebook
                      • Partager sur Twitter
                        17 août 2006 à 17:56:17

                        Le mysql_real_escape_string ne sert à rien puisque tu fais un htmlspecialchars avant.

                        Pour ta requête d'insert, t'es sûr qu'elle est exécutée ?

                        Y'a pas d'erreur ?


                        Mais bon ton code est un peu fouilli.
                        • Partager sur Facebook
                        • Partager sur Twitter
                          17 août 2006 à 18:18:41

                          Salut,
                          il se peut que ta requête ne marche pas si tu n'as pas mis le même nombre d'insertion que de champs.
                          Je m'explique :
                          supposons que tu as 4 champs sur ta table membres(id, pseudo, mdp, mail), mais que, dans ta requête, tu n'en as que 3(mysql_query("INSERT INTO `membres` VALUES('', '" . $pseudo . "', '" . $mdp . "') ") or die(mysql_error());
                          sa ne marchera pas mais tu n'aura pas d'erreur. Essai de voir si ça ne viens pas de là.
                          • Partager sur Facebook
                          • Partager sur Twitter
                            17 août 2006 à 18:39:43

                            J'ai refait ton script à ma façon :

                            <?php

                            function protect($val)
                            {
                                if(get_magic_quotes_gpc())
                                {
                                    $val = stripslashes($val);
                                }
                                if( !is_numeric($val) )
                                {
                                    $val = mysql_real_escape_string($val);
                                }
                                return($val);
                            }

                            if( isset($_POST['']) )  /// ICI tu mets le name du submit
                            {
                                $erreur = array();   
                                foreach( $_POST as $clef => $val )
                                {
                                    ${$clef} = protect(trim($val));
                                }
                               
                                if( empty($pseudo) )
                                {
                                    $erreur[] = 'Veuillez indiquer un pseudo.'
                                }
                               
                                if( empty($mot_de_passe) )
                                {
                                    $erreur[] = 'Veuillez choisir un mot de passe.';
                                }
                               
                                if( $mot_de_passe != $mot_de_passe_retaper )
                                {
                                    $erreur[] = 'Les mots de passes entrés ne correpondent pas.';
                                }

                                if( empty($mail) )
                                {
                                    $erreur[] = 'Veuillez indiquer une adresse email.';
                                }
                               
                                $affiche_mail = ( !empty($affiche_mail) ) ? 'oui' : 'non'; // pourquoi oui et non ??? un simple 0 et 1 suffiraient
                               
                                if( empty($code_postal) ) $code_postal = '00000'; // pourquoi 00000 ???
                                if( empty($date_naissance) ) $date_naissance = '00/00/0000'// pourquoi 00/00/0000 ???
                               
                               
                                if( empty($erreur) )
                                {
                                    $sql = "INSERT INTO membres VALUES('',
                                           '"
                            . protect($_COOKIE['PHPSESSID']) . "',
                                           '"
                            . $pseudo . "',
                                           '"
                            . $mot_de_passe . "',
                                           '"
                            . $mail . "',
                                           '"
                            . $affiche_mail . "',
                                           '"
                            . $passions . "',
                                           '"
                            . $ville . "',
                                           '"
                            . $code_postal . "',
                                           '"
                            . $date_naissance . "')";
                                           
                                    if( mysql_query($sql) or die (mysql_error()) )
                                    {
                                        echo '<p class="information">Vous êtes à présent inscrit au site, mais vous devez attendre un mail de confirmation.</p>';
                                    }
                                }
                                else
                                {
                                    echo "\\n<ul>";
                                    foreach( $erreur as $val )
                                    {
                                        echo "\\n\\t<li>$erreur</li>";
                                    }
                                    echo "\\n</ul>";
                                }
                            }
                                         
                            ?>


                            Juste à mettre le name du submit dans la 1ère condition.

                            Les slashs sur les retours à la ligne et tabulations ne sont pas pris en compte, rajoute les.
                            • Partager sur Facebook
                            • Partager sur Twitter
                              20 août 2006 à 18:18:47

                              Wow ! C'est vraiment plus clair !
                              C'était bien réfléchi le coup du :

                              foreach( $_POST as $clef => $val )
                              {
                                  ${$clef} = protect(trim($val));
                              }


                              Enfin, je n' avais pas envie de poster pour redire : "Et maintenant ? Ca bug toujours hein !". Du coup, j'ai cherché de mon côté... Et j'ai enfin> trouvé l'erreur : c'était la connexion ! En faite, toutes les infos étaient redirigées sur une autre table, sur le net !

                              Ben, je n'avais qu'à réparer ça (en changeant le "user", "mdp" de mysql) et hop ! c'est réparer ! Tout ça pour rien un code plus clair :-° .

                              <hs>
                              Vous le saviez que quand on met les coordonnées de mysql d'une table sur le net, et ben ça marche en tapant "127.0.0.1/index.php"
                              </hs>


                              Encore merci pour les conseille ^^ .
                              • Partager sur Facebook
                              • Partager sur Twitter

                              Probleme de requête qui ne crée pas de données

                              × 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