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 :

fonction Mysql_real_escape_string sous PHP


Sujet :

Langage PHP

  1. #1
    Membre confirmé Avatar de alain78
    Homme Profil pro
    retraité
    Inscrit en
    Mai 2008
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 160
    Par défaut fonction Mysql_real_escape_string sous PHP
    Bonjour,

    Voici une erreur que je ne trouve pas et que je n'explique pas.
    Y voyez vous une explication ?
    Merci

    Dans un formulaire un champs de saisie utilisateur se nomme 'entite_nom'.
    Je récupère ce nom puis je le traite avec la fonction mysql_real_escape_string
    Puis je l'affiche (ma fonction message()).
    Lorsque entite_nom saisi par l'utilisateur est 'Région d'Alsace' le message affiché est "Région d\'Alsace" ce qui correspond à ce que j'attend.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    	$nom_long=mysql_real_escape_string($_POST['entite_nom']);
    	message($nom_long);
    Immédiatement après, je souhaite enregistrer le champs saisi dans ma table sql debug.

    La requête 1 ne fonctionne pas alors que la requête 2 fonctionne ce qui me prouve la bonne connexion à la table.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    base_connect();
    $sql1="INSERT into debug (`c2`,`c3`) VALUES ('nom1','mysql_real_escape_string({$_POST['entite_nom']})')";
    mysql_query($sql1);
     
    $sql2="INSERT into debug (`c2`,`c3`) VALUES ( 'nom1','')";
    mysql_query($sql2);
    Je ne comprends pas pourquoi la requête 1 ne fonctionne pas puisque :
    - la fonction mysql_real_escape_string fonctionne
    - la connexion à la table debug fonctionne.

  2. #2
    Membre Expert
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Par défaut
    Salut,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $sql1="INSERT into debug (`c2`,`c3`) VALUES ('nom1','".mysql_real_escape_string($_POST['entite_nom'])."')";
    ?

  3. #3
    Membre confirmé Avatar de alain78
    Homme Profil pro
    retraité
    Inscrit en
    Mai 2008
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 160
    Par défaut Cela ne fonctionne pas.
    Merci mais cette ligne ne fonctionne pas.

    Par contre le code ci dessous (anormal) fonctionne. C'est anormal car j'utilise 2 fois la fonction !!!

    Pourquoi cela fonctionne t il ? Je ne sais pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    	$nom_long=mysql_real_escape_string($_POST['entite_nom']);
    	$nom_long=mysql_real_escape_string($nom_long);
     
    $sql1="INSERT into `debug` (`c2`,`c3`) VALUES ('nom1','$nom_long')";
    mysql_query($sql1);

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    La syntaxe fournie pas eric2a est bonne.

    "Ca ne fonctionne pas" n'est pas suffisant pour t'aider.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo mysql_error() . "<br/>" . $sql1;
    après ta requête pourra nous en dire plus.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre confirmé Avatar de alain78
    Homme Profil pro
    retraité
    Inscrit en
    Mai 2008
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 160
    Par défaut
    Effectivement le code fourni par Eric2a est correct (excuses).

    Maintenant l'affaire se complexifie.

    La fonction mysql_error() me retourne une valeur saisie correcte.
    Exemple si je saisi d'allemagne , mysql_error() me retourne d\allemagne.

    Mais dans ma table debug, c'est d'allemagne qui est affiché ?

    S'agirait-il d'une anomalie chez mon hébergeur (Infomaniak) ?

    Merci à sabotage.

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Je ne comprend pas bien ce que tu décris, si tu as une erreur dans le mysql_error() tu n'as rien d'inseré dans ta table.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre confirmé Avatar de alain78
    Homme Profil pro
    retraité
    Inscrit en
    Mai 2008
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 160
    Par défaut Mysql_error() est correct
    Mysql_error() est correct puisqu'il me restitue d\'allemagne c'est à dire ma saisie échappée.

    Je sais qu'il s'agit de l'écriture dans la table qui ne fonctionne pas et je ne sais pourquoi.

    J'ai simplement remarqué que l'écriture dans la table fonctionne lorsque j'applique 2 fois consécutivement la fonction mysql_real_escape_string()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    $var=$_POST['valeur_saisie'];
    $var= mysql_real_escape_string(var);
    $var= mysql_real_escape_string(var);
    Dans ce cas ma table enregistre bien la valeur saisie échappée.
    J'interroge l'hébergeur (infomaniak) par ailleurs.

    Avez vous déjà rencontré ce problème?

  8. #8
    Membre Expert
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Par défaut
    Peut-être est-ce dû aux guillemets magiques qui sont activés ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $nom=(isset($_POST['entite_nom']))?$_POST['entite_nom']:'';
    if(@get_magic_quotes_gpc()===1)$nom=stripslashes($nom);
     
    $sql1="INSERT into debug (`c2`,`c3`) VALUES ('nom1','".mysql_real_escape_string($nom)."')";
    Ca vaut le coup d'essayer en tous cas

  9. #9
    Membre confirmé Avatar de alain78
    Homme Profil pro
    retraité
    Inscrit en
    Mai 2008
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 160
    Par défaut magic_quotes est off
    Citation Envoyé par Eric2a Voir le message
    Peut-être est-ce dû aux guillemets magiques qui sont activés ?
    Merci Eric2a mais ton code n'est pas plus efficient car Phpinfo me confirme que chez l'hébergeur, magic_quotes_gpc est off.

    Je continue ma recherche et vous tiendrai informés.

    PS : chez un autre hébergeur, mon code fonctionne bien ce qui me confirme l'origine du problème chez l'hébergeur actuel.

  10. #10
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Si tu nous donnais l'intégralité des informations fournis par mon debugage, ca serait plus simple.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  11. #11
    Membre confirmé Avatar de alain78
    Homme Profil pro
    retraité
    Inscrit en
    Mai 2008
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 160
    Par défaut Code exemple
    Voici le code sachant que bouton_enregistrer() est une fonction qui intègre un bouton de type submit dont le nom est valid et base_connect() est une fonction qui établi la connexion à la bdd.

    Code : 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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    <?php
    session_start();
     
    base_connect();
     
     
     
    echo "<form NAME='form1' TARGET='_self' method='post' action={$_SERVER['PHP_SELF']}>";
    //if (isset($_POST['nom'])) { $nom=$_POST['nom'];}
     
    echo "<div ID='layer2' STYLE='margin:5; padding:1; border-width:1pt; border-color:blue; border-style:solid;background-color:{$_SESSION['couleur_fenetre']};width:30%; height:; position:absolute; left:10%; top:15%; z-index:1';'>";
    tabu(1);echo "NOM"; echo "<BR><center>";
    echo "<input TYPE='text' NAME='nom' SIZE=65% STYLE='background-color:{$_SESSION['couleur_champ1']};  ' VALUE=\"$nom\">";
    echo "<BR></center>";
    echo "</div>";
     
    bouton_enregistrer("SOUMETTRE");
    echo "</form>";
     
    if (isset($_POST['valid'])) {
     
    		$nom=($_POST['nom']);
    //  $_POST['nom'] est inconnu par la requete $sql_0
    			$sql_0="INSERT into debug (`c2`,`c3`) VALUES ('req0','{$_POST['nom']})'";
    			mysql_query($sql_0);
     
    // la fonction mysql_real_escape_string ne fonctionne pas
    			$sql_3="INSERT into debug (`c2`,`c3`) VALUES ('req3','".mysql_real_escape_string($nom)."')";
    			mysql_query($sql_3);		
     
    		$nom=mysql_escape_string($nom);
    // la fonction mysql_real_escape_string ne fonctionne pas
    			$sql_1="INSERT into debug (`c2`,`c3`) VALUES ('req1','$nom')";
    			mysql_query($sql_1);
     
    // la fonction mysql_real_escape_string ne fonctionne pas
    			$sql_2="INSERT into debug (`c2`,`c3`) VALUES ('req2','".mysql_real_escape_string($_POST['nom'])."')";
    			mysql_query($sql_2);
     
    // la fonction mysql_real_escape_string fonctionne mais elle a été utilisé 2 fois sur la même variable
    			$nom=mysql_escape_string($nom);
    			$sql_4="INSERT into debug (`c2`,`c3`) VALUES ('req4','$nom')";
    			mysql_query($sql_4);
     
    }
     
    ?>

  12. #12
    Membre confirmé Avatar de alain78
    Homme Profil pro
    retraité
    Inscrit en
    Mai 2008
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 160
    Par défaut eureka tout est dans php_flag magic_quotes_gpc On
    Enfin, j'ai trouvé le pourquoi du problème et la solution.
    J'espère que cela pourra servir à quelqu'un d'autre.

    Mon hébergeur a positionné le paramètre magic_quotes_gpc sur OFF.
    Il me confirme que mon code est correct. Pour visualiser le \ dans ma table je dois rajouter un addslashes avant mysql_real_escape_string.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $nom=mysql_real_escape_string(addslahes($_POST['nom']));
    Comme je ne souhaite pas modifier tous mes scripts, j'ai préféré modifier la valeur de magic_quotes_gpc à ON.

    Cela se fait en rajoutant au fichier .htaccess la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    php_flag magic_quotes_gpc On
    Maintenant la commande fait bien apparaitre le \ dans la table.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $nom=mysql_real_escape_string($_POST['nom']);
    Que pensez vous du positionnement de magic_quotes_gpc à ON ?
    J'ai lu que PHP6 ne permettra plus l'utilisation de cette directive.

    Dois je donc remodifier tous mes scripts avec addslahes ?
    Merci par avance pour votre avis.



  13. #13
    Membre Expert
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Par défaut
    Citation Envoyé par alain78
    Que pensez vous du positionnement de magic_quotes_gpc à ON ?
    D'habitude, je développais en BASIC, Pascal, Assembleur.
    Quand j'ai commençé à apprendre le PHP, j'ai été surpris de voir qu'ils avaient inventé cette "chose" que sont les guillemets pseudo-magiques.
    Il était temps qu'ils comprennent que cela n'aidait pas les débutants en programmation... bien au contraire.
    Citation Envoyé par alain78
    J'ai lu que PHP6 ne permettra plus l'utilisation de cette directive.
    Je te dirais même mieux...
    Cette fonctionnalité est OBSOLETE depuis PHP 5.3.0. Nous vous encourageons vivement à ne plus l'utiliser.

    Source : Guillemets magiques
    Citation Envoyé par alain78
    Dois je donc remodifier tous mes scripts avec addslahes ?
    Ne serait-il pas préférable de préparer tes scripts aux version futures de PHP ?

    Il serait plus sage de trouver LA solution avec les guillemets magiques désactivés.

    Mais ce n'est que mon avis.

  14. #14
    Membre confirmé Avatar de alain78
    Homme Profil pro
    retraité
    Inscrit en
    Mai 2008
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 160
    Par défaut Fin de la discussion
    OK merci, je vais suivre ton conseil et travailler avec magic_quotes_gpc à OFF.

    Bonne journée.


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

Discussions similaires

  1. [PostgreSQL] Calculs sous PHP ou dans fonctions PostgreSQL
    Par ilalaina dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 22/09/2008, 08h20
  2. Réponses: 8
    Dernier message: 07/07/2007, 12h39
  3. Réponses: 6
    Dernier message: 16/01/2006, 15h24
  4. Fonction EXTRACT sous Informix
    Par lord_of_ankou dans le forum Informix
    Réponses: 3
    Dernier message: 20/08/2003, 17h37
  5. requête mysql sous php
    Par remi59 dans le forum Débuter
    Réponses: 9
    Dernier message: 03/07/2003, 10h39

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