Parse error dans code PHP/MySQL correct

Parse error dans code PHP/MySQL correct - PHP - Programmation

Marsh Posté le 08-11-2006 à 15:49:40    

Bonjour à tous.
Je m'essaie à la programmation php/mysql.
J'ai décidé de créer un script simple ou une perosnne pourrait donner des idées de cadeaus
La page est donc constituée du formulaire et ensuite du tablerau des resultats.
Ne faites pas attention à tout ce qui va avec "valid" sauf si l'erreur vien de là.
 
En effet, j'obtiens :  
[Plus d'erreurs]
 

Code :
  1. <!DOCTYPE HTML public "-//W3C//DTD HTML 4.01 Transitional//EN">
  2. <html>
  3.   <head>
  4.     <meta http-equiv="content-type" content="text/html; charset=windows-1250">
  5.     <meta name="generator" content="PSPad editor, www.pspad.com">
  6.     <title>
  7.     </title>
  8.   </head>
  9.   <body>
  10. <?php
  11. //$user=*****;
  12. //$passwd=***** ;
  13. //$host=sql.free.fr ;
  14. //$bdd=***** ;
  15. $user='root' ;
  16. $passwd='' ;
  17. $host='localhost' ;
  18. $bdd='stnic' ;
  19. // Connexion au serveur
  20. $connect = mysql_connect($host,$user,$passwd) or die("erreur de connexion au serveur" );
  21. $connect;
  22. mysql_select_db($bdd) or die('Selection de la base de données non effectuée : '.mysql_error());
  23. //definition des variables
  24. $nom = $idee1 = $idee2 = $idee3 = $row = '';
  25. //$valid = 0; (inutile))
  26. //mise à jour des valeurs
  27. $nom = $_POST['nom'];
  28. $idee1 = $_POST['idee1'];
  29. $idee2 = $_POST['idee2'];
  30. $idee3 = $_POST['idee3'];
  31. //Verif du remplisage
  32. if ($nom != "" && $idee1 != "" )
  33. {
  34. // Requete d'insertion MYSQL
  35. $requete = "INSERT INTO stnic VALUES ($nom,$idee1,$idee2,$idee3)";
  36. // Execution de cette requete dans la base stnic
  37. $execution = mysql_query($requete,$connect);
  38. $execution;
  39. echo "<font face='Arial' size='2'>Votre demande a été ajoutée. </font>";
  40. }
  41. else
  42. {
  43. echo"Merci de remplir au minimum les deux premi&egrave;res cases.<br>";}
  44. //Affichage du formulaire
  45. echo "<br>
  46. <form method=post action=index.php>\n
  47. Ton nom  : <INPUT type=text size=40 name=nom><br>\n
  48. Idée n°1 : <textarea rows=3 cols=40 name=idee1></textarea><br>\n
  49. Idée n°2 : <textarea rows=3 cols=40 name=idee2></textarea><br>\n
  50. Idée n°3 : <textarea rows=3 cols=40 name=idee3></textarea><br>\n
  51. <!-- <INPUT TYPE=checkbox NAME=valid VALUE=1>*<BR>\n -->
  52. <INPUT TYPE=submit VALUE=\"J'ai choisi !\">\n
  53. </form>\n
  54. ";
  55. //Tableau
  56. // Creation et envoi de la requete
  57. $query = "SELECT nom,idee1,idee2,idee3 FROM stnic ORDER BY nom" ;
  58. $result2 = mysql_query($query);
  59. // Recuperation des resultats
  60. echo"<table border='1' width='100%'> \n
  61. <tr>\n
  62. <td>Nom</td>\n
  63. <td>Idée n°1</td>\n
  64. <td>Idée n°2</td>\n
  65. <td>Idée n°3</td>\n
  66. </tr>\n
  67. ";
  68. // Recuperation des resultats
  69. while($row = mysql_fetch_row($result2))
  70. {
  71. $nom = $row[0];
  72. $idee1 = $row[1];
  73. $idee2 = $row[2];
  74. $idee3 = $row[3];
  75. echo "
  76. <tr>\n
  77. <td>$nom</td>\n
  78. <td>$idee1</td>\n
  79. <td>$idee2</td>\n
  80. <td>$idee3</td>\n
  81. </tr>\n";
  82. };
  83. mysql_close();
  84.     ?>
  85.   </body>
  86. </html>


 
Voilà, si vous voyez le probleme...


Message édité par kwaio le 08-11-2006 à 18:09:31
Reply

Marsh Posté le 08-11-2006 à 15:49:40   

Reply

Marsh Posté le 08-11-2006 à 15:50:59    

tu as un ; tout seul en ligne 50...

Reply

Marsh Posté le 08-11-2006 à 15:51:47    

ça gène ?
apparement non, je l'ai supprimé, aucune différence.


Message édité par kwaio le 08-11-2006 à 15:52:15
Reply

Marsh Posté le 08-11-2006 à 15:57:50    

Alors déja ca ne se fait pas de définir des $_POST ... et encore moins les utiliser dans une requete mysql !!!
 
Il faut que tu les enregistres dans des vrai variables ($nom = $_POST['nom']; ...) et que tu remplaces les moches $_POST['xxx'] de ta requete par les nouvelles variables !
 
Deuzio pour déclarer tes variables je te conseille de faire ca :
 
$nom = $idee1 = $idee2 = $idee3 = $row = '';
 
Enfin il vaut mieux déclarer $valid comme nombre et non pas comme une chaine de caractère en supprimant les '' :
 
$valid = 0;
 
EDIT : Pour vider les $_POST, au lieu de faire ton truc tout moche, fais un $_POST = array();


Message édité par WiiDS le 08-11-2006 à 15:59:11
Reply

Marsh Posté le 08-11-2006 à 16:00:40    

J'vais essayer tout ça et j'vous dit quoi !
Merci à vous, j'débute ^^

Reply

Marsh Posté le 08-11-2006 à 16:01:22    

"INSERT INTO stnic VALUES (".$_POST['nom'].",".$_POST['idee1'].",".$_POST['idee2'].",".$_POST['idee3'].",".$_POST['valid']." )"

Reply

Marsh Posté le 08-11-2006 à 16:03:10    

chani_t a écrit :

"INSERT INTO stnic VALUES (".$_POST['nom'].",".$_POST['idee1'].",".$_POST['idee2'].",".$_POST['idee3'].",".$_POST['valid']." )"


Ca marchera mais je trouve ca moche ^^ et dans ce cas mieux vaut utiliser les simples quotes :
 
INSERT INTO stnic VALUES ('.$_POST['nom'].','.$_POST['idee1'].','.$_POST['idee2'].','.$_POST['idee3'].','.$_POST['valid'].')


Message édité par WiiDS le 08-11-2006 à 16:03:59
Reply

Marsh Posté le 08-11-2006 à 16:07:30    

ba c'était histoire qu'il ne revois pas tous sont code ;)... dans tous les cas je ne mettrais pas les données du post directement en base de données... c'est  trop facile de soumettre des données non conforme.

Reply

Marsh Posté le 08-11-2006 à 16:08:22    

chani_t a écrit :

ba c'était histoire qu'il ne revois pas tous sont code ;)... dans tous les cas je ne mettrais pas les données du post directement en base de données... c'est  trop facile de soumettre des données non conforme.


Oui c'est sur que ca sent mauvais l'injection SQL :/

Reply

Marsh Posté le 08-11-2006 à 16:09:40    

Le code est suffitsemment court pour le modifier ;)
J'ai fait ce que tu as dit, le formulaire passe nickel, mais le sinfos ne vont pas jusqu'a la bdd, et j'ai maintenant une autre erreur.
 
J'ai édité le premier message avec la nouvelle erreur et le nouveau code.
 
Et j'ai laissé tomber l'idée du valid, je verrai pour le remettre apres. restons simple.
 
Le but du script et qu'un tableau avec toutes le sidées cadeau apparaissent... je crois que je dois créer une boucle à la fin genre foreach(){} mais je suis pas super bon
 
EDIT : Oops j'suis con j'ai laissé valid dans le query.
Ban bah je l'ai enlevé, le tablea s'affiche, mais les infos du formulaire ne vont aps dans la base de données, c'est le seul probleme restant.


Message édité par kwaio le 08-11-2006 à 16:20:13
Reply

Marsh Posté le 08-11-2006 à 16:09:40   

Reply

Marsh Posté le 08-11-2006 à 16:24:22    

Code :
  1. $query = "SELECT nom,idee1,idee2,idee3,valid FROM stnic ORDER BY nom" ;
  2. $result2 = mysql_query($query);
  3. // Recuperation des resultats
  4. while($ligne = mysql_fetch_array($result2, MYSQL_ASSOC))
  5. {
  6. $nom = $ligne['nom'];
  7. $idee1 = $ligne['idee1'];
  8. $idee2 = $ligne['idee2'];
  9. $idee3 = $ligne['idee2'];
  10. echo "
  11. <table border='1' width='100%'> \n
  12. <tr>\n
  13. <td>Nom</td>\n
  14. <td>Idée n°1</td>\n
  15. <td>Idée n°2</td>\n
  16. <td>Idée n°3</td>\n
  17. </tr>\n
  18. <tr>\n
  19. <td>".$nom."</td>\n
  20. <td>".$idee1."</td>\n
  21. <td>".$idee2."</td>\n
  22. <td>".$idee3."</td>\n
  23. </tr>\n";
  24. }


 
voila ce que je ferais.

Reply

Marsh Posté le 08-11-2006 à 16:27:57    

De toute facon, il n'y a plus de problemes au niveau du tablea, aps besoin de ton machin "MYSQL_ASSOC"
 
Le probleme est que le formulaire à l'air de marcher normalement, mais les données n'entrent pas dans la bdd

Message cité 1 fois
Message édité par kwaio le 08-11-2006 à 16:32:21
Reply

Marsh Posté le 08-11-2006 à 16:29:58    

Code :
  1. #
  2. $requete = "INSERT INTO stnic VALUES ($nom,$idee1,$idee2,$idee3)" ;
  3. // Execution de cette requete dans la base essai
  4. $execution = mysql_query($requete, $connect);


 
pour la 1er requête

Reply

Marsh Posté le 08-11-2006 à 16:31:47    

kwaio a écrit :

... aps besoin de ton machin "MYSQL_ASSOC"
..


 
 
c'est juste plus joli... en effet tu récupére un tableau associatif au lieu de récupérer un tableau simple.

Reply

Marsh Posté le 08-11-2006 à 16:34:14    

Je n'ai plus de problemes au niveau du tableau, mais le formulaire ne veut pas inscrire dans la base de donnée et je n'ai plus d'erreurs annoncées...
je met à jour mon code dans le 1er message.
 
j'ai du oublier un truc avec "stnic" à la ligne 47, non ?
 
(ps : une urgence, je reviens vers 18h ;))


Message édité par kwaio le 08-11-2006 à 16:47:31
Reply

Marsh Posté le 08-11-2006 à 16:50:21    

Code :
  1. mysql_select_db($bdd, $connect) or die ('Selection de la base de données non effectuée : '.mysql_error());


 
Et je modifierais aussi la ligne : 25...
 
en effet, tu n'as pas modifié la ligne 47..

Reply

Marsh Posté le 08-11-2006 à 17:55:57    

J'ai changé la ligne 25 : aucune erreur signalée.
Mais je ne comprends pas, je suis censé l'organiser comment la ligne 47 ? Où est le probleme ?
 
EDIT : AH ! ne dois-je pas rajouter "$execution;" apres la ligne 47 ?


Message édité par kwaio le 08-11-2006 à 17:59:07
Reply

Marsh Posté le 08-11-2006 à 17:59:42    

je te l'ais déjà donné.. plus haut.... $execution = mysql_query($requete, $connect);

Reply

Marsh Posté le 08-11-2006 à 18:08:55    

J'suis désolé de vous donner du mal, mais ya pas moyen, les données ne sont pas envoyées vers la base de donnée.
J'ai pourtant tout vérifié...
je remet le code à jour dnas le premier message.
 
J'ai fait un test.

Code :
  1. <?php
  2. $user='root' ;
  3. $passwd='' ;
  4. $host='localhost' ;
  5. $bdd='stnic' ;
  6. // Connexion au serveur
  7. $connect = mysql_connect($host,$user,$passwd) or die("erreur de connexion au serveur" );
  8. $connect;
  9. mysql_select_db($bdd,$connect) or die('Selection de la base de données non effectuée : '.mysql_error());
  10. $i=0;
  11. $nom = "moi$i";
  12. $idee1 = "moi$i";
  13. $idee2 = "moi$i";
  14. $idee3 = "moi$i";
  15. mysql_query("INSERT INTO stnic VALUES ($nom,$idee1,$idee2,$idee3)" );
  16. $i++;
  17. echo"ok";
  18. ?>


Ceci retourne bien le "ok" mais les infos ne sont pas dans la BDD.
Celà aide t il à cerner le probleme ?


Message édité par kwaio le 08-11-2006 à 18:18:50
Reply

Marsh Posté le 08-11-2006 à 18:15:52    

... ligne 25 et 47 toujours pas bonne.

Reply

Marsh Posté le 08-11-2006 à 18:18:26    

Merci pour la ligne 25, j'avais pas vu le $connect, c'est modifié.
PAr contre, la ligne 47 est exactement comme tu me l'a donnée
 
et ça ne marche pas ^^

Reply

Marsh Posté le 08-11-2006 à 18:22:44    

A mon avis c'est un soucis de Values.. regarde de plus prés la doc...

Reply

Marsh Posté le 08-11-2006 à 18:24:48    

J'dois vraiment être chiant, mais je n'ai pas compris ton message...

Reply

Marsh Posté le 08-11-2006 à 18:28:36    

Ok ça marche j'ai trouvé le probleme.
QUestions de ; avant le "
 
merci beaucoup

Reply

Marsh Posté le 08-11-2006 à 18:33:12    

Juste une petite question théorique.
Je ne me rapelle plus, comment fait on pour qu'une requete PHP"erronée" n'emete pas de phrase d'erreur ?
 
quel bouricot, j'ai trouvé tout seul... le @

Message cité 1 fois
Message édité par kwaio le 08-11-2006 à 18:33:49
Reply

Marsh Posté le 08-11-2006 à 19:10:43    

chani_t a écrit :

"INSERT INTO stnic VALUES (".$_POST['nom'].",".$_POST['idee1'].",".$_POST['idee2'].",".$_POST['idee3'].",".$_POST['valid']." )"


Hmmmmm la sécurité [:delarue2]

Reply

Marsh Posté le 09-11-2006 à 08:39:23    

kwaio a écrit :

Juste une petite question théorique.
Je ne me rapelle plus, comment fait on pour qu'une requete PHP"erronée" n'emete pas de phrase d'erreur ?
 
quel bouricot, j'ai trouvé tout seul... le @


 
 
vi ou mieux, aus lieu de les taires, tu les redirige vers un fichier de log, ou vers ton email, tout en empéchant qu'elles apparaissent (ini_set('display_errors', false); etc..)
 
Et encore une fois.. vérifie ce que tu reçois de ton formulaire avant de l'insérer dans ta base de données.

Reply

Marsh Posté le 09-11-2006 à 08:55:15    

FlorentG a écrit :

Hmmmmm la sécurité [:delarue2]


 
 
ce qui n'a quand même strictement rien à voir avec le fait d'utiliser la variable en direct ou de l'assigner avant, il faut le préciser :)


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

Reply

Sujets relatifs:

Leave a Replay

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