Bonjour,
Une question bete, on écris comment une requete INSERT TO avec des variables $_POST ?
Je sais les écrire avec des concaténations mais j'ai lu sur ce forum que c'était déconseillé...
Merci
Arnaud
Version imprimable
Bonjour,
Une question bete, on écris comment une requete INSERT TO avec des variables $_POST ?
Je sais les écrire avec des concaténations mais j'ai lu sur ce forum que c'était déconseillé...
Merci
Arnaud
C'est déconseillé parce que tu risques de te retrouver avec des injections SQL.
Pour éviter ca il faut utiliser la fonction mysql_real_escape_string() sur chaque paramètre de $_POST utilisé dans ta requete. Exemple
EDIT : Celira : c'est pas ma faute, mets toi aux expressions régulières je te laisserai tous ces posts là ^^ :mrgreen:Code:
1
2 $requete = "Select monchamp from matable where nom ='". mysql_real_escape_string($_POST['nom']) ."' and prenom ='" . mysql_real_escape_string($_POST['prenom']) ."'";
Bonjour
Ce qui est déconseillé, c'est de mettre le contenu brut de la variable post. On ne sait jamais ce qu'un couillon mal intentionné peut écrire dans un champ text :roll:
Pour éviter l'interprétation de code, tu peux utiliser une fonction comme mysql_real_escape_string, qui va ajouter des slashes un peu partout.
EDIT : koo ! arrête de poster de la même chose que moi en même temps que moi :aie:
Et je n'y connais pas grand-chose en regex, alors je te laisse le monopole ;)
mysql_real_escape_string empeche aussi les insertion genre javascript ou il faut utiliser en plus htmlentities? :?
Non, c'est à vous de le filtrer suivant vos besoins (strip_tags, preg_replace pour supprimer certaines balises, ...).Citation:
Envoyé par Asmodean
Je vous recommande cet article : Développement web : généralités sur la sécurité.
ah ok, je ne savais pas !
mais dans mon code, deja je crois que la syntaxe n'est pas bonne :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 <?php $requete = "INSERT INTO inventaire_server VALUES ( '', '".strtoupper(presVar($_POST['inventaire_server_hostname'])."', '".presVar($_POST['inventaire_server_ip'])."', '".strtoupper(presVar($_POST['inventaire_server_numero_serie']))."', '".presVar($_POST['modele'])."', '".presVar($_POST['inventaire_server_id_os'])."', '".presVar($_POST['inventaire_server_type'])."', '".presVar($_POST['inventaire_server_mise_service'])."', '".presVar($_POST['inventaire_server_id_situation'])."', '".presVar($_POST['inventaire_server_date_reception'])."', '".presVar($_POST['inventaire_server_numero_reception'])."', '".presVar($_POST['inventaire_server_id_batiment'])."', '".presVar($_POST['inventaire_server_id_etage'])."', '".presVar($_POST['inventaire_server_commentaire_server'])."', '".presVar($_POST['inventaire_server_id_inventaire_server_id_contrat_maintenance'])."', '".presVar($_POST['inventaire_server_contrat_date_du'])."', '".presVar($_POST['inventaire_server_contrat_date_au'])."', '".presVar($_POST['inventaire_server_responsable_appli_prenom'])."', '".presVar($_POST['inventaire_server_responsable_appli_tel'])."', '".presVar($_POST['inventaire_server_responsable_appli_nom'])."', '".presVar($_POST['prenom'])."'"; ?>
Question : que fait la fonction presVar ?
Sinon, côté syntaxe de la requête ça a l'air correct. Je te conseille un affichage des erreurs lors de l'execution de la requête...
Code:mysql_query($requete) or die ($requete.' : '.mysql_error());
la fonction fais ca :
Code:
1
2
3
4 function presVar($inPost, $inName) { echo (isset($inPost[$inName]) && !empty($inPost[$inName]))?$inPost[$inName]:''; }
c'est pour éviter les erreurs SQL si jamais j'ai un des champs qui est non renseigné. A moins qu'il existe une autre méthode...
Tu appelle mal la fonction...maintenant que tu as changé le prototype ca marche comme ca :
Code:presVar($_POST,'inventaire_server_id_situation')
c'est bizarre, sur PHPEdit, niveau coloration syntaxique, c'est comme si j'avais une erreur de syntaxe...
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 $requete = "INSERT INTO inventaire_server VALUES ( '', '" . strtoupper(presVar($_POST,'inventaire_server_hostname')) . "', '" . presVar($_POST,'inventaire_server_ip') . "', '" . strtoupper(presVar($_POST,'inventaire_server_numero_serie')) . "', '" . presVar($_POST,'modele') . "', '" . presVar($_POST,'inventaire_server_id_os') . "', '" . presVar($_POST,'inventaire_server_type') . "', '" . presVar($_POST,'inventaire_server_mise_service') . "', '" . presVar($_POST,'inventaire_server_id_situation') . "', '" . presVar($_POST,'inventaire_server_date_reception') . "', '" . presVar($_POST,'inventaire_server_numero_reception') . "', '" . presVar($_POST,'inventaire_server_id_batiment') . "', '" . presVar($_POST,'inventaire_server_id_etage') . "', '" . presVar($_POST,'inventaire_server_commentaire_server') . "', '" . presVar($_POST,'inventaire_server_id_inventaire_server_id_contrat_maintenance') . "', '" . presVar($_POST,'inventaire_server_contrat_date_du') . "', '" . presVar($_POST,'inventaire_server_contrat_date_au') . "', '" . presVar($_POST,'inventaire_server_responsable_appli_prenom') . "', '" . presVar($_POST,'inventaire_server_responsable_appli_tel') . "', '" . presVar($_POST,'inventaire_server_responsable_appli_nom') . "', '" . presVar($_POST,'prenom') . "'";
A non, ca a laire de fonctionner en compilant...
bizarre !
merci de votre aide !
thank !
Arnaud