Partage
  • Partager sur Facebook
  • Partager sur Twitter

Pourquoi sa veut pas rentrer ?

Problème BDD (sûrement Insert)

    29 décembre 2005 à 21:48:01

    Bonjour à tous et Joyeuses Fêtes,
    J'ai un petit problème avec un forum que j'avais codé il y a quand même quelques temps, du temps où je codais encore vraiment comme un goret et où le code était un bloc dénué de commentaires. J'ai voulu remettre à neuf ce "script" (si je peux encore l'appeler comme sa ^^ ) et donc avec ce que j'avais apris de nouveau, il y avait la très grande partie à recoder. J'ai déjà fait quelques beaux trucs mais là je bloque avec un problème vraiment idiot mais que je ne sais résoudre. Les données ne veulent pas rentrer dans la BDD et j'ai déjà passé une bonne heure à chercher ce qui bloquait sans trouver. C'est pourquoi je fais apel à votre aide. Tout va bien jusqu'à l'insert mais rien ne rentre et comme aucun message perso d'erreur aparait, j'en déduit que c'est bien l'insert qui bloque. Voici le code du script du forum

    connexiondb() ; // On se connecte à la bdd
    calcnbpg() ; // On calcule le nombre de pages

    if($_GET["action"]=="supr")
     { $_SESSION["pseudo"]=NULL ;
       $_SESSION["autho"]=NULL ;}

    $_SESSION['ID']=NULL ;

    if(!empty($_SESSION['pseudo']))
     {$pseudo=$_SESSION['pseudo'];}
    else
    {$pseudo=$_POST['pseudo']; }
     
    $MDP=$_POST["MDP"];
    $titre=addslashes($_POST["titre"]);
    $message=nl2br(addslashes($_POST["message"]));

    if ($_POST["p"]==NULL)
     {$p=$_GET["p"];}
    elseif ($_POST["p"]==NULL && $_GET["p"]==NULL)
     {$p=0;}
    else
     {$p=$_POST["p"];}

    if($_POST["envoi"]=="ok") // Si des données ont été envoyées par le formulaire
    {
    authentification($pseudo, $MDP) ; // On appelle une fonction qui vérifie que le visiteur est bien membre

    if ($authentification=="ok" && !empty($titre) && !empty($message)) // Si c'est le cas et que tous les autrs champs sont remplis, on procède à l'enregistrement
      {$timestam=mktime();
       
       // Le problème doit venir d'ici
       
       mysql_query("INSERT INTO `forum` ( `ID` , `Titre` , `Pseudo` , `timestam` ) VALUES ( '".$timestam."', '".$titre."', '".$pseudo."', '".$timestam."')") ;
       $temp=mysql_query("Select * from forum where Titre='$titre' && pseudo='$pseudo' && ID='$timestam'");
       $resultat=mysql_fetch_array($temp);
       $ID=$resultat["ID"];
       mysql_query("Insert into `messages` values('$message', '$ID', '$pseudo', '$timestam')");}

    else // Autrement, on affiche le message d'erreur qui convient
     {if(empty($titre) && empty($message))
       {echo 'Vous n\'avez pas rempli les champs Titre et Message.<br/>' ; }
      elseif(empty($titre))
       {echo 'Vous n\'avez pas rempli le champ Titre.<br/>' ; }
      elseif(empty($message))
       {echo 'Vous n\'avez pas rempli le champ Message.<br/>' ; }
       } // On ferme le else

    } // Fin de la partie traitant les données envoyées par formulaire

    echo '<table align="center" border="0" width="100%" class="texte"><tr><td colspan="3"><h1 align="center">Forum</h1></td></tr>'."\n".'
    <tr><td align="center"><h2>Titre :</h2></td><td align="center"><h2>Pseudo :</h2></td><td align="center"><h2>Créé le :</h2></td></tr>'
    ;
    if ($p!=NULL)
     {$p1=$p*10;
     $temp=mysql_query("Select * from forum order by ID desc limit $p1, 20");}
    else
    {$temp=mysql_query("Select * from forum order by ID desc limit 0, 20"); }
     
    while($resultat=mysql_fetch_array($temp))
     {echo '<tr><td align="left" width="50%"><a href="sujet.php?ID='.$resultat["ID"].'">';
      echo stripslashes($resultat["Titre"]);
      echo '</a></td>'."\n".'<td align="center" width="20%">';
      echo $resultat["Pseudo"];
      echo '</td>'."\n".'<td align="left" width="30%">';
      $timestam=$resultat["timestam"] ;
      ecrireheure ($timestam) ;
      echo '</td></tr>'."\n".'';}
     
    if ($p>0)
     {echo '<tr><td colspan="3" align="center"><a href="forum.php?p=0">Première page</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';}
    if ($p!=0 && $p!=NULL)
     {$pp=$p-2;
     echo '<a href="forum.php?p=';
     echo $pp;
     echo '"><<< Page précédente</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';}
    else
     {}
    if ($p>2)
     {$pst=$p+2;
    echo '<a href="forum.php?p=';
    echo $pst ;
    echo '">Page suivante >>></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="forum.php?p='.$nbpg.'">Dernière page</a></td></tr>';}
    echo '<tr><td colspan="3">Il y a ';
    $temp=mysql_query("Select * from membre order by ID");
    $nbmb=0;
    while ($resultat=mysql_fetch_array($temp))
     {$nbmb++;}
    echo $nbmb.'&nbsp;membres enregistrés dans la base de données. Le dernier membre enregistré est : ';
    $temp=mysql_query("Select * from membre order by ID desc limit 0, 1");
    $resultat=mysql_fetch_array($temp);
     echo $resultat["pseudo"];
    echo '</td></tr></table>';
    echo '<table align="center" border="0px" class="texte"><form name="donnees" method="post" action="forum.php"><input type="hidden" name="pseudo" value="'.$pseudo.'" />
    <tr><td colspan="2"><h3 align="center">Nouveau sujet</h3></td></tr>
    <tr><td align="left">Pseudo :</td><td>'
    ;

    if(!empty($_SESSION['pseudo']))
    {echo $pseudo.'&nbsp;&nbsp;&nbsp;<font size="-3">Clique <a href="forum.php?p='.$p.'&amp;action=supr">ici</a> pour choisir un autre pseudo.</font>';}
    else
    {echo '<input name="pseudo" type="text"  maxlength="20"/></td></tr><tr><td align="left">Mot de passe :</td><td><input name="MDP" type="password" maxlength="25" />&nbsp;&nbsp;<a href="inscription.php">S\'inscrire</a>';}
    echo '</td></tr>
    <tr><td align="left">Titre :</td><td><input name="titre" type="text" maxlength="35" width="235"/></td></tr>
    <tr><td align="left" valign="top">Message :</td><td><textarea name="message" cols="35" rows="10" maxlength="600"></textarea></td></tr>
    <tr><td align="center" colspan="2"><input type="hidden" name="a" value="2"/><input type="hidden" name="envoi" value="ok" /><input type="submit" name="Valider" value="Valider"/>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="hidden" name="p" value="0"/><input type="reset"/></td></tr></form></table>'
    ;
    echo "</font>";
    require("designbas.html");


    Et voilà ma table forum
    CREATE TABLE `forum` (
      `ID` int(11) NOT NULL DEFAULT '0',
      `Titre` varchar(35) NOT NULL DEFAULT '',
      `Pseudo` varchar(20) NOT NULL DEFAULT '',
      `timestam` int(11) DEFAULT NULL,
      PRIMARY KEY  (`ID`)
    ) TYPE=MyISAM;


    Et ma table messages (si sa peut servir)
    CREATE TABLE `messages` (
      `ID` int(11) NOT NULL AUTO_INCREMENT,
      `parentID` int(11) NOT NULL DEFAULT '0',
      `pseudo` varchar(20) NOT NULL DEFAULT '',
      `message` text NOT NULL,
      `timestam` int(11) NOT NULL DEFAULT '0',
      PRIMARY KEY  (`ID`)
    ) TYPE=MyISAM AUTO_INCREMENT=77 ;


    Merci d'avance
    • Partager sur Facebook
    • Partager sur Twitter
      29 décembre 2005 à 22:11:18

      salut,

      J'ai pa trop le courage de regarder ton code c'est pas super clair mais en tt cas je peux toujours te filer une ptite astuce.

      kan tu as une erreur comme ca et tu pense que ca vient de ta query rajoute un or die(mysql_error());

      exemple

      $query = mysql_query("select machin");
      devient
      $query = mysql_query("select machin") or die(mysql_error());

      voila si ta une erreur tu devrait la voir maintenan

      Bonne chance
      • Partager sur Facebook
      • Partager sur Twitter
        29 décembre 2005 à 22:16:55

        J'ignore si c'est cela, mais quand moi je met :

        Citation : code

        mysql_query("INSERT INTO 'truc' VALUES('value01', 'value02')")


        Ca ne marche pas.

        Mais

        Citation : code correct

        mysql_query("INSERT INTO truc VALUES('value01', 'value02')")

        marche.
        • Partager sur Facebook
        • Partager sur Twitter
          29 décembre 2005 à 22:29:42

          Effectivement Domenico, tu as raison de signaler celà. Le caractères pour protéger les noms de tables dans une BDD SQL sont les "backquotes" : ``

          Ce qui donnera `tuto` dans notre cas ;) .

          EDIT: Je vais voir ce que ça donnera quand j'aurai aéré ton code ^^

          Voilà ce que nous avons
          <?PHP
          // Donc la nos deux fonctions : Connexion et Calcul des pages
          connexiondb(); calcnbpg() ;

          // Conditions sur la session. Je vire, ça n'as pas d'importance pour la requête
          //A noter que tu devrais aussi vérifier l'existence des variables $_POST[] envoyées par le formulaire.

          //On stocke le MDP, le titre et le message
          $MDP = $_POST["MDP"];
          $titre = addslashes($_POST["titre"]);
          $message = nl2br(addslashes($_POST["message"]));

          //Voilà 'p', un ptit gars sympa du formulaire ^^, un nombre de page ; je ne sais pas. Je vire, ça n'as pas d'importance pour la requête


          // Si des données ont été envoyées par le formulaire
          if($_POST["envoi"]=="ok") {

                  // On appelle une fonction qui vérifie que le visiteur est bien membre
                  authentification($pseudo, $MDP);

                   // Si c'est le cas et que tous les autrs champs sont remplis, on procède à l'enregistrement
                   // Heu, $authentification viens de la fonction authentification ? La variable a-t-elle été 'globalisée' pour sortir de la fonction ? A vérifier sinon on accède jamais à la requete...
                  if($authentification == "ok" && !empty($titre) && !empty($message))  {
                 
                          $timestam=mktime();
             
                          mysql_query("INSERT INTO `forum` ( `ID` , `Titre` , `Pseudo` , `timestam` ) VALUES ( '".$timestam."', '".$titre."', '".$pseudo."', '".$timestam."')");
                          //Tu réappelle dans la BDD ce que tu viens d'entrer, dans la meme table.... inutile.
                          //$temp=mysql_query("Select * from forum where Titre='$titre' && pseudo='$pseudo' && ID='$timestam'&quot;);
                          //$resultat=mysql_fetch_array($temp);
                          //Vu que tu rappelle la meme chose, l'ID est toujours le meme. c'est $timestan
                          //$ID=$resultat["ID"];
                          //Du coup ta requête ça sera..
                          mysql_query("INSERT INTO `messages` values('$message', '$timestan', '$pseudo', '$timestam')");
                 
                   // Autrement, on affiche le message d'erreur qui convient.
                  } else {

                          //Je vire, ça n'as pas d'importance pour la requête
                 
                  }

          }

          // Ensuite affichage des messages, que des query("SELECT ....&quot;), j'enlève :p
          // Pavé HTML suivi de l'appel du bas de page
          require("designbas.html");
          ?>


          Voilà il y a quelques commentaire que j'ai ajouté dans le code. Tes requêtes SQL sont l'air d'être syntaxiquement correctes.
          Cependant, si on observe la structure de ta table SQL 'messages', elle comprend 5 champs, tu n'en remplis que 4 dans ta seconde requête :


          mysql_query("INSERT INTO `messages` values('$message', '$timestan', '$pseudo', '$timestam')");

          //Devrait devenir (tu met les champs que tu veux remplir dans mes Un, Deux, Trois, Quatre
          mysql_query("INSERT INTO `messages` (`Un`, `Deux`, `Trois`, `Quatre`) values('$message', '$timestan', '$pseudo', '$timestam')");
          //Ou alors il faut que tu donne la valeur du 5e champs dans ta requete :)
          • Partager sur Facebook
          • Partager sur Twitter
            29 décembre 2005 à 23:29:12

            Merci à tous pour vos réponses.
            C'est vrai que mon code est encore un peu dégueulasse par endroit mais ce n'est que les endroits où je n'ai pas encore mis le pied (je résouds un problème à la fois).
            J'essaye ça tout de suite et je dis quoi
            PS: le temps de réponse, c'est normal, j'ai laissé l'ordi à mon frère
            • Partager sur Facebook
            • Partager sur Twitter

            Pourquoi sa veut pas rentrer ?

            × 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