Une requete mysql qui ne fonctionne pas...

Eléphanteau du PHP | 27 Messages

25 août 2005, 18:50

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
Allez sur JournaWeb.info ! ! ! ;)

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

25 août 2005, 20:50

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");

Eléphanteau du PHP | 27 Messages

25 août 2005, 21:57

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.
Allez sur JournaWeb.info ! ! ! ;)

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

25 août 2005, 22:03

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

Mammouth du PHP | 19672 Messages

25 août 2005, 22:07

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();
?>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 199 Messages

25 août 2005, 22:58

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");
Les 2 font la paire : coder ET commenter :wink:

Eléphant du PHP | 199 Messages

25 août 2005, 22:58

Il y a aussi le $ pour de $reponse qui manque :wink:
Les 2 font la paire : coder ET commenter :wink:

Eléphanteau du PHP | 27 Messages

26 août 2005, 12:26

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: ?
Allez sur JournaWeb.info ! ! ! ;)

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

26 août 2005, 12:34

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());

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

26 août 2005, 12:41

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
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Eléphanteau du PHP | 27 Messages

26 août 2005, 13:47

Merci, j'ai debugé les erreur mais je n'arrive pas a afficher la boucle...
Allez sur JournaWeb.info ! ! ! ;)

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

26 août 2005, 13:49

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...

Eléphant du PHP | 199 Messages

26 août 2005, 14:02

Code : Tout sélectionner

$reponse = mysql_query("SELECT * FROM forum WHERE resujet='". $sujet ."' ORDER BY ID");
Encore un problème de quotes :wink:
Les 2 font la paire : coder ET commenter :wink:

Eléphanteau du PHP | 27 Messages

27 août 2005, 16:59

Merci beaucoup à tous ce qui m'on aidé, mon petit forum fonctionne maintenant très bien ! ! ! :D
Allez sur JournaWeb.info ! ! ! ;)