Ecriture sur BDD en SQL...Galère!

Eléphanteau du PHP | 33 Messages

20 sept. 2011, 13:24

Bonjour,

Maintenant que mon livre d'or fonctionne parfaitement en lecture, voila que je galére en écriture. Voici mes deux fichiers PHP:

Le formulaire:

Code : Tout sélectionner

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr"> <head> <title>Livre d'Or</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> </head> <body> <BODY BGCOLOR=black> <form method='POST' action="./write_Livredor.php" method="get"> <font face='Arial' size='2'color=white> Votre nom : <input type='text' name='$nom' size='50' value=''><br> Votre prénom : <input type='text' name='$prenom' size='50' value=''><br> Votre Pseudo : <input type='text' name='$pseudo' size='50' value=''><br> URL de votre site : <input type='text' name='$siteweb' size='50' value=''><br> Votre Email : <input type='text' name='$mail' size='50' value=''><br> Message : <input type='text' name='$message' size='100' value=''><br> <input type='submit' value='Valider'></font></form> </body> </html>
Et ma fonction (write_Livredor.php)

Code : Tout sélectionner

<?php $date=DATE_FORMAT('dd-mm-0000', NOW()) // Vérification des champs nom et prenom (si il ne sont pas vides ?) if($nom != "" && $prenom != "") { // Connexion a Mysql $mysql_link = mysql_connect('localhost', 'secret', 'encoreplussecret'); // Vérification de la validité de la connexion MYSQL if($mysql_link) { // Requete d'insertion MYSQL $requete = "INSERT INTO Messages (Nom,Prénom,Date,Pseudo,Mail,siteWeb,Message) VALUES ('$nom','$prenom','$date','$pseudo','$mail','$siteweb','$message')"; // Execution de cette requete dans la base essai $execution = mysql_db_query("alematt_livredor", $requete); echo "<font face='Verdana' size='2'>Les valeurs ont bien été enregistrées dans le livre d'or <b>valeurs</b></font>"; } else echo "<HTML><HEAD><TITLE>Erreurs</TITLE></HEAD><BODY><font face='Verdana' size='2'>ATTENTION : Le champs nom ou prénom n'a pas été remplis correctement, veuillez vérifier</font></body></html>"; ?>
Le formulaire s'affiche bien, mais à la validation, rien ne se passe. J'ai vérifier sur mon FTP, ma base n'a pas changée.

Si vous voyez quelques choses qui clochent, je suis prenuer! :)

Merci

ViPHP
ViPHP | 2577 Messages

20 sept. 2011, 13:54

Bonjour,

Sur la première ligne PHP ($date=...) il manque un ";"

Pour les appels à mysql, il faut tester mysql_errno() et afficher mysql_error() et éventuellement le SQL pour voir s'il y a une erreur.

Lorsque ca marchera, fait un test en sasissant une quote.

Eléphanteau du PHP | 33 Messages

20 sept. 2011, 16:28

Merci Mazzarini,

j'ai donc fait cela:

Code : Tout sélectionner

<?php $date=DATE_FORMAT('dd-mm-0000', NOW()); // Vérification des champs nom et prenom (si il ne sont pas vides ?) if($nom != "" && $prenom != "") { // Connexion a Mysql $mysql_link = mysql_connect('localhost', 'secret', 'encoreplussecret'); echo mysql_errno($mysql_link) . ": " . mysql_error($mysql_link). "\n"; // Vérification de la validité de la connexion MYSQL if($mysql_link) { // Requete d'insertion MYSQL $requete = "INSERT INTO Messages (Nom,Prénom,Date,Pseudo,Mail,siteWeb,Message) VALUES ('$nom','$prenom','$date','$pseudo','$mail','$siteweb','$message')"; // Execution de cette requete dans la base essai $execution = mysql_db_query("alematt_livredor", $requete); echo "<font face='Verdana' size='2'>Les valeurs ont bien été enregistrées dans le livre d'or <b>valeurs</b></font>"; } else echo "<HTML><HEAD><TITLE>Erreurs</TITLE></HEAD><BODY><font face='Verdana' size='2'>ATTENTION : Le champs nom ou prénom n'a pas été remplis correctement, veuillez vérifier</font></body></html>"; ?>
Mais cela ne change rien. J'appelle le premier fichier dans un frame de ma page, le formulaire s'affiche, je saisie chaque cas, je valide, et là, rien ne se passe, pas de message d'erreur non plus! :?

ViPHP
ViPHP | 2577 Messages

20 sept. 2011, 16:44

Pour récupérer les données, il faut les prendre dans $_GET['$nom'] par exemple.

L'utilisation du $ n'est pas une bonne idée, mettre par exemple sans le $ :
<input type='text' name='nom' size='50' value=''>
et récupérer $_GET['nom']

Pour les erreurs, controle aussi après le mysql_db_query()

devlop78
Invité n'ayant pas de compte PHPfrance

20 sept. 2011, 17:00

Active les erreurs, il devrait y avoir un E_PARSE

Ensuite, je ne connais pas de fonction NOW() en php

Eléphanteau du PHP | 33 Messages

20 sept. 2011, 17:42

Merci pour ces remarques,

Code : Tout sélectionner

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr"> <head> <title>Livre d'Or</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> </head> <body> <BODY BGCOLOR=black> <form method='POST' action="http://marc-beuvain.com/write_Livredor.php" method="get"> <font face='Arial' size='2'color=white> Votre nom : <input type='text' name='nom' size='50' value=''><br> Votre prénom : <input type='text' name='prenom' size='50' value=''><br> Votre Pseudo : <input type='text' name='pseudo' size='50' value=''><br> URL de votre site : <input type='text' name='siteweb' size='50' value=''><br> Votre Email : <input type='text' name='mail' size='50' value=''><br> Message : <input type='text' name='message' size='100' value=''><br> <input type='submit' value='Valider'></font></form> $nom=$_GET['nom']; $prenom=$_GET['prenom']; $pseudo=$_GET['pseudo']; $siteweb=$_GET['siteweb']; $mail=$_GET['mail']; $message=$_GET['message']; </body> </html>
Mais rien ne change! #-o Il y a forcement un truc qui ne va pas...Arrgggg!

Mammouth du PHP | 672 Messages

20 sept. 2011, 17:51

Bonjour.

1. C'est normal que tu utilises la variable $_GET pour récupérer les données envoyées par un formulaire en POST ? #-o

2. Au niveau de tes requêtes, essaye de vérifier ce que tu envoies et le résultat :
// Si on n'arrive pas à se connecter, afficher la raison
$mysql_link = mysql_connect('localhost', 'secret', 'encoreplussecret') or die("Erreur à la connexion : ".mysql_error());

// Requete d'insertion MYSQL
$requete = "INSERT INTO Messages (Nom,Prénom,Date,Pseudo,Mail,siteWeb,Message) VALUES ('$nom','$prenom','$date','$pseudo','$mail','$siteweb','$message')";

// Execution de cette requete dans la base essai. Pareil, si echec de la requête, afficher le message d'erreur
$execution = mysql_db_query("alematt_livredor", $requete) or die ("Erreur de requête : ".mysql_error());
Au passage... la fonction mysql_db_query() est obsolète, utilise plutôt mysql_select_db() et mysql_query() à la place.

Eléphanteau du PHP | 33 Messages

20 sept. 2011, 18:19

Merci,
J'ai oublié de préciser que j'ai commencé le langage PHP et SQL samedi soir, donc désolé pour mes maladresses! :oops:

Je vais voir tout cela! ;)

Eléphanteau du PHP | 33 Messages

20 sept. 2011, 18:53

Bon, je récapitule,

L’appel du formulaire (Form_livredor.php) est placé dans une frame de ma page.

Form_livredor.php

Code : Tout sélectionner

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr"> <head> <title>Livre d'Or</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> </head> <body> <BODY BGCOLOR=black> <form action="./write_Livredor.php" method="get"> <font face='Arial' size='2'color=white> Votre nom : <input type='text' name='nom' size='50' value='TOTO'><br> Votre prénom : <input type='text' name='prenom' size='50' value='EDDY'><br> Votre Pseudo : <input type='text' name='pseudo' size='50' value='TODY'><br> URL de votre site : <input type='text' name='siteweb' size='50' value='http://www.totoeddy.com'><br> Votre Email : <input type='text' name='mail' size='50' value='[email protected]'><br> Message : <input type='text' name='message' size='100' value='Cest quand que ça marche?'><br> <input type='submit' value='Valider'></font></form> $date = date("j/n/Y"); $nom=$_GET['nom']; $prenom=$_GET['prenom']; $pseudo=$_GET['pseudo']; $siteweb=$_GET['siteweb']; $mail=$_GET['mail']; $message=$_GET['message']; </body> </html>
Le formulaire s'afiche bien, et il est sensé appeler le fichier write_livredor.php

Code : Tout sélectionner

<?php // Vérification des champs nom et prenom (si il ne sont pas vides ?) if($nom != "" && $prenom != "") { // Si on n'arrive pas à se connecter, afficher la raison $mysql_link = mysql_connect('localhost', 'secret', 'encoreplussecret') or die("Erreur à la connexion : ".mysql_error()); // Requete d'insertion MYSQL $requete = "INSERT INTO Messages (Nom,Prénom,Date,Pseudo,Mail,siteWeb,Message) VALUES ('$nom','$prenom','$date','$pseudo','$mail','$siteweb','$message')"; // Execution de cette requete dans la base essai. Pareil, si echec de la requête, afficher le message d'erreur $execution = mysql_db_query("alematt_livredor", $requete) or die ("Erreur de requête : ".mysql_error()); } ?>
Mais rien n'est ajouté à la BDD.

Voila, j'ai l'impression que le lien entre le formulaire (Form_livredor.php) et la requete (Write_livredor.php) ne se fait pas...

Donc, AU SECOURS! :mrgreen:

Ha oui, ma BDD
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Modifié en dernier par AleMatt le 20 sept. 2011, 21:04, modifié 1 fois.

Mammouth du PHP | 19672 Messages

20 sept. 2011, 19:07

remplace donc mysql_db_query() par mysql_query() pour commencer...
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 33 Messages

20 sept. 2011, 20:17

C'est fait, mais cela ne change rien, du moins pas visiblement... :?

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

20 sept. 2011, 21:27

salut,

ta façon de coder est prévu pour une configuration non standard (register globals = on)
une tuto sur la validation des formulaires http://www.phpdebutant.org/article56.php


@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 33 Messages

20 sept. 2011, 23:34

Merci Moogli

J'ai remanié l'ensemble

Code : Tout sélectionner

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr"> <head> <title>Livre d'Or</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> </head> <BODY bgcolor="#CC7005"> <form action="write_Livredor.php" method="post"> <font face='Arial' size='2'color=black> Votre nom : <input type='text' name='nom' size='50' value='TOTO'><br> Votre prénom : <input type='text' name='prenom' size='50' value='EDDY'><br> Votre Pseudo : <input type='text' name='pseudo' size='50' value='TODY'><br> URL de votre site : <input type='text' name='siteweb' size='50' value='http://www.totoeddy.com'><br> Votre Email : <input type='text' name='mail' size='50' value='[email protected]'><br> Message : <input type='text' name='message' size='100' value='Cest quand que ça marche?'><br> <input type='submit' value='Valider'></font></form> </body> </html>
ET write_Livredor.php

Code : Tout sélectionner

<?php // Vérification des champs nom et prenom (si il ne sont pas vides ?) // Today=date("d-m-y"); // Si on n'arrive pas à se connecter, afficher la raison $mysql_link = mysql_connect('localhost', 'Login', 'Pass') or die("Erreur à la connexion : ".mysql_error()); if (!$mysql_link) { die('Could not connect: ' . mysql_error()); } mysql_select_db("alematt_livredor", $mysql_link); // Requete d'insertion MYSQL $sql=("INSERT INTO Messages(Nom, Prénom, Mail, siteWeb, Message, Pseudo) VALUES ('$POST[nom]','$POST[prenom]','$POST[mail]','$POST[siteweb]','$POST[message]','$POST[pseudo]')"); if (!mysql_query($sql,$mysql_link)) { die('Error: ' . mysql_error()); } echo <font face="Arial" color="white" size="3">"1 entrée ajoutée"; mysql_close($mysql_link) ?>
Et ça ne marche toujours pas, je suis désespéré! :?

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

20 sept. 2011, 23:54

Et ça ne marche toujours pas, je suis désespéré! :?
explique plus :)

ton code formulaire plus valide :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
    <head>
        <title>Livre d"Or</title>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    </head>
	<body bgcolor="#CC7005">
		<form  action="write_Livredor.php" method="post">
			<p style="font-family: Arial, font-size:2,color=black>
				Votre nom          : <input type="text" name="nom" size="50" value="TOTO" /><br />
				Votre prénom       : <input type="text" name="prenom" size="50" value="EDDY"><br />
				Votre Pseudo       : <input type="text" name="pseudo" size="50" value="TODY"><br />
				URL de votre site    : <input type="text" name="siteweb" size="50" value="http://www.totoeddy.com"><br />
				Votre Email         : <input type="text" name="mail" size="50" value="[email protected]" /><br /> 
				Message          : <input type="text" name="message" size="100" value="Cest quand que ça marche?" /><br />
				<input type="submit" name="submit" value="Valider" />
			</p>
	</form>
	</body>
</html>
ta page de validation du formulaire ne tiens pas du tout compte du formulaire donc heu ben ça marche pas XD

voila a quoi peux ressembler la validation du formulaire
<?php
// Vérification des champs nom et prenom (si il ne sont pas vides ?)
// Today=date("d-m-y"); 
// Si on n'arrive pas à se connecter, afficher la raison
$mysql_link = mysql_connect('localhost', '*****', '******') or die("Erreur à la connexion : ".mysql_error());
if (!$mysql_link){
  die('Could not connect: ' . mysql_error());
}
mysql_select_db("alematt_livredor", $mysql_link);
// validation du formulaire
if (!empty($_POST['submit'] && $_POST['submit'] == 'Valider') {
	if (!empty($_POST['nom']) && !empty($_POST['prenom']) && !empty($_POST['pseudo']) && !empty($_POST['siteweb']) && !empty($_POST['mail']) && !empty($_POST['message']) ) {
	$sql = 'INSERT INTO Messages(Nom, Prénom, Mail, siteWeb, Message, Pseudo)
VALUES (\''.mysql_real_escape_string($_POST['nom']).'\',
\''.mysql_real_escape_string($_POST['prenom']).'\',
\''.mysql_real_escape_string($_POST['email']).'\',
\''.mysql_real_escape_string($_POST['siteweb']).'\',
\''.mysql_real_escape_string($_POST['message']).'\',
\''.mysql_real_escape_string($_POST['pseudo']).'\')';
	if (!mysql_query($sql,$mysql_link)){
	  die('Error: ' . mysql_error());
	  }
	echo '<p style="font-family=Arial,color:white,font-size:12px">1 entrée ajoutée</p>';
	}
	else {
		echo '<p style="color:red; border: 1px solid red">Il faut remplire tous les champs les gens ^^';
	}
}
mysql_close($mysql_link)
?>

A tester :)

@+
Modifié en dernier par moogli le 21 sept. 2011, 00:26, modifié 1 fois.
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 33 Messages

21 sept. 2011, 00:21

Une c'tite erreur!

Parse error: syntax error, unexpected T_BOOLEAN_AND, expecting ')' in /home/alematt/public_html/write_Livredor.php on line 11

Ligne 11:
if (!empty($_POST['submit'] && $_POST['submit'] == 'Valider') {