Erreurs sur un script de forum

Tonio 76
Invité n'ayant pas de compte PHPfrance

23 août 2005, 17:04

Bonjour,
Je suis débutant en php et je suis en train de créer un petit script de forum très simple sur une seule page :D .
La base de donnée contient les champs suivants :
|ID|sujet|resujet|pseudo|timestamp|
Voici le code de la page :
<?
mysql_connect("localhost", "monsite" ,"");//Connection à MySQL
mysql_select_db("progphp_db");//Selection de la base
$retour=mysql_query('SELECT * FROM forum');//$retour contient les information en vrac de la table forum
if(isset($_POST['sujet']) AND $_POST['action'] == nouveau)//Si $_POST['sujet'] existe...
{

$_POST['sujet'] = htmlentities($_POST['sujet'], ENT_QUOTES);//On sécurise les variables
$_POST['sujet'] = nl2br($_POST['sujet']);
$_POST['pseudo'] = htmlentities($_POST['pseudo'], ENT_QUOTES);
$_POST['pseudo'] = nl2br($_POST['pseudo']);
$_POST['post'] = htmlentities($_POST['post'], ENT_QUOTES);
$_POST['post'] = nl2br($_POST['sujet']);
mysql_query("INSERT INTO forum VALUES ('', '". $_POST['sujet'] ."', '". $_POST['sujet'] ."', '". $_POST['pseudo'] ."', '". $_POST['post'] ."', '". time() ."')");
}
if(isset($_POST['sujet']) AND $_POST['action'] == reponse)//Si $_POST['sujet'] existe...
{

$_POST['sujet'] = htmlentities($_POST['sujet'], ENT_QUOTES);//On sécurise les variables
$_POST['sujet'] = nl2br($_POST['sujet']);
$_POST['pseudo'] = htmlentities($_POST['pseudo'], ENT_QUOTES);
$_POST['pseudo'] = nl2br($_POST['pseudo']);
$_POST['post'] = htmlentities($_POST['post'], ENT_QUOTES);
$_POST['post'] = nl2br($_POST['sujet']);
mysql_query("INSERT INTO forum VALUES ('', 'rien', '". $_POST['sujet'] ."', '". $_POST['pseudo'] ."', '". $_POST['post'] ."', '". time() ."')");
}

if(isset($_GET['resujet']))//Si $_GET['resujet'] existe...
{
$retour2 = mysql_query('SELECT * FROM forum WHERE resujet=$_GET['resujet'] ORDER BY timestamp');//voici la ligne concernée par l'erreur
$donnees = mysql_fetch_array($retour2);
?>

<table width="600" border="1" cellspacing="0" bordercolor="#000000" align="center"><!--Tableau de titre-->
  <tr bgcolor="#0099FF"> 
    <td><b>Sujet : </b><? echo $donnees['sujet']; ?></td>
  </tr>
</table>
<br><center><a href=forum.php>Retourner aux sujets</a></center>
<br>
<?
while($donnees2 = mysql_fetch_array($retour2))
{
?>
<table width="600" border="1" align="center" cellspacing="0" bordercolor="#000000"><!--Tableau affichant les posts-->
  <tr> 
    <td colspan="2" bgcolor="#00CCCC"><b>Ecrit par :</b> <? echo $donnees2['pseudo']; ?></td>
    <td width="168" bgcolor="#00FFFF"><b>Le</b> <? echo date('d/m/Y \à H\hi', $donnees2['timestamp']); ?></td>
  </tr>
  <tr> 
    <td colspan="3" bgcolor="#0099FF"><? echo $donnees2['post']; ?></td>
  </tr>
</table>
<?
}
<form method="post" action="index.php?pageaf=forum" name="formulaire_nouveau_post">
  <table width="600" border="1" align="center" cellspacing="0" bordercolor="#000000">
    <tr bgcolor="#00CCCC"> 
      <td colspan="3">
        <p align="center"><b>Indiquez ici votre pseudo (limit&eacute; &agrave; 
          15 caract&egrave;re) :</b></p>
        <p align="center">
          <input type="text" name="pseudo" maxlength="15">
        </p>
      </td>
    </tr>
    <tr bgcolor="#0099FF"> 
      <td colspan="3" width="600"> 
        <div align="center">
          <p align="left"><b><font face="Arial, Helvetica, sans-serif" size="2">Ecrivez 
            ici votre post (<font color="#FFFFFF">Attention : les balises html 
            ne sont pas autoris&eacute;es mais vous pouvez passer &agrave; la 
            ligne normalement gr&acirc;ce &agrave; la touche entrer de votre clavier.</font>) 
            :</font></b></p>
          <p align="center">
            <textarea name="post" cols="110" rows="10"></textarea>
          </p>
        </div>
      </td>
    </tr>
    <tr bgcolor="#00FFFF"> 
      <td colspan="3">
        <div align="center"><b><font face="Arial, Helvetica, sans-serif" color="#FF0000">Attention 
          :</font><font face="Arial, Helvetica, sans-serif"> Tout Post ne respectant 
          pas la <a href="charteforum.htm" target="_blank"><font color="#CC3300">charte</font></a> 
          sera effac&eacute; ! ! !<input type="hidden" name="action" value="reponse"></font></b></div>
      </td>
    </tr>
  </table>
</form>
}
else
{
$retour3 = mysql_query('SELECT * FROM forum WHERE resujet=$_GET['sujet'] AND $_GET['sujet']!=rien ORDER BY timestamp');
while(donnees3 = mysql_fetch_array($retour3))
{
$retour4 = mysql_query("SELECT COUNT(*) AS nbre_entrees FROM forum WHERE resujet=$donnees3['sujet']"); 
$donnees4 = mysql_fetch_array($retour4);
&donnees4['nbre_entrees'] = &donnees4['nbre_entrees']-1
?>
<table width="600" border="1" cellspacing="0" bordercolor="#000000" align="center">
  <tr bgcolor="#0099FF"> 
    <td colspan="4"><a href="index.php?pageaf=forum&resujet=<? echo &donnees3['sujet']; ?>><? echo &donnees3['sujet']; ?></a></td>
  </tr>
  <tr> 
    <td rowspan="3" width="33%" bgcolor="#00CCCC"><b>Post&eacute; par : </b><? echo &donnees3['pseudo']; ?></td>
    <td rowspan="3" width="33%" bgcolor="#00FFFF"><b>Le </b><? echo date('d/m/Y \à H\hi', $donnees3['timestamp']); ?></td>
    <td rowspan="3" width="36%" colspan="2" bgcolor="#00CCCC"><b>Nombre de r&eacute;ponses 
      : </b><? echo &donnees4['nbre_entrees']; ?></td>
  </tr>
  <tr> </tr>
  <tr> </tr>
</table>
<?
}
?>
<form method="post" action="index.php?pageaf=forum" name="formulaire_nouveau_sujet">
  <table width="600" border="1" align="center" cellspacing="0" bordercolor="#000000">
    <tr bgcolor="#0099FF"> 
      <td colspan="3"> 
        <p align="center"><b>Entrez ici le titre votre nouveau sujet (limit&eacute; 
          &agrave; 100 caract&egrave;res) :</b></p>
        <p align="center">
          <input type="text" name="sujet" size="100" value="" maxlength="100">
        </p>
        </td>
    </tr>
    <tr bgcolor="#00CCCC">
      <td colspan="3">
        <p align="center"><b>Indiquez ici votre pseudo (limit&eacute; &agrave; 
          15 caract&egrave;re) :</b></p>
        <p align="center"> 
          <input type="text" name="pseudo" maxlength="15">
        </p>
      </td>
    </tr>
    <tr bgcolor="#0099FF"> 
      <td colspan="3" width="600"> 
        <div align="center"> 
          <p align="left"><b><font face="Arial, Helvetica, sans-serif" size="2">Ecrivez 
            ici votre post (<font color="#FFFFFF">Attention : les balises html 
            ne sont pas autoris&eacute;es mais vous pouvez passer &agrave; la 
            ligne normalement gr&acirc;ce &agrave; la touche entrer de votre clavier.</font>) 
            :</font></b></p>
          <p align="center">
            <textarea name="post" cols="110" rows="10"></textarea>
          </p>
        </div>
      </td>
    </tr>
    <tr bgcolor="#00FFFF"> 
      <td colspan="3"> 
        <div align="center"><b><font face="Arial, Helvetica, sans-serif" color="#FF0000">Attention 
          :</font><font face="Arial, Helvetica, sans-serif"> Tout Post ne respectant 
          pas la <a href="charteforum.htm"><font color="#CC3300">charte</font></a> 
          sera effac&eacute; ! ! ! 
          <input type="hidden" name="action" value="nouveau">
          </font></b></div>
      </td>
    </tr>
  </table>
</form>
<?
}
?>
Mais j'ai un souci avec ce code :( : Il ne fonctionne pas et affiche l'erreur suivante :
Parse error: parse error in /data/members/free/multimania/fr/p/r/o/progphp/htdocs/forum.php on line 30
L'erreur est peut être toute bête mais je ne la vois pas :oops: !
Pouvez vous m'aider, m'indiquer ou se trouve l'erreur ou les autres si il y en a :? ?
Merci d'avance.

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

23 août 2005, 17:09

Bonjour,

Tu postes un très long code, et j'avoue que je n'ai pas le courage de le lire, avec mes mauvais yeux.
Peux tu nous indiquer la ligne 30 ?


editer : Me sentant en forme, j'ai jeté un oeil dans ton code, et que vois-je ?
&donnees4['nbre_entrees'] = &donnees4['nbre_entrees']-1//il manque un point virgule à la fin de la ligne 
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Eléphant du PHP | 55 Messages

23 août 2005, 17:43

Tu oublies aussi de refermer } :
</table>
<?
}
<form method="post" action="index.php?pageaf=forum" name="formulaire_nouveau_post">
  <table width="600" border="1" align="center" cellspacing="0" bordercolor="#000000">
    <tr bgcolor="#00CCCC">

Mammouth du PHP | 19672 Messages

23 août 2005, 18:10

Tu as deux erreurs majeures:
- 1 - Des lignes de la requête est mal formée et la concaténation un peu fantaisiste. Ramplace par exemple par ceci:
$retour2 = mysql_query("SELECT * FROM forum WHERE resujet=". $_GET['resujet'] ." ORDER BY timestamp");//voici la ligne concernée par l'erreur
- 2 - Le formulaire en HTML est mis au milieu du PHP alors que tu devrais fermer la balise PHP avant ( ?> ) et la rouvrir ensuite ( <?php >

J'ai modifié ton message en remplaçant [code] par [php] : ça ajoute une coloration syntaxique qui devrait te permettre de mieux visualiser le second point

Enfin, ton code est plein d'erreurs d'étourderies, des & à la place de $ sur des variables. Et je n'ai peut-être pas tout vu.

Proposition de code revu et corrigé:
<?
mysql_connect("localhost", "monsite" ,"");//Connection à MySQL
mysql_select_db("progphp_db");//Selection de la base
$retour=mysql_query('SELECT * FROM forum');//$retour contient les information en vrac de la table forum
if(isset($_POST['sujet']) AND $_POST['action'] == nouveau)//Si $_POST['sujet'] existe...
{

$_POST['sujet'] = htmlentities($_POST['sujet'], ENT_QUOTES);//On sécurise les variables
$_POST['sujet'] = nl2br($_POST['sujet']);
$_POST['pseudo'] = htmlentities($_POST['pseudo'], ENT_QUOTES);
$_POST['pseudo'] = nl2br($_POST['pseudo']);
$_POST['post'] = htmlentities($_POST['post'], ENT_QUOTES);
$_POST['post'] = nl2br($_POST['sujet']);
mysql_query("INSERT INTO forum VALUES ('', '". $_POST['sujet'] ."', '". $_POST['sujet'] ."', '". $_POST['pseudo'] ."', '". $_POST['post'] ."', '". time() ."')");
}
if(isset($_POST['sujet']) AND $_POST['action'] == reponse)//Si $_POST['sujet'] existe...
{

$_POST['sujet'] = htmlentities($_POST['sujet'], ENT_QUOTES);//On sécurise les variables
$_POST['sujet'] = nl2br($_POST['sujet']);
$_POST['pseudo'] = htmlentities($_POST['pseudo'], ENT_QUOTES);
$_POST['pseudo'] = nl2br($_POST['pseudo']);
$_POST['post'] = htmlentities($_POST['post'], ENT_QUOTES);
$_POST['post'] = nl2br($_POST['sujet']);
mysql_query("INSERT INTO forum VALUES ('', 'rien', '". $_POST['sujet'] ."', '". $_POST['pseudo'] ."', '". $_POST['post'] ."', '". time() ."')");
}

if(isset($_GET['resujet']))//Si $_GET['resujet'] existe...
{
$retour2 = mysql_query("SELECT * FROM forum WHERE resujet=". $_GET['resujet'] ." ORDER BY timestamp");//voici la ligne concernée par l'erreur
$donnees = mysql_fetch_array($retour2);
?>

<table width="600" border="1" cellspacing="0" bordercolor="#000000" align="center"><!--Tableau de titre-->
  <tr bgcolor="#0099FF">
    <td><b>Sujet : </b><? echo $donnees['sujet']; ?></td>
  </tr>
</table>
<br><center><a href=forum.php>Retourner aux sujets</a></center>
<br>
<?
while($donnees2 = mysql_fetch_array($retour2))
{
?>
<table width="600" border="1" align="center" cellspacing="0" bordercolor="#000000"><!--Tableau affichant les posts-->
  <tr>
    <td colspan="2" bgcolor="#00CCCC"><b>Ecrit par :</b> <? echo $donnees2['pseudo']; ?></td>
    <td width="168" bgcolor="#00FFFF"><b>Le</b> <? echo date('d/m/Y \à H\hi', $donnees2['timestamp']); ?></td>
  </tr>
  <tr>
    <td colspan="3" bgcolor="#0099FF"><? echo $donnees2['post']; ?></td>
  </tr>
</table>
<?
}
?>
<form method="post" action="index.php?pageaf=forum" name="formulaire_nouveau_post">
  <table width="600" border="1" align="center" cellspacing="0" bordercolor="#000000">
    <tr bgcolor="#00CCCC">
      <td colspan="3">
        <p align="center"><b>Indiquez ici votre pseudo (limit&eacute; &agrave;
          15 caract&egrave;re) :</b></p>
        <p align="center">
          <input type="text" name="pseudo" maxlength="15">
        </p>
      </td>
    </tr>
    <tr bgcolor="#0099FF">
      <td colspan="3" width="600">
        <div align="center">
          <p align="left"><b><font face="Arial, Helvetica, sans-serif" size="2">Ecrivez
            ici votre post (<font color="#FFFFFF">Attention : les balises html
            ne sont pas autoris&eacute;es mais vous pouvez passer &agrave; la
            ligne normalement gr&acirc;ce &agrave; la touche entrer de votre clavier.</font>)
            :</font></b></p>
          <p align="center">
            <textarea name="post" cols="110" rows="10"></textarea>
          </p>
        </div>
      </td>
    </tr>
    <tr bgcolor="#00FFFF">
      <td colspan="3">
        <div align="center"><b><font face="Arial, Helvetica, sans-serif" color="#FF0000">Attention
          :</font><font face="Arial, Helvetica, sans-serif"> Tout Post ne respectant
          pas la <a href="charteforum.htm" target="_blank"><font color="#CC3300">charte</font></a>
          sera effac&eacute; ! ! !<input type="hidden" name="action" value="reponse"></font></b></div>
      </td>
    </tr>
  </table>
</form>
<?php
}
else
{
$retour3 = mysql_query("SELECT * FROM forum WHERE resujet=". $_GET['sujet'] ." AND ". $_GET['sujet'] ." != rien ORDER BY timestamp");
while($donnees3 = mysql_fetch_array($retour3))
{
$retour4 = mysql_query("SELECT COUNT(*) AS nbre_entrees FROM forum WHERE resujet= ". $donnees3['sujet']);
$donnees4 = mysql_fetch_array($retour4);
$donnees4['nbre_entrees'] = $donnees4['nbre_entrees']-1
?>
<table width="600" border="1" cellspacing="0" bordercolor="#000000" align="center">
  <tr bgcolor="#0099FF">
    <td colspan="4"><a href="index.php?pageaf=forum&resujet=<? echo $donnees3['sujet']; ?>"><? echo $donnees3['sujet']; ?></a></td>
  </tr>
  <tr>
    <td rowspan="3" width="33%" bgcolor="#00CCCC"><b>Post&eacute; par : </b><? echo $donnees3['pseudo']; ?></td>
    <td rowspan="3" width="33%" bgcolor="#00FFFF"><b>Le </b><? echo date('d/m/Y \à H\hi', $donnees3['timestamp']); ?></td>
    <td rowspan="3" width="36%" colspan="2" bgcolor="#00CCCC"><b>Nombre de r&eacute;ponses
      : </b><? echo $donnees4['nbre_entrees']; ?></td>
  </tr>
  <tr> </tr>
  <tr> </tr>
</table>
<?
}
?>
<form method="post" action="index.php?pageaf=forum" name="formulaire_nouveau_sujet">
  <table width="600" border="1" align="center" cellspacing="0" bordercolor="#000000">
    <tr bgcolor="#0099FF">
      <td colspan="3">
        <p align="center"><b>Entrez ici le titre votre nouveau sujet (limit&eacute;
          &agrave; 100 caract&egrave;res) :</b></p>
        <p align="center">
          <input type="text" name="sujet" size="100" value="" maxlength="100">
        </p>
        </td>
    </tr>
    <tr bgcolor="#00CCCC">
      <td colspan="3">
        <p align="center"><b>Indiquez ici votre pseudo (limit&eacute; &agrave;
          15 caract&egrave;re) :</b></p>
        <p align="center">
          <input type="text" name="pseudo" maxlength="15">
        </p>
      </td>
    </tr>
    <tr bgcolor="#0099FF">
      <td colspan="3" width="600">
        <div align="center">
          <p align="left"><b><font face="Arial, Helvetica, sans-serif" size="2">Ecrivez
            ici votre post (<font color="#FFFFFF">Attention : les balises html
            ne sont pas autoris&eacute;es mais vous pouvez passer &agrave; la
            ligne normalement gr&acirc;ce &agrave; la touche entrer de votre clavier.</font>)
            :</font></b></p>
          <p align="center">
            <textarea name="post" cols="110" rows="10"></textarea>
          </p>
        </div>
      </td>
    </tr>
    <tr bgcolor="#00FFFF">
      <td colspan="3">
        <div align="center"><b><font face="Arial, Helvetica, sans-serif" color="#FF0000">Attention
          :</font><font face="Arial, Helvetica, sans-serif"> Tout Post ne respectant
          pas la <a href="charteforum.htm"><font color="#CC3300">charte</font></a>
          sera effac&eacute; ! ! !
          <input type="hidden" name="action" value="nouveau">
          </font></b></div>
      </td>
    </tr>
  </table>
</form>
<?
}
?>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 27 Messages

23 août 2005, 22:11

Tout d'abord, merci beaucoup de vos réponses :D !!!
Mais j'ai essayé le script modifié que cyrano a eu la gentillesse de faire mais une erreur persiste : Je n'arrive pas à faire afficher ce bout de code la :
<table width="600" border="1" cellspacing="0" bordercolor="#000000" align="center"> 
  <tr bgcolor="#0099FF"> 
    <td colspan="4"><a href="index.php?pageaf=forum&resujet=<? echo $donnees3['sujet']; ?>"><? echo $donnees3['sujet']; ?></a></td> 
  </tr> 
  <tr> 
    <td rowspan="3" width="33%" bgcolor="#00CCCC"><b>Post&eacute; par : </b><? echo $donnees3['pseudo']; ?></td> 
    <td rowspan="3" width="33%" bgcolor="#00FFFF"><b>Le </b><? echo date('d/m/Y \à H\hi', $donnees3['timestamp']); ?></td> 
    <td rowspan="3" width="36%" colspan="2" bgcolor="#00CCCC"><b>Nombre de r&eacute;ponses 
      : </b><? echo $donnees4['nbre_entrees']; ?></td> 
  </tr> 
  <tr> </tr> 
  <tr> </tr> 
</table> 
Qui se situe dans une boucle à la fin après le else.
Merci de vos réponses.
Allez sur JournaWeb.info ! ! ! ;)