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

PHP & Base de données Discussion :

Pb d'une requête insert quand il y a un ' dans un champs de texte [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 177
    Points : 65
    Points
    65
    Par défaut Pb d'une requête insert quand il y a un ' dans un champs de texte
    Bonjour,

    Voilà ma requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    INSERT INTO complaint(Complaint_reception_date, Description, Incident_Request_number, Natco, LOS, 	Complainant_name, Recording_date, Recording_time, Complaint_year, Complaint_number, Status, Recorded_by) VALUES ('$DateRec','$Desc','$IncNb','$Natco','$Los','$CompName','$CurrentDate','$CurrentTime','$CurrentYear','$NbC','Opened','$User')
    $Desc est définit grâce à un TEXTAREA donc c'est un texte complet, sauf que dès que je saisis un ' dans ce texte ben la requête ne veut plus d'exécuter. Il fois bien y avoir un moyen non ?

    Si l'utilisateur rentre dans le champs description :
    Test de l'impression

    Le ' entre le l et le i fait planter ma requête...

  2. #2
    Membre actif Avatar de stolx_10
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2006
    Messages
    374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 374
    Points : 270
    Points
    270
    Par défaut
    Il faut utiliser la méthode addslashes sur ta variable contenant le texte.

    par exemple

    $texte = addslashes($_POST['variable']);

  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 21
    Points : 20
    Points
    20
    Par défaut
    Il faut que tu fasse une petite fonction de substitution qui remplace ' par un espace par exemple. Et cette fonction tu l'applique sur tous les champs qui sont suceptible de contenir ' .

  4. #4
    Membre habitué
    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2005
    Messages : 161
    Points : 193
    Points
    193
    Par défaut
    ya une fonction PHP pour regler ce probleme.

    avant d'inserer dans la base
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $Desc = addslashes($Desc) // $Desc = Test de l\'impression
    et au moment ou tu affiches les données
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $Desc = stripslashes($Desc)
    addslashes() rajoute des \ devant les ' et "
    stripslashes() les retire

  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 777
    Points
    17 777
    Par défaut
    Citation Envoyé par MadCat34
    ya une fonction PHP pour regler ce probleme.

    avant d'inserer dans la base
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $Desc = addslashes($Desc) // $Desc = Test de l\'impression
    C'est vrai sauf que vous ne conseillez pas la plus adéquate : mysql_real_escape_string (la connexion à la base doit avoir été établie au préalable) !

    stripslashes n'est pas réellement nécessaire, car l'application de mysql_real_escape_string ne s'impose que lors de l'utilisation des données dans une requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $req = mysql_query(sprintf('SELECT * FROM ma_table WHERE description LIKE \'%%s%\'', mysql_real_escape_string($_POST['desc'])));

  6. #6
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 177
    Points : 65
    Points
    65
    Par défaut
    Ok voilà ce que j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $result2=mysql_query(sprintf("INSERT INTO complaint(Description, Complaint_reception_date, Incident_Request_number, Natco, LOS, 	Complainant_name, Recording_date, Recording_time, Complaint_year, Complaint_number, Status, Recorded_by) VALUES ('$DateRec',\'%s\','$IncNb','$Natco','$Los','$CompName','$CurrentDate','$CurrentTime','$CurrentYear','$NbC','Opened','$User')",mysql_real_escape_string("$Desc", "$lien"),"$DateRec", "$IncNb","$Natco","$Los","$CompName","$CurrentDate","$CurrentTime","$CurrentYear","$NbC",'Opened',"$User"));
    Et voilà mon erreur :

    Warning: mysql_real_escape_string() expects parameter 2 to be resource, string given in c:\home\easyphp1-8\www\treatcreate.php on line 66

  7. #7
    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 777
    Points
    17 777
    Par défaut
    Si $lien fait référence à la connexion MySQL il faut enlever les quotes pour qu'il n'y est pas interpolation de la variable (vous obtenez ainsi une chaîne de caractères à la place d'une ressource d'où le message d'erreur) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_real_escape_string("$Desc", $lien)
    En général, nous n'avons pas besoin d'utiliser ce paramètre (qui est facultatif) surtout pour les personnes qui n'établissent qu'une seule connexion MySQL.

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

Discussions similaires

  1. longueur max d'une requète INSERT
    Par awalter1 dans le forum Oracle
    Réponses: 2
    Dernier message: 03/11/2006, 12h53
  2. [ODBC] Faire une requête INSERT, DELETE, UPDATE
    Par avogadro dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 21/09/2006, 11h35
  3. [VBA] difficultés avec une requête INSERT
    Par elias dans le forum Access
    Réponses: 7
    Dernier message: 06/09/2005, 14h53
  4. Réponses: 4
    Dernier message: 05/04/2005, 18h28
  5. Problème sur une requête INSERT
    Par Marion dans le forum Langage SQL
    Réponses: 3
    Dernier message: 17/06/2003, 08h45

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