Problème d'insert dans la bdd

Résolu/Fermé
Riwalenn Messages postés 364 Date d'inscription jeudi 25 août 2005 Statut Membre Dernière intervention 16 février 2015 - 24 août 2010 à 15:20
Riwalenn Messages postés 364 Date d'inscription jeudi 25 août 2005 Statut Membre Dernière intervention 16 février 2015 - 24 août 2010 à 18:41
Bonjour,
voilà j'ai crée un formulaire d'inscription pour ma zone membre où les gens doivent renseignez : nom, prenom, genre, login, password, email, telephone, adresse, etc....

lorsque le membre valide son formulaire, je n'ai que 2 valeurs qui s'insèrent dans la base de donnée le password et le niveau du membre :(

le formulaire d'inscription avec un select au début pour voir le genre bien entendu :
<FORM NAME="zm_insc" ACTION="create_session.php" METHOD="GET" enctype="multipart/form-data">
		<p class="insc_txtform">Identifiant :</p><INPUT TYPE="text" NAME="user" SIZE="30" MAXLENGTH="40" ;" class="insc_boxes"><br />
		<p class="insc_txtform">Email :</p><INPUT TYPE="text" NAME="mail" SIZE="30" MAXLENGTH="40" ;" class="insc_boxes"><br />
		<p class="insc_txtform">Mot de passe:</p><INPUT TYPE="text" NAME="pwd" SIZE="30" MAXLENGTH="40" ;" class="insc_boxes"><br />
		<p class="insc_txtform">Nom:</p><INPUT TYPE="text" NAME="Nom" SIZE="30" MAXLENGTH="40" ;" class="insc_boxes"><br />
		<p class="insc_txtform">Prénom:</p><INPUT TYPE="text" NAME="Prenom" SIZE="30" MAXLENGTH="40" ;" class="insc_boxes"><br />
		<SELECT name="genre" class="greenboxes">
            <?php while($row_genre=mysql_fetch_array($results_genre)){?>
             <OPTION value="<?php echo $row_genre['id_genre'] ;?>"><?php echo $row_genre['genre'] ;?></OPTION>
             <?php } ?></SELECT> <br />
		<p class="insc_txtform">Adresse:</p><INPUT TYPE="text" NAME="adresse" SIZE="30" MAXLENGTH="40" ;" class="insc_boxes"><br />
		<p class="insc_txtform">Ville:</p><INPUT TYPE="text" NAME="ville" SIZE="30" MAXLENGTH="40" ;" class="insc_boxes"><br />
		<p class="insc_txtform">Code Postal:</p><INPUT TYPE="text" NAME="cp" SIZE="30" MAXLENGTH="40" ;" class="insc_boxes"><br />
		<p class="insc_txtform">Téléphone:</p><INPUT TYPE="text" NAME="tel" SIZE="30" MAXLENGTH="40" ;" class="insc_boxes"><br />
		<INPUT TYPE="submit" VALUE="Valider" name="valid" id="ok">
	</form>


----------------------------------------

le fichier create_session.php :
<?php
session_start();
$_SESSION['formulaire']=array("genre"=>$_POST['genre'],"Nom"=>$_POST['Nom'],"Prenom"=>$_POST['Prenom'],"adresse"=>$_POST['adresse'],
"cp"=>$_POST['cp'],"ville"=>$_POST['ville'],"tel"=>$_POST['tel'],"user"=>$_POST['user'],
"pwd"=>md5($_POST['pwd']),"pwd_sans_crypt"=>$_POST['pwd'],"mail"=>$_POST['mail']);

header("Location: ajout_membres.php");
?>


------------------------------------
le fichier ajout_membres.php
<?php
include "connexion.php";
session_start();
$formulaire=$_SESSION['formulaire'];

/////////INSERT DANS LA TABLE CLIENTS///////////

$req_insert_clients="INSERT INTO clients VALUES (NULL,'".$formulaire['Nom']
."','".$formulaire['Prenom']."',".$formulaire['genre'].",'".$formulaire['adresse']
."','".$formulaire['ville']."','".$formulaire['cp'].",'".$formulaire['tel']."')";

$results_insert_user= mysql_query($req_insert_clients);

/////////INSERT DANS LA TABLE LOGIN///////////

$req_insert_login="INSERT INTO login VALUES (NULL,'".$formulaire['user'].
"','".$formulaire['mail']."','".$formulaire['pwd']."',2);";
$results_insert_login= mysql_query($req_insert_login);
	

header("Location:ajoutreussi.php");
?>


--------------------------
ajoutreussi.php donne juste un message à l'utilisateur comme quoi il est bien inscrit.

et donc j'ai juste ce code qui s'insert dans la bdd
'".$formulaire['pwd']."',2);";
je comprends pas pourquoi ces deux-là Oo et pas les autres... un problème de structure des tables ?

cordialement,
Riwalenn

7 réponses

Smoking bird Messages postés 870 Date d'inscription mardi 11 mars 2008 Statut Membre Dernière intervention 10 juillet 2011 58
24 août 2010 à 15:49
Malheureux! mais que n'as tu pas fait??!!

commence par rectifier le tir: tu passes le minimum dans ta variable session, et tu ne passes que du crypté de préférence. Tes sessions ne sont pas sécurisées, un pirate peut les lire et les modifier sans trop de problème, et du coup s'incruster dans ton site sans y être invité. A éviter à tout prix donc :), commence par corriger ça :).

Ensuite, pour tes insert, un rappel des champs auxquels tu va attribuer les valeurs listées dans values() est plutôt recommandé, pour des raisons de sécurité et de solidité du script. J'ajouterais que ta concaténation normalement est inutile, tente ceci:

$s="insert into table ( 'champ1') values ( '$formulaire[champ1]') limit 1"

Ca devrait fonctionner^^, mais par contre " values ('$formulaire[champ1][champ2]')" comprendra le [champ2] comme une chaîne et non comme une partie de la variable.

Pour ton problème, remplace method=get par method=post dans ton formulaire, ça devrait si ça ne règle pas le problème, au moins faire avancer les choses^^.

D'après tes scripts, '".$formulaire['pwd']."',2);"; s'inscrit dans ta bdd d'abord parce que 2 n'est pas une variable du formulaire, ensuite parce que tu as effectué une fonction sur la variable pwd avant d'affecter le résultat de cette même fonction à cette même variable. Il y a donc de fortes chances que cette variable dans l'état actuel des choses ne contienne jamais ce qui t'intéresse.

1
Riwalenn Messages postés 364 Date d'inscription jeudi 25 août 2005 Statut Membre Dernière intervention 16 février 2015 101
24 août 2010 à 15:22
structure table login :

 Champ  	Type  	Interclassement  	Attributs  	Null  	Défaut  	Extra  	Action
	id_login 	int(8) 		UNSIGNED 	Non 	Aucun 	auto_increment 	Affiche les valeurs distinctes 	Modifier 	Supprimer 	Primaire 	Unique 	Index 	Texte entier

	user 	varchar(20) 	latin1_swedish_ci 		Non 	Aucun 		Affiche les valeurs distinctes 	Modifier 	Supprimer 	Primaire 	Unique 	Index 	Texte entier

	mail 	varchar(50) 	latin1_swedish_ci 		Non 	Aucun 		Affiche les valeurs distinctes 	Modifier 	Supprimer 	Primaire 	Unique 	Index 	Texte entier

	pwd 	varchar(50) 	latin1_swedish_ci 		Non 	Aucun 		Affiche les valeurs distinctes 	Modifier 	Supprimer 	Primaire 	Unique 	Index 	Texte entier

	level 	tinyint(3) 		UNSIGNED 	Non 	0 		Affiche les valeurs distinctes 	Modifier 	Supprimer 	Primaire 	Unique 	Index 	Texte entier
0
Riwalenn Messages postés 364 Date d'inscription jeudi 25 août 2005 Statut Membre Dernière intervention 16 février 2015 101
24 août 2010 à 16:05
Bon j'ai fait un
$sql_insert_clients="INSERT INTO clients (Nom,Prenom,genre,adresse,ville,cp,tel) VALUES('".$_POST['Nom']."','".$_POST['Prenom']."','".$_POST['genre']."','".$_POST['adresse']."','".$_POST['ville']."','".$_POST['cp']."','".$_POST['tel']."');";
$results= mysql_query($sql_insert_clients);

$sql_insert_login="INSERT INTO login (user,mail,pwd,level) VALUES('".$_POST['user']."','".$_POST['mail']."','".$_POST['pwd']."','2');";
$results_login=mysql_query($sql_insert_login);
header("Location:ajoutreussi.php");


sans passer par le fichier create_session.php donc du coup ça m'a tout inseré même le mot de passe mais pas crypté...

Pour ce qui est de la securité, pour moi tout ça c'est nouveau et j'ai pas trop compris... je pense que je demanderais à mon prof à la rentrée pour qu'il m'explique cette partie (comment sécuriser mes données)...

merci pour tes explications (enfin j'aurais pû le faire mais c'est vrai que je me suis bien compliquée la vie avec la création de session ^^')
0
Smoking bird Messages postés 870 Date d'inscription mardi 11 mars 2008 Statut Membre Dernière intervention 10 juillet 2011 58
24 août 2010 à 17:04
no probs^^

Théoriquement, ton programme est fragile à chaque endroit où des données transmises par l'utilisateur transitent. Ca comprend donc, les liens, les données des formulaires, les sessions, les fichiers envoyés^^ pour commencer. C'est pour ça qu'il faut limiter ces données au strict nécessaire, et filtrer à tous prix ce nécessaire. Les données que tu transmettais en $_SESSION sont particulièrement exposées, ce qui est fâcheux pour des identifiants, se contenter d'un formulaire et d'un traitement sur les données formulaires est donc l'attitude à adopter. Ton prof te parlera notamment à l'avenir (j'espère:D) de la programmation orientée objet, ce qui te permettra d'automatiser toutes ces tâches et de faire un travail d'une qualité autrement plus intéressante. Par exemple, grâce à la POO, à chaque formulaire envoyé et chaque page ouverte, mes données sont analysées et triées, et mes requêtes sql sont automatisées et obéissent à des règles de sécurité générales sans que j'ai à me prendre le chou sur chaque formulaire à traiter^^ que du bonheur pour mes scripts^^.

Pour le moment, tes modifications améliorent ton script, mais il te faudra aller plus loin^^

par exemple, utiliser une fonction de ce type:

function traitement_Post(){

foreach( $_POST as $k=> $v){

$_POST[$k]=addslashes($v);

}

}


Cette fonction assez lamba effectue la fonction addslashes sur toutes les variables qui viennent de ton formulaire, c'est une première étape pour éviter les attaques en sql, car ça ajoute un slash devant les apostrophes^^. Tu peux librement utiliser tes variables $_POST par la suite, car elles seront un peu mieux protégées^^

La sécurisation des données est un domaine vraiment très vaste^^, je ne saurais que trop t'encourager à commencer à te renseigner par toi même, car ton prof n'apportera pas nécessairement toutes les réponses dont tu auras besoin. En tout cas, j'espère que ces quelques petites explications t'aideront :o)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Riwalenn Messages postés 364 Date d'inscription jeudi 25 août 2005 Statut Membre Dernière intervention 16 février 2015 101
24 août 2010 à 17:53
Je te remercie pour ces explications mais en fait la POO on l'a vu en cours ^^' seulement j'ai rien compris à la partie SQL donc du coup pour insérer des données en POO ben c'est coton -_-' Vu que mon projet doit être fini à une date butoire trés proche, je peux pas me pencher sur le sujet... je verrais à la rentrée peut-etre que le prof pourra me réexpliquer l'insertion des données via POO ^^
0
Smoking bird Messages postés 870 Date d'inscription mardi 11 mars 2008 Statut Membre Dernière intervention 10 juillet 2011 58
24 août 2010 à 18:37
oki doki^^ bon courage pour ton projet alors^^:)
0
Riwalenn Messages postés 364 Date d'inscription jeudi 25 août 2005 Statut Membre Dernière intervention 16 février 2015 101
24 août 2010 à 18:41
merci :)
0