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

Eléphanteau du PHP | 12 Messages

28 juin 2009, 03:24

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();
?>

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

28 juin 2009, 09:54

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."')"
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 12 Messages

28 juin 2009, 13:53

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 ;

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

28 juin 2009, 14:07

$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."')";

Eléphanteau du PHP | 12 Messages

28 juin 2009, 14:11

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

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

28 juin 2009, 14:17

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. ;)

ViPHP
ViPHP | 2291 Messages

28 juin 2009, 14:20

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"
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

Eléphanteau du PHP | 12 Messages

28 juin 2009, 14:26

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

ViPHP
ViPHP | 2291 Messages

28 juin 2009, 14:29

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
Modifié en dernier par dunbar le 28 juin 2009, 14:30, modifié 1 fois.
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

Eléphanteau du PHP | 12 Messages

28 juin 2009, 14:34

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."')");

ViPHP
ViPHP | 2291 Messages

28 juin 2009, 14:36

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.
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

Eléphanteau du PHP | 12 Messages

28 juin 2009, 14:42

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 !

ViPHP
ViPHP | 2291 Messages

28 juin 2009, 14:50

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
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

Eléphanteau du PHP | 12 Messages

28 juin 2009, 15:00

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 ;

Eléphant du PHP | 65 Messages

28 juin 2009, 15:27

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