Erreur de requete et formulaire

Erreur de requete et formulaire - PHP - Programmation

Marsh Posté le 18-01-2006 à 17:10:03    

Salut !
 
Voici un morceau de mon code :

Code :
  1. $reponse = mysql_query("SELECT * FROM bulletin ORDER BY id" ); // Requête SQL   
  2.    
  3.    while ($donnees = mysql_fetch_array($reponse) )  {
  4. ..... [code]
  5. Jusqu'à là, pas de problème.
  6. Je veux alors ajouté un formulaire de facon à les classer :
  7. [code] <form action="bulletin.php" method="post">
  8. <select name="choix">
  9. <option value="id" >Choix 1</option>
  10.     <option value="id ASC"  selected="selected">Choix 1</option>
  11.     <option value="id DESC" >Choix 2</option>
  12.     <option value="titre" >Choix 2</option>
  13.    </select>
  14.    <input type="submit" value="Valider" />
  15. </form> 
  16.    <?
  17.    $classement = $_POST['choix'];
  18.    $reponse = mysql_query("SELECT * FROM bulletin ORDER BY $classement" ); // Requête SQL   
  19.    
  20.    while ($donnees = mysql_fetch_array($reponse) ) {
  21. ...


 
C'est à partir de là que je rencontre le probleme.
J'ai alors une erreur :

Citation :

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in d:\monchemin\bulletin.php on line 100


 
La ligne 100 étant : while ($donnees = mysql_fetch_array($reponse) )
 
Si je rajoute ("erreur req ".mysql_error()), j'ai alors :

Citation :


erreur req You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1


 
A ce moment là, si je valide un champ du formulaire, tout marche normalement.
 
D'où vient ce probleme s'il vous plait ?

Reply

Marsh Posté le 18-01-2006 à 17:10:03   

Reply

Marsh Posté le 18-01-2006 à 17:16:59    

Il y a eu une erreur dans ta requette et tu ne vérifies pas si la requette c'est bien passé. Voilà d'où vient l'alerte (le "warning" ).
mysql_query retourne "false" en cas de probléme. A toi de vérifier si le résultat est égal à "false" pour savoir si ca n'a pas bien marcher.

Reply

Marsh Posté le 18-01-2006 à 17:27:21    

Fais un echo de ta requête SQL pour la lire déjà, tu verras peut être l'erreur directement.


---------------
Gamertag: CoteBlack YeLL
Reply

Marsh Posté le 18-01-2006 à 19:03:23    

Code :
  1. <form action="film1.php" method="post">
  2. <select name="choix">
  3. <option value="id" selected="selected">Choix 1</option>
  4.     <option value="id ASC" >Choix 2</option>
  5.     <option value="id DESC" >Choix 3</option>
  6.    </select>
  7.    <input type="submit" value="Valider" />
  8. </form>   
  9. <?php
  10. $classement = $_POST['choix'];
  11. mysql_connect("*****", "*****", "*****" ); // Connexion à MySQL
  12. mysql_select_db("download" ); // Sélection de la base
  13. $reponse = mysql_query("SELECT * FROM bulletin ORDER BY $classement" ); // Requête SQL
  14. echo $donnees['titre'];
  15. echo '</br>';
  16. mysql_close(); // Déconnexion de MySQL
  17. ?>


 
Voilà, rien de plus simple que çà mais pourtant toujours un probleme.
Lors du chargement de la page, rien est affiché.
Le formulaire fonctionne correctement ou il suffit que je recharge la page.
 
Si je remplace $classement par id alors ma requête est bien affichée.
 
 
L'erreur vient donc de la variable !
 
Note : j'ai aussi rajouté selected="selected" qui selectionnerait alors la valuer par defaut...rien ne change !


Message édité par mikedimoi le 18-01-2006 à 19:05:18
Reply

Marsh Posté le 18-01-2006 à 19:06:39    

Je t'ai demandé de faire un echo de requête SQL, pourquoi tu ne le fais pas ?
 
Et puis quand on fait une requête SQL on fait un "or die(mysql_error())" au minimum ... histoire d'avoir quelques infos ;)


---------------
Gamertag: CoteBlack YeLL
Reply

Marsh Posté le 18-01-2006 à 19:12:29    

d'ou vient ta variable $donnees['titre'] ????
il manque la creation du tableau avant

Reply

Marsh Posté le 18-01-2006 à 19:18:16    

Zut ! C'est en recopia,nt que j'ai oublié while ($donnees = mysql_fetch_array($reponse) ){

Reply

Marsh Posté le 18-01-2006 à 19:29:13    

BOn tu vas nous la mettre cette put*in de ligne de requête qu'on puisse voir où ça coince ??


---------------
Gamertag: CoteBlack YeLL
Reply

Marsh Posté le 18-01-2006 à 20:05:23    

Dj YeLL a écrit :

BOn tu vas nous la mettre cette put*in de ligne de requête qu'on puisse voir où ça coince ??


 
 
Tout est là !
 

Code :
  1. <form action="bulletin3.php" method="post">
  2. <select name="choix">
  3. <option value="id" selected="selected">Choix 1</option>
  4.     <option value="id ASC" >Choix 2</option>
  5.     <option value="id DESC" >Choix 3</option>
  6.    </select>
  7.    <input type="submit" value="Valider" />
  8. </form> 
  9.    <?
  10.    $classement = $_POST['choix'];
  11.    $sql = mysql_connect('*****', '*****', '****'); 
  12.          mysql_select_db('download', $sql);
  13.    $reponse = mysql_query("SELECT * FROM bulletin ORDER BY $classement" )or die ("erreur req ".mysql_error());
  14. // Requête SQL   
  15.    
  16.    while ($donnees = mysql_fetch_array($reponse) ) {
  17.    echo $donnees['titre'] .'</br>';
  18.      }
  19.    mysql_close(); // Déconnexion de MySQL   
  20.    ?>


Message édité par mikedimoi le 18-01-2006 à 20:05:41
Reply

Marsh Posté le 18-01-2006 à 20:11:18    

je tente le coup !!
 
au chargement initial la variable $_POST['choix'] est nulle, mais pas une fois qu'on a cliqué sur le bouton
 
maintenant débrouille toi la solution est là :)


Message édité par Sh@rdar le 18-01-2006 à 20:11:35

---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 18-01-2006 à 20:11:18   

Reply

Marsh Posté le 18-01-2006 à 20:12:03    

Bon j'abandonne ... ma question me semblait pourtant simple ... tant pis [:spamafote]


---------------
Gamertag: CoteBlack YeLL
Reply

Marsh Posté le 18-01-2006 à 20:13:35    

Dj YeLL a écrit :

Bon j'abandonne ... ma question me semblait pourtant simple ... tant pis [:spamafote]


 
 
le problème aussi, du coup la ligne est inutile :D
 
il a un requête dans ce style : SELECT * FROM matable ORDER BY
 
forcément il manque qq chose :)


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 18-01-2006 à 20:16:18    

Sh@rdar a écrit :

le problème aussi, du coup la ligne est inutile :D
 
il a un requête dans ce style : SELECT * FROM matable ORDER BY
 
forcément il manque qq chose :)


 
Ah parce que le form et le php sont sur la même page ? :ouch:  
 
Oui ben en effet d'accord ... je n'avais pas vu ça sous cet angle...


---------------
Gamertag: CoteBlack YeLL
Reply

Marsh Posté le 18-01-2006 à 20:17:26    

le détail qui tue
 

Citation :


A ce moment là, si je valide un champ du formulaire, tout marche normalement.  


 
:lol:


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 18-01-2006 à 20:21:53    

Sh@rdar a écrit :

le détail qui tue
 

Citation :


A ce moment là, si je valide un champ du formulaire, tout marche normalement.  


 
:lol:


 
Ah beh oui ... là c'est vrai que ... enfin voilà quoi...
 
Mais bon, quelle drôle d'idée de lancer une requête SQL à l'affichage d'une page ... sans tester si on demande bien la page par POST par exemple  [:spamafote]


---------------
Gamertag: CoteBlack YeLL
Reply

Marsh Posté le 18-01-2006 à 20:23:09    

Vous etes nés avec le PHP en sciences infuses ou l'avez vous appris ???
 
Merci  
 
@+

Reply

Marsh Posté le 18-01-2006 à 20:27:58    

pour finir t'as vu la coquille ou pas ?


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 18-01-2006 à 20:29:48    

Bah faut pas le prendre comme ça ... c'est pas une question de Php, c'est une question de logique ...
 
Mais y'a pas mort d'homme ;)
 
Fais un truc dans le genre :
 

Code :
  1. if(!isset($_POST)) {
  2.    $classement = 'id';
  3. } else {
  4.    $classement = $_POST['choix'];
  5. }


 
;)
 
++


---------------
Gamertag: CoteBlack YeLL
Reply

Marsh Posté le 18-01-2006 à 20:43:50    

Pour résumer, j'ai changé pour :

Code :
  1. <?
  2.    $classement = $_POST['choix'];
  3.      $sql = mysql_connect('*****', '****', '*****'); 
  4.          mysql_select_db('download', $sql);
  5.   $requete = 'SELECT titre FROM bulletin ORDER BY '.$classement;
  6. $reponse = mysql_query( $requete) or die ('Erreur SQL :<br />'.$requete.'<br />'.mysql_error()). // Requête SQL   
  7.    
  8.    while ($donnees = mysql_fetch_array($reponse) );
  9.     {
  10.    echo $donnees['titre'] .'</br>';
  11.      }
  12.    mysql_close(); // Déconnexion de MySQL   
  13.    ?>


 
L'erreur retournée est :
 

Citation :

Parse error: parse error, unexpected T_WHILE in d:\mes sites web\accueil\telecharge\film\film3.php on line 29


 

Citation :

Mais bon, quelle drôle d'idée de lancer une requête SQL à l'affichage d'une page ... sans tester si on demande bien la page par POST par exemple  


 
Ce n'est qu'un morceau de ma page.
En fait, je liste un repertoire, j'ajoute les fichier à la BDD....d'où la requête à l'affichage de la page.
 
Quel était le probleme à mettre le formulaire dans la même page ?
 

Reply

Marsh Posté le 18-01-2006 à 20:45:21    

le problème c'est que ta variable $_POST['choix'] (et donc $classement aussi puisque c'est une copie) ne vaut rien tant que tu n'as pas posté ton formulaire
 
donc la requête est incorrete, tout simplement


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 18-01-2006 à 20:50:48    

while ($donnees = mysql_fetch_array($reponse) );
!!!!!!!!!!!!!!!!!!!!!!!!!!!!
pas de point virgule a la fin

Reply

Marsh Posté le 18-01-2006 à 20:52:25    

si ton form est ds la meme page de ton code php met cette ligne :
<form action="" method="post">

Reply

Marsh Posté le 18-01-2006 à 20:58:03    

manustarfoot a écrit :

si ton form est ds la meme page de ton code php met cette ligne :
<form action="" method="post">


 
Je l'avais déjà mis çà.
 
Tout ce qu'il me manquait, c'était de donner une valeur à ma variable.
J'étais en train de chercher du côté de

Citation :

empty

, qui me semble etre la même chose (rattrapez moi si je me trompe).
 
Je comprends maintenant l'astuce que je ne connaissais pas.
 
Dernière question à laquelle vous ne m'avez pas repondu :
-Quel est le problème à mettre le formulaire dans la même page ?
 
Je vous remercide donc à tous de votre aide.
 
 

Reply

Marsh Posté le 18-01-2006 à 20:59:39    

à ton niveau aucun, quand tu trouvera ça plus pratique autrement, c'est qu'il sera temps pour toi de passer à l'étape suivante :)


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 18-01-2006 à 21:07:11    

Merci pour ta reponse !!! :lol:  
 
J'ai bien mis :

Code :
  1. if(!isset($_POST)) {
  2.      $classement = 'id';
  3. } else {
  4.    $classement = $_POST['choix'];
  5.    }


 
et j'ai cependant la même erreur :

Citation :


Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in d:\mes sites web\accueil\telecharge\film\film1.php on line 94


 
 :ange:

Reply

Marsh Posté le 18-01-2006 à 21:12:18    

Bon allez zou, avec ça ça devrait marcher :
 

Code :
  1. <form action="bulletin3.php" method="post">
  2.    <select name="choix">
  3.        <option value="id" selected="selected">Choix 1</option>
  4.        <option value="id ASC" >Choix 2</option>
  5.        <option value="id DESC" >Choix 3</option>
  6.    </select>
  7.    <input type="submit" value="Valider" />
  8. </form>
  9.  
  10.  
  11. <?
  12. if($_SERVER['REQUEST_METHOD'] != "POST" ) {
  13.    $classement = 'id';
  14. } else {
  15.    $classement = $_POST['choix'];
  16. }
  17.  
  18. $sql = mysql_connect('*****', '*****', '****');
  19. mysql_select_db('download', $sql);
  20. $reponse = mysql_query('SELECT * FROM `bulletin` ORDER BY ' . $classement) or die ("erreur req ".mysql_error());
  21. // Requête SQL  
  22. while ($donnees = mysql_fetch_array($reponse)) {
  23.    echo $donnees['titre'] .'</br>';
  24. }
  25. mysql_close(); // Déconnexion de MySQL  
  26. ?>


---------------
Gamertag: CoteBlack YeLL
Reply

Marsh Posté le 18-01-2006 à 21:17:14    

Merci beaucoup DjYell !
 
A vrai dire, je n'aurai pas trouver tout seul...d'où le but de mon post !
 
Cependant, pour ne pas avoir le même problème la prochaine fois, je vais me documenter sur

Code :
  1. if($_SERVER['REQUEST_METHOD'] != "POST" ) {


 
C'est en forgeant qu'on devient forgeron !  
 
Merci à toi et à ceux qui ont bien voulu m'aider

Reply

Marsh Posté le 18-01-2006 à 21:20:57    

De rien,
 
fais un
 

Code :
  1. print_r($_SERVER);


 
C'est une variable qui regorge de choses utiles ;)


---------------
Gamertag: CoteBlack YeLL
Reply

Marsh Posté le 18-01-2006 à 21:26:18    

explication pour $_POST
 
c'est un tableau contenant les variables transmises en méthode POST, hors, ce tableau est toujours défini (mais pas toujours rempli)
 
il aurait fallu faire if (!isset($_POST['choix'])) à la place ;)
 


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 18-01-2006 à 21:34:42    

Dj YeLL a écrit :

De rien,
 
fais un
 

Code :
  1. print_r($_SERVER);


 
C'est une variable qui regorge de choses utiles ;)


 
C'est un log de Hijackthis çà !!! :lol:  
 
Merci beaucoup !
 
Edit : Bien plus instructif en le faisant comme çà que par la moquerie !  :hello:


Message édité par mikedimoi le 18-01-2006 à 21:35:29
Reply

Marsh Posté le 18-01-2006 à 22:29:54    

Sh@rdar a écrit :

explication pour $_POST
 
c'est un tableau contenant les variables transmises en méthode POST, hors, ce tableau est toujours défini (mais pas toujours rempli)
 
il aurait fallu faire if (!isset($_POST['choix'])) à la place ;)


 
Tout à fait, j'y ai pensé juste après mon 1er message, puis il m'a semblé que la méthode "REQUEST_METHOD" était plus adaptée :)


---------------
Gamertag: CoteBlack YeLL
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed