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

PHP & Base de données Discussion :

Plusieurs problèmes sur mon script ( création d'un forum) php [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Inscrit en
    juin 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : juin 2009
    Messages : 23
    Points : 19
    Points
    19
    Par défaut Plusieurs problèmes sur mon script ( création d'un forum) php
    Bonjour,

    Je suis novice dans le domaine du développement web, je travaille actuellement sur un projet ou je dois crée un créer un forum

    1/ J'ai procédé par étape , tout d'abord permettre aux utilisateurs de poster leur messages sur le mur

    2/ Permettre aux utilisateurs de répondre aux messages posté sur le mur ( jusque là tout allait bien)

    3/ Maintenant, je veux prévenir chaque participant aux forum quand il y a une réponse a son message, je me suis aidé par un petit script que j'ai trouvé sur internet mais je ne comprends pas tout dedans

    De plus, j'ai des problèmes d'affichage quand je teste ma page : En effet, le bouton réponse a disparu ( je ne comprends pas pourquoi?)

    et dernière petite chose, concernant la base de données, quand un utilisateur veut poster un nouveau sujet et bien j'ai un problème d'ecriture dans ma table, car la valeur de champ réponse est a 1 ( chose que je ne comprends pas du tout car par défaut elle est à 0)

    l'erreur qu'il me met est la suivante :
    Insertion dans la base de données du site impossible INSERT INTO forum_messages (quand,pseudo,email,message,reponse) VALUES (1246436840,'dgg','sgsg','sgsgg','') Incorrect integer value: '' for column 'reponse' at row 1
    le code est le suivant :


    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
     
    <?php
    /* Mini-forum en PHP */
     
    // === CONNEXION A LA BD ===
     
    // On teste si on est en local 
    $isLocal=($_SERVER["SERVER_NAME"]=="localhost");
     
     
    //$isLocal = TRUE;
    // Paramètres de connexion en local ou sur site
     
    $host = ($isLocal) ? "localhost" : "localhost"; 
    $user = ($isLocal) ? "root" : "root"; 
    $pass = ($isLocal) ? "mdp" : "mdp"; 
    $bdd = ($isLocal) ? "forum" : "forum";
     
    // connexion a la base de donnees
     
    $link = mysql_connect($host,$user,$pass);
    mysql_select_db($bdd); 
     
     
    // Variables
     
    if(isset($_POST['pseudo']))      $pseudo=$_POST['pseudo'];
    else      $pseudo="";
    if(isset($_POST['email']))      $email=$_POST['email'];
    else      $email="";
    if(isset($_POST['message']))      $message=$_POST['message'];
    else      $message="";
    if(isset($_POST['reponse']))      $reponse=$_POST['reponse'];
    else      $reponse="";
     
     
    $login=addslashes($pseudo); // addslashes gere les caratères spéciaux dans le champ spécifié
    $email=addslashes($email); 
    $message=addslashes($message);
     
     
     
    /* === AJOUT D'UN MESSAGE EVENTUEL === */
     
    if(@$_POST["message"]) {
     
    $SQL="INSERT INTO forum_messages (quand,pseudo,email,message,reponse) VALUES (".time().",'".$pseudo."','".$email."','".$message."','".$reponse."')";
    $res=mysql_db_query($bdd,$SQL,$link) or die ('Insertion dans la base de données du site impossible '.$SQL.' '.mysql_error()); 
     
     
    /*	Réponse = n° auto si message initial	*/  
    if(!$_POST["reponse"]) {
          // juste apres l'insertion, on peut récuperer l'id généré 
          $id = mysql_insert_id();
          mysql_query("UPDATE forum_messages SET reponse=".$id." WHERE ID=".$id);
       }
     
    /*	Envoi de la réponse par email	*/
     
       if(!$isLocal&&($reponse!="0")) {
          // Gestionnaire ou répondeur du forum
     
    //A quoi sert cette adresse , je crée juste une boite mail ?????
          $from = "From: forum@gmail.fr";
     
           // Sujet du mail
          $sujet = "Reponse a votre message posté sur le forum";
          // Sélection des destinataires
          $SQL = "SELECT * FROM forum_messages WHERE email<>'".$email."' AND (reponse=".$reponse." OR ID=".$reponse.") ORDER BY ID DESC";
          $res = mysql_query($SQL) or die(mysql_error());
          $temp=",";
          // Pour chaque adresse
          while($val=mysql_fetch_array($res)) {
             // Déjà envoyé 
             if(!strpos(" ".$temp,",".$val["email"].",")) {
                // Corps du message
    $body = "Bonjour ".$val["login"].",\n\n"
       . "Un visiteur a repondu a votre message sur le forum :"
       . "\n".str_repeat("_",40)."\n"
       . $_POST["login"]." >> ".$_POST["message"]
       . "\n".str_repeat("_",40)."\n"
       . "\n en reponse a votre message du ".date("d/m/Y",$val["quand"])." :"
       . "\n".str_repeat("_",40)."\n"
       . $val["message"]
       . "\n".str_repeat("_",40)."\n"
       . "\nPour poursuivre la discussion, veuillez vous rendre à l'adresse\n"
       . "http://".$_SERVER["SERVER_NAME"].$_SERVER["SCRIPT_NAME"]
       . "?post=".$_POST["reponse"]
       ."\n\nA bientot\n";
     
                   // Envoi du mail
                mail($val["email"],$sujet,$body,$from);
                // mémorise l'adresse
                $temp .= $val["email"] . ",";
             }
          }
       }
     
    }
    // === AFFICHAGE DE LA PAGE ===
    ?>
     
     
    <HTML><HEAD>
       <TITLE>Mini-forum DunDal: </TITLE>
     
    </HEAD><BODY bgcolor="#FFFFFF"><center>
    <SCRIPT language="Javascript">
    <!--     
    	   function repond(num) {
             test=true
             with(document.form1) {
                // vérification du champ message
                if(message.value=="") {
                   alert("Le champ message est vide!")
                   message.focus()
                   test=false
                }
                // vérification du champ email
                var reg = /^[a-z0-9._-]+@[a-z0-9.-]{2,}[.][a-z]{2,3}$/
                if(reg.exec(email.value)==null) {
                   alert("Votre email est invalide !")
                   email.focus()
                   test=false
                }
                // vérification du champ login
                reg = /^[A-Za-z0-9_-]{3,}$/
                if(reg.exec(pseudo.value)==null) {
                   alert("Votre pseudo est invalide !")
                   pseudo.focus()
                   test=false
                }
                reponse.value=num
                if(test) submit()
             }
          }
    -->
    </SCRIPT>
     
     
     
       <!-- Formulaire de saisie -->
     
    <table>
          <form method="post" action="index2.php" name="form1">
             <tr>
                <td align=right>Pseudo</td><td>
                   <input name="pseudo" maxlength=15>
                </td><td rowspan=3>
                   <textarea name="message" cols=60 rows=5
                      ></textarea>
                </td>
             </tr><tr>
                <td align=right>Email</td><td>
                   <input name="email" maxlength=50>
                </td>
             </tr><tr>
                <td colspan=2 align=center>
                   <input type="submit" value="Nouveau sujet">
                   <input type="hidden" name="reponse"> 
                </td>
             </tr>
          </form>
    </table> 
     
     
    <!-- Affichage des messages -->
     
    <table border=1 cellspacing=0 cellpadding=5 width=100%>
     
    <?php
    // Requête de sélection des messages
    $SQL = "SELECT * FROM forum_messages ORDER BY reponse DESC,ID";
    $res = mysql_query($SQL) or die(mysql_error());
    $i=0;
    // Tant qu'il y a des messages
    while($val=mysql_fetch_array($res)) { $i++;
       // Nouveau sujet 
       if(($val["reponse"]==$val["ID"])) {
          if($i>1) echo "</td></tr>";
          echo "<tr><td>";
          // Bouton "Répondre"
          echo "<button onclick='repond(".$val["ID"].")'>"
             . "Répondre</button> ";
       } else {
          echo "<hr size=1>";
       }
       echo "<br>";
       // Ecrit la date du message
       echo date("d/m/Y H:i:s",$val["quand"]);
       // Ecrit le login de l'auteur
       echo " - ".$val["pseudo"];
       echo "<br>";
       // Ecrit le message, n'autorise pas les code html ;)
       echo htmlentities($val["message"]);
    }
    ?>
     
     
    </table>
     
    </center></BODY></HTML>
     
     
    <?php
    // === DECONNEXION ===
    mysql_close();
     
    ?>
    Je ne sais pas si j'étais assez claire dans mes explications
    Si je ne l'ai pas été assez merci de me poser vos questions^^
    Je vous remercie d'avance pour votre aide.

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    août 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : août 2007
    Messages : 109
    Points : 129
    Points
    129
    Par défaut
    bonjour,

    Quel est la structure de la table forum_message ?

    le type du champ réponse est une chaine (Varchar) ou un numérique ?

  3. #3
    Membre à l'essai
    Inscrit en
    juin 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : juin 2009
    Messages : 23
    Points : 19
    Points
    19
    Par défaut
    Bonjour Romulus,

    En fait le champ réponse est de type numérique,du meme type que l'identifiant des messages (mais sans l'autoincrémentation bien sûr), sa valeur par défaut est '0'.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    août 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : août 2007
    Messages : 109
    Points : 129
    Points
    129
    Par défaut
    alors enlève les simples quotes qui entourent les valeurs numérique et met une valeur de type numérique 0 ou autre.
    si tu as définit une valeur par défaut, ne l'ajoute pas dans ta requete

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    INSERT INTO forum_messages (quand,pseudo,email,message) VALUES (1246436840,'dgg','sgsg','sgsgg')
    dans ce cas il prend la valeur par défaut

  5. #5
    Membre à l'essai
    Inscrit en
    juin 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : juin 2009
    Messages : 23
    Points : 19
    Points
    19
    Par défaut
    Merci Romulus

    En fait, ce que j'essaie de faire c'est que les messages s'affichent les uns à la suite des autres... Et afin de gérer les éventuelles réponses à ces messages,

    * j'ai ajouté des boutons "Répondre" au formulaire ;
    * j'ai essayé de stocker dans la base de données l'identifiant du message auquel on répond ;
    * Réorganiser les requêtes et l'affichage pour afficher les réponses éventuelles sous chaque message.

    le problème maintenant c'est que si j'enlève le champ réponse de ma requete qu'on arrive plus a faire le lien entre les identifiants des messages, et les réponses correspondantes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $SQL="INSERT INTO forum_messages (quand,pseudo,email,message) VALUES (".time().",'".$pseudo."','".$email."','".$message."')";

  6. #6
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    décembre 2004
    Messages
    304
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : décembre 2004
    Messages : 304
    Points : 405
    Points
    405
    Par défaut
    c'est toute ta base qui est fausse alors
    J'aurais plutot fait la base comme ceci
    Table :
    forum_messages (Id,quand,pseudo,email,message,IdMsgParent)

    IdMsgParent : représente le message "parent" (auquel on répond), si c'est un 1er message, tu mettera IdMsgParent à 0, si non, il prendra l'Id du message parent.

    La requête d'affichage des messages serait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $sql="SELECT * FROM forum_messages where IdMsgParent = 0";
    La requête d'affichage des réponses serait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $Id=$_GET["id"];
    $sql="SELECT * FROM forum_messages where IdMsgParent = $Id";
    S'il n'y a pas de Solution, c'est qu'il n'y a pas de Problème.
    ----------------------------------------------------------------------------------------
    Pour se protéger, un bon préservatif pour votre PC : AntiVir et SpyBot - Search & Destroy

  7. #7
    Membre régulier
    Inscrit en
    juin 2009
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : juin 2009
    Messages : 104
    Points : 120
    Points
    120
    Par défaut
    j'aurais même bien fait cela comme ceci :

    J'aurais plutot fait la base comme ceci
    Table :
    forum_messages (Id,quand,pseudo,email,message,IdMsgParent, PremierNiveau)

    Id : un champ Integer (11 ?)
    quand : un champ datetime
    pseudo : un varchar (55 ?)
    email ...
    message ...
    IdMsgParent : un champ Integer (le même que Id)
    PremierNiveau : un champ Enum '0','1'

    sachant qu'un "PremierNiveau = 1" aurait comme "IdMsgParent" son propre ID
    (suis certain qu'il y a moyen de travailler mieux cela en Sql)
    sachant qu'un "PremierNiveau = 0" aurait comme "IdMsgParent" l'id du message auquel on répond

    avec
    pour afficher seulement les premiers Niveaux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql="SELECT * FROM forum_messages WHERE PremierNiveau = 1";
    avec
    pour afficher toute la sauce :
    $sql="SELECT * FROM forum_messages WHERE 1 SORT BY IdMsgParent (ou une autre clé de tri), PremierNiveau DESC, quand DESC";

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Blog] Plusieurs MiniBlogs sur mon site
    Par Davboc dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 12/07/2006, 19h50
  2. nombreux problèmes sur mon menu de gauche
    Par pp51 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 12/12/2005, 22h00
  3. [Mail] Problème avec mon script d'envoi de mail
    Par leroivert dans le forum Langage
    Réponses: 18
    Dernier message: 02/12/2005, 01h26
  4. problème sur mon ordi
    Par loveflower dans le forum Sécurité
    Réponses: 6
    Dernier message: 29/11/2005, 17h18
  5. [MySQL] Problème dans mon script de pagination
    Par speedylol dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 03/11/2005, 20h37

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