Problème d'insert dans la bdd
Résolu
Riwalenn
Messages postés
364
Date d'inscription
Statut
Membre
Dernière intervention
-
Riwalenn Messages postés 364 Date d'inscription Statut Membre Dernière intervention -
Riwalenn Messages postés 364 Date d'inscription Statut Membre Dernière intervention -
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 :
----------------------------------------
le fichier create_session.php :
------------------------------------
le fichier ajout_membres.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
cordialement,
Riwalenn
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
A voir également:
- Problème d'insert dans la bdd
- Touche insert - Guide
- Disk boot failure insert system disk and press enter - Guide
- Activer touche insert sur ASUS UX32A - Forum Clavier
- Touche insert sur clavier portable hp ✓ - Forum Clavier
- Reboot and select proper boot device or insert boot media in selected boot device and press a key ✓ - Forum PC portable
7 réponses
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.
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.
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
Bon j'ai fait un
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 ^^')
$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 ^^')
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:
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)
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)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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 ^^