Problème sur mon site

Eléphanteau du PHP | 16 Messages

05 févr. 2012, 19:30

Bonjour je me permet de poster car j'ai un problème sur mon site :)

En fait j'ai voulu créer un livre d'or. Mon formulaire a l'air de bien fonctionner, par contre ma page "Message.php" elle ne fonctionne pas.

Je vous met le code de mon formulaire et le code qui est censé stocker les données dans ma DB :

Ici mon fichier Livre_d_or.php

Code : Tout sélectionner

<html> <head> <title>Mon livre d'or</title> <link rel="stylesheet" href="style.css" /> </head> <BODY BGCOLOR="#E2F3EB" BACKGROUND="" TEXT="#000000" LINK="#008040" ALINK="#008040" VLINK="#008040"> <FONT COLOR="#008040" SIZE=5>Livre d'or</FONT><BR><BR> <table width="80%"><tr><td> <FORM ACTION="Message.php" METHOD="post" TARGET="Acceuil"> <label for="nom">Nom :</label><input type="text" id="nom" /><br /> <label for="nom">Prénom :</label><input type="text" id="prenom" /><br /> <label for="nom">Votre adresse e-mail :</label><input type="text" id="email" /><br /> <label for="idees">Votre message :</label><textarea id="message"></textarea><br /> <label></label><input type="Submit" value="Envoyer"> <?php mysql_connect("localhost" , "Là mon login" , "Là mon mdp"); mysql_select_db("livredor"); $nom=($_POST['nom']); $prenom=($_POST['prenom']); $email=($_POST['email']); $message=($_POST['message']); $message = nl2br($message); ?> </body> </html>
Là mon fichier Message.php

Code : Tout sélectionner

<HTML> <HEAD> <TITLE></TITLE> </HEAD> <BODY BGCOLOR="#E2F3EB" BACKGROUND="" TEXT="#000000" LINK="#008040" ALINK="#008040" VLINK="#008040"> <?php mysql_connect("localhost" , "Là mon login" , "Là mon mdp"); mysql_select_db("livredor"); if( empty($nom) OR empty($prenom) OR empty($email) OR empty($message)) { echo '<font color="red">Attention certains champs sont vide !</font>'; } else { echo '<font color="red">Message envoyé avec succès !</font>'; INSERT INTO message('id', 'nom', 'prenom', 'email', 'message') VALUES ('', $nom, $prenom, $email, $message); } ?> <FONT COLOR="#008040" SIZE=5><CENTER>Message envoyé.</CENTER></FONT> <FONT COLOR="#008040" SIZE=3><A HREF="Livre_d_or.php" target="Acceuil"><CENTER>Retour</CENTER></A></FONT> </BODY> </HTML>
Modifié en dernier par Mathched le 05 févr. 2012, 20:41, modifié 4 fois.

Eléphant du PHP | 99 Messages

05 févr. 2012, 19:36

Salut,

C'est tout à fait normal, tes fichiers ont l'extensions .html il faut les renommer avec l'extension .php

Eléphanteau du PHP | 16 Messages

05 févr. 2012, 20:37

J'ai renommé mes fichier en .php par contre maintenant ca m'affiche les erreur suivantes :

-Dans Livre_d_or.php :

Code : Tout sélectionner

Notice: Undefined index: nom in C:\wamp\www\Test\Livre_d_or.php on line 22 Call Stack # Time Memory Function Location 1 0.0009 672120 {main}( ) ..\Livre_d_or.php:0 ( ! ) Notice: Undefined index: prenom in C:\wamp\www\Test\Livre_d_or.php on line 23 Call Stack # Time Memory Function Location 1 0.0009 672120 {main}( ) ..\Livre_d_or.php:0 ( ! ) Notice: Undefined index: email in C:\wamp\www\Test\Livre_d_or.php on line 24 Call Stack # Time Memory Function Location 1 0.0009 672120 {main}( ) ..\Livre_d_or.php:0 ( ! ) Notice: Undefined index: message in C:\wamp\www\Test\Livre_d_or.php on line 25 Call Stack # Time Memory Function Location 1 0.0009 672120 {main}( ) ..\Livre_d_or.php:0
-Dans Message.php :

Code : Tout sélectionner

( ! ) Parse error: syntax error, unexpected T_STRING in C:\wamp\www\Test\Message.php on line 23
J'ai edité mon premier message afin de mettre les fichier à jours.

Si vous pouviez me dire comment résoudre ça je vous serez bien reconnaissant :)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

05 févr. 2012, 20:51

Le bloc
<?php

mysql_connect("localhost" , "Là mon login" , "Là mon mdp");
mysql_select_db("livredor");

   $nom=($_POST['nom']);
   $prenom=($_POST['prenom']);
   $email=($_POST['email']);
   $message=($_POST['message']);
   $message = nl2br($message);
   
?>   
qui te permet de récupérer les valeurs du formulaires envoyées via la méthode POST ne devrait-il pas plutôt se trouver au début de la page de traitement plutôt qu'à la fin de la page d'affichage du formulaire ? ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 99 Messages

05 févr. 2012, 20:52

Le message d'erreur indique que les variables ne sont pas définis.

Dans ton fichier livre_d_or.php tu peux enlever ton code php car il n'est pas utile dans ce fichier là étant donné que la vérification s'éffectue en method POST dans le fichier Message.php

Tu peux ajouter ceci en dessus de mysql_connect de ton fichier Message.php :
   $nom=($_POST['nom']);
   $prenom=($_POST['prenom']);
   $email=($_POST['email']);
   $message=($_POST['message']);
   $message = nl2br($message);
Donc fichier Message.php :
<?php
   $nom=($_POST['nom']);
   $prenom=($_POST['prenom']);
   $email=($_POST['email']);
   $message=($_POST['message']);
   $message = nl2br($message);

mysql_connect("localhost" , "Là je met mon login" , "Là je met mon mdp");
mysql_select_db("livredor");

NB: Ryle m'a devancé :D

Eléphanteau du PHP | 16 Messages

05 févr. 2012, 20:56

Yes vous êtes des chefs.

Par contre j'ai une autre erreur à la ligne 29 dans mon fichier Message.php :

INSERT INTO message('id', 'nom', 'prenom', 'email', 'message') VALUES ('', $nom, $prenom, $email, $message);

Et ça m'affiche :

Code : Tout sélectionner

( ! ) Parse error: syntax error, unexpected T_STRING in C:\wamp\www\Test\Message.php on line 29
Désolé je suis pas très doué j'essaye d'apprendre seul mais dur dur :(

Eléphant du PHP | 99 Messages

05 févr. 2012, 21:02

Ton INSERT est faux, il manque le mysql_query avant.
mysql_query("INSERT INTO message ('id', 'nom', 'prenom', 'email', 'message') VALUES ('', $nom, $prenom, $email, $message)");

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

05 févr. 2012, 21:05

C'est parce que php ne sait pas parler SQL... Par contre MySQL le comprend très bien ;)

Il faut donc construire une requête sql à l'aide de php (une chaine de caractère en fait) et la transmettre à MySQL avec un mysql_query() par exemple :)

Edit : ah ben 1 partout crash ;)

Edit 2 : à noter par ailleurs que dans ta requête sql, les noms des colonnes ne doivent pas être entourées d'apostrophes, sinon mysql pensera qu'il s'agit de chaines de caractères et ne saura pas qu'il doit en fait rechercher les colonnes d'une table :
"INSERT INTO message (id, nom, prenom, email, message) VALUES (...)"
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 16 Messages

05 févr. 2012, 21:45

Encore une fois un GRAND merci :)

Et encore une fois ça marche toujours pas :(

Voici mon nouveau fichier Message.php :

Code : Tout sélectionner

<HTML> <HEAD> <TITLE></TITLE> </HEAD> <BODY BGCOLOR="#E2F3EB" BACKGROUND="" TEXT="#000000" LINK="#008040" ALINK="#008040" VLINK="#008040"> <?php $nom=($_POST['nom']); $prenom=($_POST['prenom']); $email=($_POST['email']); $message=($_POST['message']); $message = nl2br($message); mysql_connect("localhost" , "Là mon login" , "Là mon mdp"); mysql_select_db("livredor"); if( empty($nom) OR empty($prenom) OR empty($email) OR empty($message)) { echo '<font color="red">Attention certains champs sont vide !</font>'; } else { echo '<font color="red">Message envoyé avec succès !</font>'; mysql_query("INSERT INTO message ('id', 'nom', 'prenom', 'email', 'message') VALUES ('', $nom, $prenom, $email, $message)"); } ?> <FONT COLOR="#008040" SIZE=5><CENTER>Message envoyé.</CENTER></FONT> <FONT COLOR="#008040" SIZE=3><A HREF="Livre_d_or.php" target="Acceuil"><CENTER>Retour</CENTER></A></FONT> </BODY> </HTML>
Et j'ai encore le message d'erreur de tout à l'heure pourtant j'ai fait ce que vous avez dit :( :

Code : Tout sélectionner

( ! ) Notice: Undefined index: nom in C:\wamp\www\Test\Message.php on line 11 Call Stack # Time Memory Function Location 1 0.0006 676688 {main}( ) ..\Message.php:0 ( ! ) Notice: Undefined index: prenom in C:\wamp\www\Test\Message.php on line 12 Call Stack # Time Memory Function Location 1 0.0006 676688 {main}( ) ..\Message.php:0 ( ! ) Notice: Undefined index: email in C:\wamp\www\Test\Message.php on line 13 Call Stack # Time Memory Function Location 1 0.0006 676688 {main}( ) ..\Message.php:0 ( ! ) Notice: Undefined index: message in C:\wamp\www\Test\Message.php on line 14 Call Stack # Time Memory Function Location 1 0.0006 676688 {main}( ) ..\Message.php:0 Attention certains champs sont vide ! Message envoyé. Retour
Vraiment désolé :(

Eléphant du PHP | 99 Messages

05 févr. 2012, 22:15

Remplace
   $nom=($_POST['nom']);
   $prenom=($_POST['prenom']);
   $email=($_POST['email']);
   $message=($_POST['message']);
   $message = nl2br($message);
Par :
   $nom = isset($_POST['nom']) ? $_POST['nom'] : '';
   $prenom= isset($_POST['prenom']) ? $_POST['prenom'] : '';
   $email= isset($_POST['email']) ? $_POST['email'] : '';
   $message= isset($_POST['message']) ? $_POST['message'] : '';
   $message = nl2br($message);
En outre, concernant ta page avec le formulaire je te conseille de remplacer les id="..." par name="..." car sinon tu risques d'avoir des problèmes pour la vérification de ton formulaire ;).

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

05 févr. 2012, 22:19

C'est parce qu'il manque le nom du champ dans tes inputs (attribut name) :
<input type="text" name="nom" id="nom" />
au lieu de 
<input type="text" id="nom" />
C'est sur le nom des inputs que se base php pour récupérer les valeurs :)

PS : et t'as pas tenu compte de ma remarque ci-dessus concernant les apostrophes autour de tes noms de colonnes dans ta requête sql :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 16 Messages

06 févr. 2012, 09:49

Merci à vous deux :)

J'ai plus de message d'erreur mais en revanche impossible de trouver les données dans la table message de ma DB livredor :( Est-ce normal ?

Eléphant du PHP | 99 Messages

06 févr. 2012, 10:41

Essai d'ajouter un debug dans ta requête pour voir ou ça coince :
mysql_query("INSERT INTO message (id, nom, prenom, email, message) VALUES ('', $nom, $prenom, $email, $message)") or die(mysql_error());

ViPHP
xTG
ViPHP | 7331 Messages

06 févr. 2012, 10:44

Modifies la requête par ceci :
mysql_query("INSERT INTO message ('id', 'nom', 'prenom', 'email', 'message') VALUES ('', $nom, $prenom, $email, $message)") or die(mysql_error());
Elle t'apprendras surement quelque chose.

En fait je suis presque persuadé que tu as des caractères spéciaux dans tes variables générant une erreur SQL.
Il faut toujours protéger les variables d'une requête contre les injections.
On peut pour cela utiliser la fonction mysql_real_escape_string().

Eléphanteau du PHP | 16 Messages

06 févr. 2012, 10:48

Ça m'affiche :

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 '@loucasaudebethloc.fr, Essai.)' at line 1