Page 1 sur 2

Récupérer données d'un formulaire

Posté : 28 juin 2009, 03:24
par omezine
Bonjour à tous,

Je suis débutant en PHP et j'ai quelques difficultés. J'ai crée un formulaire et je souhaiterais récupérer les données et les placer dans ma base de données. J'ai crée une base de données mais je ne sais pas si elle est correcte.

Voici déjà mon formulaire :

Code : Tout sélectionner

<form method="post" action="traitement_formulaire.php"> <div class="panel"> <div class="inner"><span class="corners-top"><span></span></span> <h2>Inscription</h2> <fieldset class="fields2"> <dl> <dd><strong>Veuillez remplir le formulaire ci-dessous pour participer au tournoi MySlam.</strong></dd></dl> <dl> <dt><label for="prenom">Prénom :</label></dt> <dd><input type="text" size="25" tabindex="1" name="prenom" class="inputbox autowidth" /></dd> </dl> <dl> <dt><label for="pseudo">Pseudo :</label></dt> <dd><input type="text" size="25" tabindex="2" name="pseudo" class="inputbox autowidth" /></dd> </dl> <dl> <dt><label for="tournoi">Choix du tournoi : </label></dt> <dd><select name="tournoi"> <optgroup label="Tournoi saison 1"> <option value="saison1poule1">Poule 1</option> <option value="saison1poule2">Poule 2</option> </optgroup> <optgroup label="Tournoi saison 2"> <option value="saison2poule1">Poule 1</option> <option value="saison2poule2">Poule 2</option> </select></dd> </dl> <br /> <dl> <dt><label for="dispo">Disponibilités : </label></dt> <dd><input type="checkbox" name="dispo" value="lundi" /> Lundi</dd> </dl> <dl> <dd><input type="checkbox" name="dispo" value="mardi" /> Mardi</dd> </dl> <dl> <dd><input type="checkbox" name="dispo" value="mercredi" /> Mercredi</dd> </dl> <dl> <dd><input type="checkbox" name="dispo" value="jeudi" /> Jeudi</dd> </dl> <dl> <dd><input type="checkbox" name="dispo" value="vendredi" /> Vendredi</dd> </dl> <dl> <dd><input type="checkbox" name="dispo" value="samedi" /> Samedi</dd> </dl> <dl> <dd><input type="checkbox" name="dispo" value="dimanche" /> Dimanche</dd> </dl> <br /> <dl> <dt><label for="email">Adresse email : </label></dt> <dd><input type="text" name="email" size="25" class="inputbox autowidth"/></dd> </dl> </fieldset> <span class="corners-bottom"><span></span></span></div> </div> <div class="panel"> <div class="inner"><span class="corners-top"><span></span></span> <fieldset class="submit-buttons"> <input type="submit" value="Valider" class="button1" /> </fieldset> <span class="corners-bottom"><span></span></span></div> </div> </form> </div>
Voici, ci-dessous, ma page traitement_formulaire.php, mais là je sèche, j'ai tout essayé, et je ne comprends rien. Je suis qu'au début et encore loin d'arriver à ce que je souhaite et c'est démotivant. J'ai encore à rendre des champs obligatoires, a ajouter un système anti-spam (captcha), et un système de confirmation par mail à la personne s'étant inscrite... Mais bon je ne vais pas bruler les étapes.

J'ai volontairement laissé localhost, pseudo, motdepasse et nomdemabase, ces champs sont normalement personnalisé.

Dans ma table "inscriptions" j'ai crée 6 champs : id, ins_prenom, ins_pseudo, ins_tournoi, ins_dispo, ins_email.

Id est de type "mediumint" avec dans extra "auto_increment" et les autres champs de type "text".
<?php
mysql_connect("localhost", "pseudo", "motdepasse")  OR die('Erreur de connexion à la base');
mysql_select_db("nomdemabase");


if (isset($POST['Valider']) ) {
$prenom = $_POST['prenom'];
$pseudo = $_POST['pseudo'];
$tournoi = $_POST['tournoi'];
$dispo = $_POST['dispo'];
$email = $_POST['email'];

// On ajoute une entrée avec mysql_query
mysql_query ("INSERT INTO inscriptions (id,ins_prenom,ins_pseudo,ins_tournoi,ins_dispo,ins_email) VALUES ('""','".$prenom."','".$pseudo."','".$tournoi."','".$dispo."','".$email."')");

}													   									   
mysql_close();
?>

Posté : 28 juin 2009, 09:54
par @rthur
Bonjour,

Je n'ai pas tout relu mais déjà tu as un problème dans ta requête MySQL.

Déjà, il faut que tu prennes l'habitude de demander l'affichage des erreurs MySQL pour pouvoir débugger efficacement. Pour cela, remplace :
mysql_query (...);
par
mysql_query (...) or die("Erreur MySQL : ".mysql_error());
Ensuite dans ta requête SQL:
"INSERT INTO inscriptions (id,ins_prenom,ins_pseudo,ins_tournoi,ins_dispo,ins_email) VALUES ('""','".$prenom."','".$pseudo."','".$tournoi."','".$dispo."','".$email."')"
Tu as des guillemets doubles en trop pour l'id:
"INSERT INTO inscriptions (id,ins_prenom,ins_pseudo,ins_tournoi,ins_dispo,ins_email) VALUES ('','".$prenom."','".$pseudo."','".$tournoi."','".$dispo."','".$email."')"

Posté : 28 juin 2009, 13:53
par omezine
Merci @rthur.

Alors, une fois le formulaire validé, je tombe sur une page blanche, je n'ai aucune erreur. Et lorsque je me rend sur phpmyadmin il n'y as aucun enregistrement dans ma base de donnée "inscriptions".

Est-ce que ça vient de la structure de ma table ?

Code : Tout sélectionner

Structure de la table `inscriptions` CREATE TABLE `inscriptions` ( `id` mediumint(9) NOT NULL auto_increment, `ins_prenom` text collate latin1_german2_ci NOT NULL, `ins_pseudo` text collate latin1_german2_ci NOT NULL, `ins_tournoi` text collate latin1_german2_ci NOT NULL, `ins_dispo` text collate latin1_german2_ci NOT NULL, `ins_email` text collate latin1_german2_ci NOT NULL, KEY `id` (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german2_ci AUTO_INCREMENT=1 ;

Posté : 28 juin 2009, 14:07
par albat
$req = "INSERT INTO inscriptions (id, ins_prenom, ins_pseudo, ins_tournoi, ins_dispo, ins_email)
        VALUES ('','".$prenom."','".$pseudo."','".$tournoi."','".$dispo."','".$email."')";
Puisque ton champ id est un entier auto-incrémenté,
tu n'as pas besoin de l'inclure dans ta requête.
$req = "INSERT INTO inscriptions (ins_prenom, ins_pseudo, ins_tournoi, ins_dispo, ins_email)
        VALUES ('".$prenom."','".$pseudo."','".$tournoi."','".$dispo."','".$email."')";

Posté : 28 juin 2009, 14:11
par omezine
Bonjour albat,

Merci pour ta réponse. Je rencontre toujours le même problème. Je tombe sur une page blanche et la base reste vide :(

Posté : 28 juin 2009, 14:17
par albat
Oui, pardon.
Je me suis interrompu et j'ai validé mon post avant de finir ma réponse. :oops: :lol:

Je voulais aussi te suggérer de vérifier tes variables avant de les utiliser dans ta requête.

Par exemple, en procédant ainsi :
if (isset($POST['Valider']) )
{
$prenom = isset($_POST['prenom']) ? $_POST['prenom'] : "pas de prénom";
$pseudo = isset($_POST['pseudo']) ? $_POST['pseudo'] : "pas de pseudo";
$tournoi = isset($_POST['tournoi']) ? $_POST['tournoi'] : "pas de tournoi";
$dispo = isset($_POST['dispo']) ? $_POST['dispo'] : "pas de dispo";
$email = isset($_POST['email']) ? $_POST['email'] :  "pas de email";

// On ajoute une entrée avec mysql_query
$req = "INSERT INTO inscriptions (ins_prenom, ins_pseudo, ins_tournoi, ins_dispo, ins_email)
        VALUES ('".$prenom."','".$pseudo."','".$tournoi."','".$dispo."','".$email."')";
echo $req;
$res = mysql_query($req) or die ("Requête échouée");
}
Ainsi, avant même de lancer ta requête, tu la verras telle qu'elle sera envoyée au serveur
et pourras vérifier s'il n'y a pas un schmurtz. ;)

Posté : 28 juin 2009, 14:20
par dunbar
Salut,

A la grosse louche tu déclare tes $variable a condition que la variable
isset($POST['Valider'
Existe mais si tu fais le test suivant
echo '<pre>';
print_r ($_POST);
echo '</pre>';
Dans le fichier traitement_formulaire.php tu remarquera que $POST['Valider'] n'ai pas transmise donc logiquement il ne fais rien :wink:
Rajoute name="Valider"

Posté : 28 juin 2009, 14:26
par omezine
:lol: Merci Albat. Alors j'ai une erreur à la ligne 15 apparemment.

Code : Tout sélectionner

Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in /homepages/26/d210904301/htdocs/tournois/traitement_formulaire.php on line 15
La ligne 15 correspond à cette ligne :
VALUES ('""','".$prenom."','".$pseudo."','".$tournoi."','".$dispo."','".$email."')");
dunbar, je dois retirer la ligne contenant Valider alors ?

Posté : 28 juin 2009, 14:29
par dunbar
Non rajoute simplement ceci
Ta ligne
<input type="submit"  value="Valider" class="button1" />
Correction :
<input type="submit" name="Valider" value="Valider" class="button1" />
Et ça devrais fonctionner, ceci dis suivre également les conseils de ALBAT ne serais pas du luxe :wink:
MAJ :

Parce que quand je regarde ta ligne :
VALUES ('""','".$prenom."','".$pseudo."','".$tournoi."','".$dispo."','".$email."')"); 
Et celle de ALBAT
VALUES ('".$prenom."','".$pseudo."','".$tournoi."','".$dispo."','".$email."')";

Il y a comme une certaine différence :-k

Posté : 28 juin 2009, 14:34
par omezine
Merci, j'ai bien ajouté

Code : Tout sélectionner

name="Valider"
Ainsi que tout le code d'Albat mais malheureusement j'ai toujours l'erreur ligne 15
VALUES ('""','".$prenom."','".$pseudo."','".$tournoi."','".$dispo."','".$email."')");

Posté : 28 juin 2009, 14:36
par dunbar
Merci, j'ai bien ajouté

Code : Tout sélectionner

name="Valider"
Ainsi que tout le code d'Albat mais malheureusement j'ai toujours l'erreur ligne 15
VALUES ('""','".$prenom."','".$pseudo."','".$tournoi."','".$dispo."','".$email."')");
:afraid: :afraid: NOn

9a c'est la ligne de ALBAT
VALUES ('".$prenom."','".$pseudo."','".$tournoi."','".$dispo."','".$email."')"; 
Elle ne correspond pas du tout a la tienne.

Posté : 28 juin 2009, 14:42
par omezine
oups :D je viens de modifier cette ligne.

Alors résultat : page blanche et toujours la base vide :( Alors là je ne comprends vraiment pas !

Posté : 28 juin 2009, 14:50
par dunbar
oups :D je viens de modifier cette ligne.

Alors résultat : page blanche et toujours la base vide :( Alors là je ne comprends vraiment pas !
Montre les deux fichiers stp

Posté : 28 juin 2009, 15:00
par omezine
D'accord.

Voici la page HTML nommée tournoi_formulaire.html :

Code : Tout sélectionner

<div id="page-body"> <form method="post" action="traitement_formulaire.php"> <div class="panel"> <div class="inner"><span class="corners-top"><span></span></span> <h2>Inscription</h2> <fieldset class="fields2"> <dl> <dd><strong>Veuillez remplir le formulaire ci-dessous pour participer au tournoi MySlam.</strong></dd></dl> <dl> <dt><label for="prenom">Prénom :</label></dt> <dd><input type="text" size="25" tabindex="1" name="prenom" class="inputbox autowidth" /></dd> </dl> <dl> <dt><label for="pseudo">Pseudo :</label></dt> <dd><input type="text" size="25" tabindex="2" name="pseudo" class="inputbox autowidth" /></dd> </dl> <dl> <dt><label for="tournoi">Choix du tournoi : </label></dt> <dd><select name="tournoi"> <optgroup label="Tournoi saison 1"> <option value="saison1poule1">Poule 1</option> <option value="saison1poule2">Poule 2</option> </optgroup> <optgroup label="Tournoi saison 2"> <option value="saison2poule1">Poule 1</option> <option value="saison2poule2">Poule 2</option> </select></dd> </dl> <br /> <dl> <dt><label for="dispo">Disponibilités : </label></dt> <dd><input type="checkbox" name="dispo" value="lundi" /> Lundi</dd> </dl> <dl> <dd><input type="checkbox" name="dispo" value="mardi" /> Mardi</dd> </dl> <dl> <dd><input type="checkbox" name="dispo" value="mercredi" /> Mercredi</dd> </dl> <dl> <dd><input type="checkbox" name="dispo" value="jeudi" /> Jeudi</dd> </dl> <dl> <dd><input type="checkbox" name="dispo" value="vendredi" /> Vendredi</dd> </dl> <dl> <dd><input type="checkbox" name="dispo" value="samedi" /> Samedi</dd> </dl> <dl> <dd><input type="checkbox" name="dispo" value="dimanche" /> Dimanche</dd> </dl> <br /> <dl> <dt><label for="email">Adresse email : </label></dt> <dd><input type="text" name="email" size="25" class="inputbox autowidth"/></dd> </dl> </fieldset> <span class="corners-bottom"><span></span></span></div> </div> <div class="panel"> <div class="inner"><span class="corners-top"><span></span></span> <fieldset class="submit-buttons"> <input type="submit" name="Valider" value="Valider" class="button1" /> </fieldset> <span class="corners-bottom"><span></span></span></div> </div> </form> </div>
Ensuite voici mon fichier PHP nommé traitement_formulaire.php :
<?php
mysql_connect("localhost", "login", "motdepasse")  OR die('Erreur de connexion à la base');
mysql_select_db("nomdelabase");

if (isset($POST['Valider']) )
{
$prenom = isset($_POST['prenom']) ? $_POST['prenom'] : "pas de prénom";
$pseudo = isset($_POST['pseudo']) ? $_POST['pseudo'] : "pas de pseudo";
$tournoi = isset($_POST['tournoi']) ? $_POST['tournoi'] : "pas de tournoi";
$dispo = isset($_POST['dispo']) ? $_POST['dispo'] : "pas de dispo";
$email = isset($_POST['email']) ? $_POST['email'] :  "pas de email";

// On ajoute une entrée avec mysql_query
$req = ("INSERT INTO inscriptions (ins_prenom,ins_pseudo,ins_tournoi,ins_dispo,ins_email)
VALUES ('".$prenom."','".$pseudo."','".$tournoi."','".$dispo."','".$email."')");
echo $req;
$res = mysql_query($req) or die ("Requête échouée");

}

mysql_close();
?>
Voici la structure de ma table :

Code : Tout sélectionner

Structure de la table `inscriptions` CREATE TABLE `inscriptions` ( `id` mediumint(9) NOT NULL auto_increment, `ins_prenom` text collate latin1_german2_ci NOT NULL, `ins_pseudo` text collate latin1_german2_ci NOT NULL, `ins_tournoi` text collate latin1_german2_ci NOT NULL, `ins_dispo` text collate latin1_german2_ci NOT NULL, `ins_email` text collate latin1_german2_ci NOT NULL, KEY `id` (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german2_ci AUTO_INCREMENT=1 ;

Posté : 28 juin 2009, 15:27
par micetf
En passant,
je viens de voir ceci qui n'est pas correct :
if (isset($POST['Valider']) ) 
Ce n'est pas $POST mais $_POST donc le code correct est :
if (isset($_POST['Valider']) ) 
Fred