8797 sujets

Développement web côté serveur, CMS

Bonjour,

je vous envoie mon code, qui est long mais compréhensible... en plus c'est un code de débutant.
Il s'agit d'un formulaire, supposé ecrire dans une table d'une base mysql.


<?php
	if (isset($_POST["prenom"]) && isset($_POST["age"])) {
		$prenom = $_POST["prenom"];
		$age = $_POST["age"];
	}
	else {
?>

//page ici ...

<?php
	}
	if (isset($_POST["profession"])) { $profession = $_POST["profession"]; }
	if (isset($_POST["batiment"])) { $batiment = $_POST["batiment"]; }
	if (isset($_POST["roomnbr"])) { $roomnbre = $_POST["roomnbr"]; }
	if (isset($_POST["nationality"])) { $nationality = $_POST["nationality"]; }
	$link = mysql_connect("localhost", "root", "");
	mysql_select_db("mehdisql", $link) or die(mysql_error());
	mysql_query("INSERT INTO formiamm VALUES('', $prenom, $age, $profession, $batiment, $roomnbr, $nationality)", $link);
	mysql_close($link);
?>


quand je soumet la requette, il ne fait rien !! càd quand je vérifie la table dans phpMyAdmin, je ne trouve rien, voila ce qu'il m'affiche :
MySQL n'a retourné aucun enregistrement. (Traitement en 0.0002 sec.)
et puis juste en dessous il y a :

requête SQL:
SELECT * 
FROM `formiamm` 
LIMIT 0 , 30 

Modifié par M3hdi (25 Sep 2008 - 22:37)
remplace ta ligne avec le mysql_query par celle ci :


mysql_query("INSERT INTO formiamm VALUES('', $prenom, $age, $profession, $batiment, $roomnbr, $nationality)", $link) or die(mysql_error());


Tu auras un message d'erreur si ta requête n'a pas pu s'exécuter, à toi de le résoudre ensuite.
"die" de mysql_query renvoi :

Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in C:\wamp\www\queryIAMM\verif.php on line 81

So... ?
Modifié par M3hdi (23 Sep 2008 - 22:14)
Salut,

Il faut encadrer tes valeurs textuelles par des quotes, dans ta requête.
"INSERT INTO formiamm VALUES('', '$prenom', $age, '$profession', '$batiment', $roomnbr, '$nationality')"

(à adapter suivant le format de tes données en base : seuls les types INT et dérivés n'ont pas besoin de quotes)
maintenant je sais exactement où est le problème, mais je n'ai pas su le resoudre.

Il s'agit de simple et double quote dans la requette sql.

à vous de m'aider !

voila le code :



$query = "INSERT INTO formiamm VALUES('', $prenom, $age, $profession, $batiment, $roomnbr, $nationality, $email, $message, $publicinfo)";
mysql_query(addslashes($query), $link) or die(mysql_error());


Modifié par M3hdi (24 Sep 2008 - 19:09)
hello,


$query = sprintf("INSERT INTO formiamm VALUES('', '%s', '%s', '%s', '%s', '%s', '%s')", 
    mysql_real_escape_string($prenom, $link),
    mysql_real_escape_string($age, $link),
    mysql_real_escape_string($profession, $link),
    mysql_real_escape_string($batiment, $link),
    mysql_real_escape_string($roomnbr, $link),
    mysql_real_escape_string($nationality, $link));
mysql_query($query, $link) or die(mysql_error());


Je n'ai pas testé, assures toi que l'ordre d'insertion concerne toutes les colonnes de ta table sinon il faudra mettre les fields.
Merci thoas ! maintenant ca marche bien, par contre il me reste un problème à regler pour que le formulaire soit fonctionnel.

j'ai créé une page index.html, dans la quelle les données apres saisie du formulaire seront émises à verif.php, ce dernier verifie si les champs obligatoires ont était bien remplis, si c'est le cas, il envoi les valeurs à la base de données. Smiley sweatdrop

alors, le problème est comme suit :

supposons qu'on a remplis comme il faut le formulaire, qu'on a émis la requette, puis redirrigé vers la page de remerciement. Là, si l'utilisateur clique sur actualiser la page, je me retrouve avec des valeurs dupliquées dans la bdd, ceci dit que le tableau $_POST n'est pas vidé. Notez bien que je ne veux pas faire $_POST["variable"] = ""; existe-il une autre methode plus meilleur ?
Modifié par M3hdi (24 Sep 2008 - 23:23)
Salut,

ton code PHP risque de ne pas trop marcher dans une page index.html Smiley cligne ! Ce serait plus efficace dans une page index.php

Sinon en général le plus simple est de tout faire sur la même page (soumission du formulaire et vérification des données soumises) et quand tout est OK de faire une redirection après mise à jour de la BDD vers une autre page de confirmation grâce à header('Location: pageconfirm.php');

A+
Tant qu'il met tout son code PHP dans un .php et que le html contient uniquement le formulaire pas besoin d'un index.php (même si c'est dans le cas d'une erreur, l'utilisateur ne retrouve pas ses données qu'il avait préalablement saisies).

Sinon effectivement comme Heyoan l'a dit, le header() te permettra d'obtenir une redirection à la confirmation donc de "perdre" toutes les données que tu as transmises en POST.
Modifié par thoas (25 Sep 2008 - 11:13)
effectivement la fonction header resoud le probleme !

Merci à tout ceux qui ont repondu Smiley cligne