IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Ecrire une requete INSERT avec des variables $_POST [Fait] [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut Ecrire une requete INSERT avec des variables $_POST
    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

  2. #2
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $requete = "Select monchamp from matable where nom ='". mysql_real_escape_string($_POST['nom']) ."' and prenom ='" . mysql_real_escape_string($_POST['prenom']) ."'";
    EDIT : Celira : c'est pas ma faute, mets toi aux expressions régulières je te laisserai tous ces posts là ^^

  3. #3
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    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
    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
    Et je n'y connais pas grand-chose en regex, alors je te laisse le monopole
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  4. #4
    Membre averti Avatar de Asmodean
    Profil pro
    Inscrit en
    Février 2006
    Messages
    311
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 311
    Points : 378
    Points
    378
    Par défaut
    mysql_real_escape_string empeche aussi les insertion genre javascript ou il faut utiliser en plus htmlentities?
    Such is the situation in our Fallen Galaxy

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    Citation Envoyé par Asmodean
    mysql_real_escape_string empeche aussi les insertion genre javascript
    Non, c'est à vous de le filtrer suivant vos besoins (strip_tags, preg_replace pour supprimer certaines balises, ...).

    Je vous recommande cet article : Développement web : généralités sur la sécurité.

  6. #6
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    ah ok, je ne savais pas !

    mais dans mon code, deja je crois que la syntaxe n'est pas bonne :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    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'])."'";
    ?>

  7. #7
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    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 php : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_query($requete) or die ($requete.' : '.mysql_error());
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  8. #8
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    la fonction fais ca :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    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...

  9. #9
    Membre averti Avatar de Asmodean
    Profil pro
    Inscrit en
    Février 2006
    Messages
    311
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 311
    Points : 378
    Points
    378
    Par défaut
    Tu appelle mal la fonction...maintenant que tu as changé le prototype ca marche comme ca :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    presVar($_POST,'inventaire_server_id_situation')
    Such is the situation in our Fallen Galaxy

  10. #10
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    c'est bizarre, sur PHPEdit, niveau coloration syntaxique, c'est comme si j'avais une erreur de syntaxe...

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    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') . "'";

  11. #11
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    A non, ca a laire de fonctionner en compilant...

    bizarre !

    merci de votre aide !

    thank !

    Arnaud

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. syntaxe requete mysql avec des variables
    Par harlock59 dans le forum Requêtes
    Réponses: 2
    Dernier message: 29/09/2006, 17h53
  2. [Unix][9i] insert avec des variable ($) sous Korn Shell
    Par weejungle dans le forum Oracle
    Réponses: 1
    Dernier message: 20/09/2006, 12h41
  3. Réponses: 5
    Dernier message: 23/06/2006, 15h04
  4. passer une requete ajout avec des enregitrement null
    Par LesLemmings dans le forum Requêtes et SQL.
    Réponses: 15
    Dernier message: 13/06/2006, 15h20
  5. effectuer une requete insert avec 'values' ET 'select'
    Par delaio dans le forum Bases de données
    Réponses: 4
    Dernier message: 15/08/2004, 19h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo