Page 1 sur 1

Une requete mysql qui ne fonctionne pas...

Posté : 25 août 2005, 18:50
par Tonio 76
Bonjour, j'ai un prolème sur un requête mysql qui ne fonctionne pas :!: :
reponse=mysql_query("SELECT * FROM forum WHERE sujet != rien ORDER BY ID");
Si quelqu'un pouvais m'aider, ce serais gentil.
Merci d'avance

Posté : 25 août 2005, 20:50
par ouckileou
tu n'as pas de message d'erreur retourné ?

oui : il faut prendre l'habitude de le donner
non : utilise ceci pour les afficher
mysql_query() or die(mysql_error());
mais ici, le problème doit venir de : rien
écrit comme ça , tu indiques une colonnes qui s'appelle "rien"

pour signifier une chaine de caractère tu dois mettre des quotes autour :
reponse=mysql_query("SELECT * FROM forum WHERE sujet != 'rien' ORDER BY ID");

Posté : 25 août 2005, 21:57
par Tonio 76
Mon erreur est la suivante :
Parse error: parse error in /data/members/free/multimania/fr/p/r/o/progphp/htdocs/forum/forum.php on line 21
Le code complet de la page est le suivant :
<?
mysql_connect("localhost", "progphp", "");
mysql_select_db("progphp_db");
if(isset($_POST['sujet']))
{
$pseudo = htmlentities($_POST['pseudo'], ENT_QUOTES);
$sujet = htmlentities($_POST['sujet'], ENT_QUOTES);
$post = htmlentities($_POST['post'], ENT_QUOTES);
$post = nl2br($post);
mysql_query("INSERT INTO forum VALUES('', '" . $sujet . "', '" . $sujet . "', '" . $pseudo . "', '" . $post . "', '" . time() . "')");
?><br><br><br><center>
<a href="index.php?pageaf=forum">Retourner à la page des sujets</a>
<br><a href="index.php?pageaf=voireforum&sujet=<?echo $sujet;?>>Aller à la page de mon sujet</a>
<?
}
if(isset($_POST['sujet'])==false)
{
?>
<br><h2><center>Les sujets</center></h2><br>
<?
reponse = mysql_query("SELECT * FROM forum WHERE sujet != 'rien' ORDER BY ID"); 
while(donnees = mysql_fetch_array($reponse))
{
$retour2 = mysql_query("SELECT COUNT(*) AS nbre_entrees FROM forum WHERE resujet=$donnees['sujet']"); 
$donnees2 = mysql_fetch_array($retour2);
$donnees2['nbre_entrees'] = $donnees2['nbre_entrees']-1;
?>
<table width="600" border="1" cellspacing="0" align="center" bordercolor="#000000">
  <tr bgcolor="#0099FF"> 
    <td width="200"> <b>De :</b> <? echo $donnees['pseudo']; ?></td>
    <td width="200"> <b>Le <? echo date('d/m/Y \à H\hi', $donnees['timestamp']); ?></b></td>
    <td width="200"> <b>Nombre de r&eacute;ponses :</b> <? echo $donnees2['nbre_entrees'];</td>
  </tr>
  <tr bgcolor="#0099FF"> 
    <td colspan="3" bgcolor="#00CCCC"><a href="index.php?pageaf=voireforum&sujet=<? echo $donnees['sujet']; ?>"><? echo $donnees['sujet']; ?></a></td>
  </tr>
</table>
<br>
<?
}
?>
<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">
        <div align="center">
          <p><b>Votre pseudo (max. 15 car.) :</b></p>
          <p>
            <input type="text" name="pseudo" maxlength="15">
          </p>
        </div>
      </td>
    </tr>
    <tr bgcolor="#00CCCC"> 
      <td colspan="3">
        <div align="center">
          <p><b>Votre sujet (max. 40 car.) :</b></p>
          <p>
            <input type="text" name="sujet" maxlength="15" size="40">
          </p>
        </div>
      </td>
    </tr>
    <tr bgcolor="#0099FF"> 
      <td colspan="3">
        <div align="center">
          <p><b>Votre Post :</b></p>
          <p>
            <textarea name="post" cols="40"></textarea>
          </p>
		   <p>
            <input type="submit" name="submit" value="Envoyer">
          </p>
        </div>
      </td>
    </tr>
  </table>
  <br>
</form>

<?
mysql_close();
?>
Le mot rien a une signification, il est dans le champs sujet de toutes le reponses pour ne pas afficher toutes les reponses dans la liste des sujets.

Posté : 25 août 2005, 22:03
par ouckileou
donc ça c'est une erreur PHP... une erreur de syntaxe
et la ligne 21 je la trouve tout seul ? ce serait plus pratique si tu l'indiquais


concernant "rien", c'est donc le contenu d'une colonne, tu dois l'entourer des simples quotes
sinon, le mot rien seul représente un nom de colonne, et non pas une chaine de caractères

[édition]oups désolé, tu l'avais déjà fait ;)

à un moment tu as
<?echo
j'essaierai de décoller le echo de la balise on ne sait jamais

et utilise plutôt les balises <?php que <?, tu pourrais avoir des problèmes sur certains serveurs

Posté : 25 août 2005, 22:07
par Cyrano
Guillemets non fermés, "$" manquant au début du nom de deux variables, accollades non fermées, c'est plein de petites erreurs d'étourderie.

Astuce : quand tu écris du code, lors de l'ouverture d'un élément, mets tout de suite la fermeture avant d'y mettre le moindre contenu, tu seras sûr de ne jamais en oublier un. Tu ouvres une accollade { ? Alors mets tout de suite l'accollade fermante } pour être certain de ne pas l'oublier et après seulement tu inscris les instructions qui vont dedans, pareil pour les guillemets, les aopostrophes etc... : Proposition de correction:
<?php
mysql_connect("localhost", "progphp", "");
mysql_select_db("progphp_db");
if(isset($_POST['sujet']))
{
    $pseudo = htmlentities($_POST['pseudo'], ENT_QUOTES);
    $sujet = htmlentities($_POST['sujet'], ENT_QUOTES);
    $post = htmlentities($_POST['post'], ENT_QUOTES);
    $post = nl2br($post);
    mysql_query("INSERT INTO forum VALUES('', '" . $sujet . "', '" . $sujet . "', '" . $pseudo . "', '" . $post . "', '" . time() . "')");
?>
<br><br><br><center>
<a href="index.php?pageaf=forum">Retourner à la page des sujets</a>
<br><a href="index.php?pageaf=voireforum&sujet=<?php echo($sujet); ?>">Aller à la page de mon sujet</a>
<?php
}
if(isset($_POST['sujet'])==false)
{
    ?>
<br><h2><center>Les sujets</center></h2><br>
<?php
    $reponse = mysql_query("SELECT * FROM forum WHERE sujet != 'rien' ORDER BY ID");
    while($donnees = mysql_fetch_array($reponse))
    {
        $retour2 = mysql_query("SELECT COUNT(*) AS nbre_entrees FROM forum WHERE resujet=". $donnees['sujet']);
        $donnees2 = mysql_fetch_array($retour2);
        $donnees2['nbre_entrees'] = $donnees2['nbre_entrees']-1;
?>
<table width="600" border="1" cellspacing="0" align="center" bordercolor="#000000">
  <tr bgcolor="#0099FF">
    <td width="200"> <b>De :</b> <?php echo $donnees['pseudo']; ?></td>
    <td width="200"> <b>Le <?php echo date('d/m/Y \à H\hi', $donnees['timestamp']); ?></b></td>
    <td width="200"> <b>Nombre de réponses :</b> <?php echo $donnees2['nbre_entrees']; ?></td>
  </tr>
  <tr bgcolor="#0099FF">
    <td colspan="3" bgcolor="#00CCCC"><a href="index.php?pageaf=voireforum&sujet=<?php echo $donnees['sujet']; ?>"><?php echo $donnees['sujet']; ?></a></td>
  </tr>
</table>
<br>
<?php
    }
?>
<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">
        <div align="center">
        <p><b>Votre pseudo (max. 15 car.) :</b></p>
        <p>
        <input type="text" name="pseudo" maxlength="15">
        </p>
        </div>
      </td>
    </tr>
    <tr bgcolor="#00CCCC">
      <td colspan="3">
        <div align="center">
        <p><b>Votre sujet (max. 40 car.) :</b></p>
        <p>
        <input type="text" name="sujet" maxlength="15" size="40">
        </p>
        </div>
      </td>
    </tr>
    <tr bgcolor="#0099FF">
      <td colspan="3">
        <div align="center">
        <p><b>Votre Post :</b></p>
        <p>
        <textarea name="post" cols="40"></textarea>
        </p>
        <p>
        <input type="submit" name="submit" value="Envoyer">
        </p>
        </div>
      </td>
    </tr>
  </table>
  <br>
</form>
<?php
}
mysql_close();
?>

Posté : 25 août 2005, 22:58
par smarties

Code : Tout sélectionner

reponse=mysql_query("SELECT * FROM forum WHERE sujet != rien ORDER BY ID");
rien doit être entre quotes car c'est une valeur et nom un champ de la table donc si tu mets ceci, ca devrai marcher :

Code : Tout sélectionner

reponse=mysql_query("SELECT * FROM forum WHERE sujet != 'rien' ORDER BY ID");

Posté : 25 août 2005, 22:58
par smarties
Il y a aussi le $ pour de $reponse qui manque :wink:

Page deux

Posté : 26 août 2005, 12:26
par Tonio 76
Merci à tous, la page fonctionne bien mais maintenant, je m'apperçois que j'ai une erreur sur la page deux (voireforum.php)
Elle concerne la ligne 28 mais je n'ai pas plus d'info...
<?
mysql_connect("localhost", "progphp", "");
mysql_select_db("progphp_db");
if(isset($_POST['sujet']))
{
$pseudo = htmlentities($_POST['pseudo'], ENT_QUOTES);
$sujet = htmlentities($_POST['sujet'], ENT_QUOTES);
$post = htmlentities($_POST['post'], ENT_QUOTES);
$post = nl2br($post);
mysql_query("INSERT INTO forum VALUES('', 'rien', '" . $sujet . "', '" . $pseudo . "', '" . $post . "', '" . time() . "')");
?><br><br><br><center>
<a href="index.php?pageaf=forum">Retourner à la page des sujets</a>
<br><a href="index.php?pageaf=voireforum&sujet=<?echo $sujet;?>>Retourner à la page du sujet en cour</a>
<?
}
if(isset($_POST['sujet']) == false)
{
$sujet=$_GET['sujet'];
?>
<br>
<table width="600" border="1" cellspacing="0" align="center" bordercolor="#000000">
  <tr bgcolor="#0099FF"> 
    <td><? echo $sujet ; ?></td>
  </tr>
</table>
<br>
<?
reponse = mysql_query('SELECT * FROM forum WHERE resujet=' . $sujet . ' ORDER BY ID'); //ligne 28
while(donnees = mysql_fetch_array($reponse))
{
?>
<table width="600" border="1" cellspacing="0" align="center" bordercolor="#000000">
  <tr bgcolor="#0099FF"> 
    <td width="300"> <b>De :</b> <? echo $donnees['pseudo']; ?></td>
    <td width="300" colspan="2"> <b>Le </b> <? echo date('d/m/Y \à H\hi', $donnees['timestamp']); ?></td>
  </tr>
  <tr bgcolor="#0099FF"> 
    <td colspan="3" bgcolor="#00CCCC"><? echo $donnees['post']; ?></td>
  </tr>
</table>
<br>
<?
}
?>
<form method="post" action="index.php?pageaf=voireforum" name="formulaire_repondre_sujet">
  <table width="600" border="1" align="center" cellspacing="0" bordercolor="#000000">
    <tr bgcolor="#00CCCC"> 
      <td colspan="3"> 
        <div align="center"> 
          <p><b>Votre pseudo (max. 15 car.) :</b> </p>
          <p> 
            <input type="text" name="pseudo" maxlength="15">
          </p>
        </div>
      </td>
    </tr>
    <tr bgcolor="#0099FF"> 
      <td colspan="3"> 
        <div align="center"> 
          <p><b>Votre Post :</b></p>
          <p> 
            <textarea name="post" cols="40"></textarea>
          </p>
          <p> 
            <input type="submit" name="submit" value="Envoyer">
          </p>
        </div>
      </td>
    </tr>
  </table>
</form>
<?
mysql_close();
?>
Pouriez vous m'aider s'il vous plait :roll: ?

Posté : 26 août 2005, 12:34
par ouckileou
pas plus d'infos ?

si c'est une erreur PHP, il y a un message
si c'est une erreur SQL, tu obtiens aussi un message comme ça :
reponse = mysql_query('SELECT * FROM forum WHERE resujet=' . $sujet . ' ORDER BY ID') or die(mysql_error());
mais il manque encore des quotes autour de $sujet
des quotes dans le SQL, pas celle qui servent à délimiter la chaine
reponse = mysql_query("SELECT * FROM forum WHERE resujet='" . $sujet . "' ORDER BY ID") or die(mysql_error());

Posté : 26 août 2005, 12:41
par mere-teresa
Il manque surtout le dollar au nom de la variable, mec !

$reponse = mysql_query('SELECT * FROM forum WHERE resujet=' . $sujet . ' ORDER BY ID'); //ligne 28

Affichage bloucle

Posté : 26 août 2005, 13:47
par Tonio 76
Merci, j'ai debugé les erreur mais je n'arrive pas a afficher la boucle...

Posté : 26 août 2005, 13:49
par ouckileou
Affiche le code SQL de la requête qui est générée, et exécute le directement dans phpMyAdmin, tu verras déjà si tu récupères des résultats...

Posté : 26 août 2005, 14:02
par smarties

Code : Tout sélectionner

$reponse = mysql_query("SELECT * FROM forum WHERE resujet='". $sujet ."' ORDER BY ID");
Encore un problème de quotes :wink:

Posté : 27 août 2005, 16:59
par Tonio 76
Merci beaucoup à tous ce qui m'on aidé, mon petit forum fonctionne maintenant très bien ! ! ! :D