8791 sujets

Développement web côté serveur, CMS

Salut a tous !

Je débute en php et je vous caches pas que je galère pas mal.

Mon idée c'est de faire un formulaire comportant 10 champs:

-civilité
-nom
-prénom
-adresse
-ville
-code postal
-date de naissance
-votre e-mail
-j'ai bien pris connaissance du règlement
-je souhaite rester informé de toutes les actualités

voici mon code html :

<form action="cible.php" method="post"/>

<label for="civilite">civilité :</label><select name="choix" id="civilite">
<option value="choix1">Mr</option>
<option value="choix2">Mme</option>
<option value="choix3">Mlle</option>
</select><br />

<label for="nom">nom* :</label><input type="text" name="nom" id="nom"/><br />

<label for="prenom">prénom* :</label><input type="text" name="prenom" id="prenom"/><br />

<label for="adresse">adresse* :</label><input type="text" name="adresse" id="adresse"/><br />

<label for="ville">ville* :</label><input type="text" name="ville" id="ville"/><br />

<label for="codepostal">code postal* :</label><input type="text" name="codepostal" id="codepostal"/><br />

<label for="datedenaissance">date de naissance* :</label><input type="text" name="datedenaissance" id="datedenaissance"/><br />
<label for="formatdate">jj/mm/aaaa</label><br />

<label for="email">votre e-mail* :</label><input type="text" name="email" id="email"/><br />
<input type="checkbox" name="règlement" id="règlement" /> <label for="règlement">j'ai bien pris connaissance du règlement*</label><br />
<input type="checkbox" name="actu" id="actu" /> <label for="actu">je souhaite rester informé de toutes les actualités</label><br />
<input type="submit" name="DoIt" id="boutonenvoie"/>
</fieldset><br /><br /><br /><br />
</form>


Je souhaiterai récupérer le contenu de ces champs dans une base de donnée (mysql).
En m'inspirant d'exemples trouvés sur le net j'ai fais un fichier php (cible.php) qui à mon avis
n'est pas correct car je ne comprend pas tout ce que je fais Smiley lol

Mon fichier cible.php


<?php
$name = $_POST['choix'];
$name1 = $_REQUEST['choix'];
echo 'name '.$name. ' name1 '.$name1;
$conn = mysql_connect("localhost","root","");
$base = mysql_select_db("unebase");
$sql = "insert into inscription(choix) values ('$name')";
echo '<br />sql '.$sql;
$res = mysql_query($sql,$conn) or die ("requete impossible ".mysql_error());

$name = $_POST['nom'];
$name1 = $_REQUEST['nom'];
echo 'name '.$name. ' name1 '.$name1;
$conn = mysql_connect("localhost","root","");
$base = mysql_select_db("unebase");
$sql = "insert into inscription(nom) values ('$name')";
echo '<br />sql '.$sql;
$res = mysql_query($sql,$conn) or die ("requete impossible ".mysql_error());

$name = $_POST['prenom'];
$name1 = $_REQUEST['prenom'];
echo 'name '.$name. ' name1 '.$name1;
$conn = mysql_connect("localhost","root","");
$base = mysql_select_db("unebase");
$sql = "insert into inscription(prenom) values ('$name')";
echo '<br />sql '.$sql;
$res = mysql_query($sql,$conn) or die ("requete impossible ".mysql_error());

$name = $_POST['adresse'];
$name1 = $_REQUEST['adresse'];
echo 'name '.$name. ' name1 '.$name1;
$conn = mysql_connect("localhost","root","");
$base = mysql_select_db("unebase");
$sql = "insert into inscription(adresse) values ('$name')";
echo '<br />sql '.$sql;
$res = mysql_query($sql,$conn) or die ("requete impossible ".mysql_error());

$name = $_POST['ville'];
$name1 = $_REQUEST['ville'];
echo 'name '.$name. ' name1 '.$name1;
$conn = mysql_connect("localhost","root","");
$base = mysql_select_db("unebase");
$sql = "insert into inscription(ville) values ('$name')";
echo '<br />sql '.$sql;
$res = mysql_query($sql,$conn) or die ("requete impossible ".mysql_error());

$name = $_POST['codepostal'];
$name1 = $_REQUEST['codepostal'];
echo 'name '.$name. ' name1 '.$name1;
$conn = mysql_connect("localhost","root","");
$base = mysql_select_db("unebase");
$sql = "insert into inscription(codepostale) values ('$name')";
echo '<br />sql '.$sql;
$res = mysql_query($sql,$conn) or die ("requete impossible ".mysql_error());

$name = $_POST['datedenaissance'];
$name1 = $_REQUEST['datedenaissance'];
echo 'name '.$name. ' name1 '.$name1;
$conn = mysql_connect("localhost","root","");
$base = mysql_select_db("unebase");
$sql = "insert into inscription(datedenaissance) values ('$name')";
echo '<br />sql '.$sql;
$res = mysql_query($sql,$conn) or die ("requete impossible ".mysql_error());

$name = $_POST['email'];
$name1 = $_REQUEST['email'];
echo 'name '.$name. ' name1 '.$name1;
$conn = mysql_connect("localhost","root","");
$base = mysql_select_db("unebase");
$sql = "insert into inscription(email) values ('$name')";
echo '<br />sql '.$sql;
$res = mysql_query($sql,$conn) or die ("requete impossible ".mysql_error());
?>

Je n'ai pas encore fais ma bdd (unebase) j'aimerais avoir vos avis sur mon code qui ne doit pas etre parfait et aussi savoir si je peu tester en local sous Wamp ?

Merci d'avance !!! jesp que mon post n'est pas trop long Smiley biggrin
Modifié par romain974 (19 Aug 2011 - 17:13)
Normalement Wamp inclut un serveur MySQL, tu devrais pouvoir tester Smiley smile

Ensuite, comme tu le dis, ce code n'est pas parfait. S'il est juste, il a besoin d'un graaaand coup d'optimisation.

Première chose : définir une seule fois les identifiant, mot de passe etc, concernant la bdd.
$host= 'localhost';
$bdd = 'unebase';
$login = 'root';
$mdp = ''; 

Dedans tu mets évidemment les vraies valeurs Smiley cligne

Ensuite, la connexion à la base de donnée susnommée ne doit se faire qu'une fois elle aussi.
$conn = mysql_connect($host,$login,$mdp); 
$base = mysql_select_db($bdd);


Troisièmement, pour des questions de performance, on va lancer une seule grosse requête, avec tout tes champs, plutôt que dix requêtes.
Déjà, on va mettre les valeurs récupérées depuis le formulaire dans des variables appelées $nom, $prenom, $civilite, etc, bref, des noms qui veulent dire quelque chose Smiley biggrin , et ensuite, insérer en une fois.
$query = "INSERT INTO inscription(nom, prenom, etc) VALUES ($nom, $prenom, etc) 

Et le lancement :
$res = mysql_query($sql) or die ("requete impossible ".mysql_error()); 

Pas besoin de préciser $base, la requête se fait sur la connexion ouverte.

Je ne vois pas l'intérêt du $_REQUEST, à dire vrai. $_POST suffit - d'autant que le code que tu écris ici ne le prend pas du tout en compte.

Les divers 'echo' servent à vérifier que ça se passe bien, tu peux les garder - n'oublie pas de les enlever lors de la mise en prod'.

Si tu as d'autres questions n'hésite pas.


(dans un autre registre, tu as oublié le name="civilite" sur la balise select Smiley murf )
Ton code optimisé. J'ai mis des commentaires :


// on utilise les fonctions mysqli_*, mysql_* étant obsolète
$link = mysqli_connect('localhost', 'root', '') or die('Impossible de se connecter : ' . mysql_error());

// protège les données du formulaire avant de les insérer dans la base (évite les injections SQL)
foreach ($_POST as & $v) {
	$v = mysqli_real_escape_string($link, $v);
}

// extraction du tableau POST ($choix = $_POST['choix'], $nom = $_POST['nom'], etc)
extract($_POST);

$sql = "INSERT INTO inscription (choix, nom, prenom, adresse, ville, codepostal, datenaissance, email) VALUES ('$choix', '$nom', '$prenom', '$adresse', '$ville', '$codepostal', '$datenaissance', '$email')";

$res = mysqli_query($sql, $link) or die ('Erreur : ' .mysql_error());

Modifié par jb_gfx (19 Aug 2011 - 18:57)
AkaiKen a écrit :
&quot;extract&quot; ? Je ne connaissais pas cette fonction, mais c'est génial Smiley biggrin !


C'est pratique oui, j'aurais pu utiliser des variables dynamiques aussi :


// on utilise les fonctions mysqli_*, mysql_* étant obsolète 
$link = mysqli_connect('localhost', 'root', '') or die('Impossible de se connecter : ' . mysql_error()); 
 
// protège les données et extrait le tableau POST
foreach ($_POST as $k => $v) { 
    $$k = mysqli_real_escape_string($link, $v);
} 
 
$sql = "INSERT INTO inscription (choix, nom, prenom, adresse, ville, codepostal, datenaissance, email) VALUES ('$choix', '$nom', '$prenom', '$adresse', '$ville', '$codepostal', '$datenaissance', '$email')"; 
 
$res = mysqli_query($sql, $link) or die ('Erreur : ' .mysql_error()); 


C'est plus court ; plus besoin de extract(). Smiley murf
Modifié par jb_gfx (19 Aug 2011 - 21:18)
Dsl de ne pas avoir répondu plus tôt, je cherchais des info et à dire vrai je pataugé grav Smiley ohwell

Je découvre avec plaisir vos coms qui vont bcp m'aider (merci jb_gfx pour ton code optimisé)
je vais le tester de suite en espérant réussir à créé ma bdd proprement car là aussi je ne brille pas.

Je me posé une question sur les champs, comment afficher un message d'erreur si les champs obligatoire ne sont pas rempli correctement ?

Une bonne nuit blanche et je reviens vers vous pour vous tenir au courant en espérant que tout fonctionne Smiley biggrin

Encore merci à tous
Re une petite maj de mon post Smiley smile

voila ou jen suis loin encore apparemment:euh:

voici mes deux fichier

cible.php


<?php
$db=mysql_connect("localhost","mon_login","mon_mot_de_passe"); 
mysql_select_db("ma_base",$db);                                                                                                                                                                                         

$choix = $_POST['choix'];
$nom = $_POST['nom'];
$prenom = $_POST['prenom'];
$adresse = $_POST['adresse'];
$ville = $_POST['ville'];
$poste =$_POST['codepostal'];
$date = $_POST['datedenaissance'];implode('-', array_reverse(explode('/', $date)));
$mail = $_POST['email'];
$choix1 = $_POST['reglement'];
$choix2 = $_POST['actu'];
	  

  // requete d'insertion
      $sql = "INSERT INTO inscription(choix,nom,prenom,adresse,ville,codepostal,datedenaissance,email,reglement,actu) VALUES ('$choix', '$nom', '$prenom', '$adresse', '$ville', '$poste', '$date', '$mail', '$choix1', '$choix2')";
      $var = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
?>


et index.html:


<form action="cible.php" method="post"/>

<label for="civilite">civilité :</label><select name="choix" id="civilite">
<option value="choix1">Mr</option>
<option value="choix2">Mme</option>
<option value="choix3">Mlle</option>
</select><br />

<label for="nom">nom* :</label><input type="text" name="nom" id="nom"/><br />

<label for="prenom">prénom* :</label><input type="text" name="prenom" id="prenom"/><br />

<label for="adresse">adresse* :</label><input type="text" name="adresse" id="adresse"/><br />

<label for="ville">ville* :</label><input type="text" name="ville" id="ville"/><br />

<label for="codepostal">code postal* :</label><input type="text" name="codepostal" id="codepostal"/><br />

<label for="datedenaissance">date de naissance* :</label><input type="text" name="datedenaissance" id="datedenaissance"/><br />
<label for="formatdate">MM/DD/YYYY</label><br />

<label for="email">votre e-mail* :</label><input type="text" name="email" id="email"/><br />
<input type="checkbox" name="reglement" id="reglement" value="off"/> <label for="reglement">j'ai bien pris connaissance du règlement*</label><br />
<input type="checkbox" name="actu" id="actu" value="off"/> <label for="actu">je souhaite rester informé de toutes les actualités</label><br />
<input type="submit" name="DoIt" id="boutonenvoie"/>
</fieldset><br /><br /><br /><br />
</form> 


une capture de ma bdd
http://imageshack.us/photo/my-images/692/ambase.jpg/
et une capture de ma malheureuse erreur
http://imageshack.us/photo/my-images/192/errorki.jpg/

Dois je inserer ton code dans mon fichier cible.php ???
Je nage encore bcp mais je persevere je continu de chercher Smiley biggrin
Modifié par romain974 (21 Aug 2011 - 00:20)
Modérateur
Romain974, tu as oublié d'intégrer la partie importante proposée par jb_gfx avec le commentaire "protège les données du formulaire avant de les insérer dans la base (évite les injections SQL) ". Si tu veux éviter de te faire pirater ton site, il vaut mieux que tu y porte une attention particulière.
Modifié par Tony Monast (21 Aug 2011 - 15:48)