Question

Je suis assez frustré. Je veux pouvoir insérer dans ma base de données des noms avec des guillemets simples, par exemple, O'Connor.

Ainsi, lors de l'insertion dans la base de données, je fais:

 $lname = mysql_real_escape_string(

Je suis assez frustré. Je veux pouvoir insérer dans ma base de données des noms avec des guillemets simples, par exemple, O'Connor.

Ainsi, lors de l'insertion dans la base de données, je fais:

 $lname = stripslashes($r["lname"]);

Et puis j'insère $ lname dans la base de données.

Une fois dans la base de données, il s’affiche sous la forme O \ 'Connor.

Donc, si je devais rappeler ce nom de famille dans mon application Web, je devrais utiliser:

 $search = mysql_real_escape_string(

Je suis assez frustré. Je veux pouvoir insérer dans ma base de données des noms avec des guillemets simples, par exemple, O'Connor.

Ainsi, lors de l'insertion dans la base de données, je fais:

 $lname = mysql_real_escape_string(

Je suis assez frustré. Je veux pouvoir insérer dans ma base de données des noms avec des guillemets simples, par exemple, O'Connor.

Ainsi, lors de l'insertion dans la base de données, je fais:

 $lname = stripslashes($r["lname"]);

Et puis j'insère $ lname dans la base de données.

Une fois dans la base de données, il s’affiche sous la forme O \ 'Connor.

Donc, si je devais rappeler ce nom de famille dans mon application Web, je devrais utiliser:

 ; Magic quotes
 ;

 ; Magic quotes for incoming GET/POST/Cookie data.
 magic_quotes_gpc = On

 ; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc.
 magic_quotes_runtime = Off

 ; Use Sybase-style magic quotes (escape ' with '' instead of \').
 magic_quotes_sybase = Off

Tout cela semble bien fonctionner. Cependant, j'ai une fonction de recherche qui va rechercher les noms de famille et afficher les résultats. Lorsque je cherche, je dois chercher O \ 'Connor pour obtenir des résultats.

Vous voyez, après ma recherche, la zone de texte stocke automatiquement la valeur de ce qui vient d'être recherché (à l'aide de sessions). Donc, mon code est le suivant:

<*>

Comme je l'ai déjà dit, lorsque je recherche, je dois utiliser "O \ 'Connor", puis après ma recherche, la valeur dans la zone de texte devient "O \\\\' Connor"

.

C’est frustrant d’essayer de comprendre cela. Est-ce que quelqu'un sait ce que je fais mal? Merci!

EDIT:

Voici mon fichier php5.ini concernant les citations magiques:

<*>

Cependant, mon site est hébergé sur GoDaddy et je ne suis pas autorisé à modifier le fichier: (

POST['lname']);

Et puis j'insère $ lname dans la base de données.

Une fois dans la base de données, il s’affiche sous la forme O \ 'Connor.

Donc, si je devais rappeler ce nom de famille dans mon application Web, je devrais utiliser:

<*>

Tout cela semble bien fonctionner. Cependant, j'ai une fonction de recherche qui va rechercher les noms de famille et afficher les résultats. Lorsque je cherche, je dois chercher O \ 'Connor pour obtenir des résultats.

Vous voyez, après ma recherche, la zone de texte stocke automatiquement la valeur de ce qui vient d'être recherché (à l'aide de sessions). Donc, mon code est le suivant:

<*>

Comme je l'ai déjà dit, lorsque je recherche, je dois utiliser "O \ 'Connor", puis après ma recherche, la valeur dans la zone de texte devient "O \\\\' Connor"

.

C’est frustrant d’essayer de comprendre cela. Est-ce que quelqu'un sait ce que je fais mal? Merci!

EDIT:

Voici mon fichier php5.ini concernant les citations magiques:

<*>

Cependant, mon site est hébergé sur GoDaddy et je ne suis pas autorisé à modifier le fichier: (

GET['search']);

Je suis assez frustré. Je veux pouvoir insérer dans ma base de données des noms avec des guillemets simples, par exemple, O'Connor.

Ainsi, lors de l'insertion dans la base de données, je fais:

 $lname = mysql_real_escape_string(

Je suis assez frustré. Je veux pouvoir insérer dans ma base de données des noms avec des guillemets simples, par exemple, O'Connor.

Ainsi, lors de l'insertion dans la base de données, je fais:

 $lname = stripslashes($r["lname"]);

Et puis j'insère $ lname dans la base de données.

Une fois dans la base de données, il s’affiche sous la forme O \ 'Connor.

Donc, si je devais rappeler ce nom de famille dans mon application Web, je devrais utiliser:

<*>

Tout cela semble bien fonctionner. Cependant, j'ai une fonction de recherche qui va rechercher les noms de famille et afficher les résultats. Lorsque je cherche, je dois chercher O \ 'Connor pour obtenir des résultats.

Vous voyez, après ma recherche, la zone de texte stocke automatiquement la valeur de ce qui vient d'être recherché (à l'aide de sessions). Donc, mon code est le suivant:

<*>

Comme je l'ai déjà dit, lorsque je recherche, je dois utiliser "O \ 'Connor", puis après ma recherche, la valeur dans la zone de texte devient "O \\\\' Connor"

.

C’est frustrant d’essayer de comprendre cela. Est-ce que quelqu'un sait ce que je fais mal? Merci!

EDIT:

Voici mon fichier php5.ini concernant les citations magiques:

<*>

Cependant, mon site est hébergé sur GoDaddy et je ne suis pas autorisé à modifier le fichier: (

POST['lname']);

Et puis j'insère $ lname dans la base de données.

Une fois dans la base de données, il s’affiche sous la forme O \ 'Connor.

Donc, si je devais rappeler ce nom de famille dans mon application Web, je devrais utiliser:

<*>

Tout cela semble bien fonctionner. Cependant, j'ai une fonction de recherche qui va rechercher les noms de famille et afficher les résultats. Lorsque je cherche, je dois chercher O \ 'Connor pour obtenir des résultats.

Vous voyez, après ma recherche, la zone de texte stocke automatiquement la valeur de ce qui vient d'être recherché (à l'aide de sessions). Donc, mon code est le suivant:

<*>

Comme je l'ai déjà dit, lorsque je recherche, je dois utiliser "O \ 'Connor", puis après ma recherche, la valeur dans la zone de texte devient "O \\\\' Connor"

.

C’est frustrant d’essayer de comprendre cela. Est-ce que quelqu'un sait ce que je fais mal? Merci!

EDIT:

Voici mon fichier php5.ini concernant les citations magiques:

<*>

Cependant, mon site est hébergé sur GoDaddy et je ne suis pas autorisé à modifier le fichier: (

SESSION['search'] = $search;

Tout cela semble bien fonctionner. Cependant, j'ai une fonction de recherche qui va rechercher les noms de famille et afficher les résultats. Lorsque je cherche, je dois chercher O \ 'Connor pour obtenir des résultats.

Vous voyez, après ma recherche, la zone de texte stocke automatiquement la valeur de ce qui vient d'être recherché (à l'aide de sessions). Donc, mon code est le suivant:

<*>

Comme je l'ai déjà dit, lorsque je recherche, je dois utiliser "O \ 'Connor", puis après ma recherche, la valeur dans la zone de texte devient "O \\\\' Connor"

.

C’est frustrant d’essayer de comprendre cela. Est-ce que quelqu'un sait ce que je fais mal? Merci!

EDIT:

Voici mon fichier php5.ini concernant les citations magiques:

<*>

Cependant, mon site est hébergé sur GoDaddy et je ne suis pas autorisé à modifier le fichier: (

POST['lname']);

Et puis j'insère $ lname dans la base de données.

Une fois dans la base de données, il s’affiche sous la forme O \ 'Connor.

Donc, si je devais rappeler ce nom de famille dans mon application Web, je devrais utiliser:

<*>

Tout cela semble bien fonctionner. Cependant, j'ai une fonction de recherche qui va rechercher les noms de famille et afficher les résultats. Lorsque je cherche, je dois chercher O \ 'Connor pour obtenir des résultats.

Vous voyez, après ma recherche, la zone de texte stocke automatiquement la valeur de ce qui vient d'être recherché (à l'aide de sessions). Donc, mon code est le suivant:

<*>

Comme je l'ai déjà dit, lorsque je recherche, je dois utiliser "O \ 'Connor", puis après ma recherche, la valeur dans la zone de texte devient "O \\\\' Connor"

.

C’est frustrant d’essayer de comprendre cela. Est-ce que quelqu'un sait ce que je fais mal? Merci!

EDIT:

Voici mon fichier php5.ini concernant les citations magiques:

<*>

Cependant, mon site est hébergé sur GoDaddy et je ne suis pas autorisé à modifier le fichier: (

Était-ce utile?

La solution

Il semble que les citations magiques soient activées dans votre configuration PHP.

Pour vérifier s'il est réellement activé:

echo get_magic_quotes_gpc();

Pour désactiver , modifiez votre fichier php.ini:

; Magic quotes
;

; Magic quotes for incoming GET/POST/Cookie data.
magic_quotes_gpc = Off

; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc.
magic_quotes_runtime = Off

; Use Sybase-style magic quotes (escape ' with '' instead of \').
magic_quotes_sybase = Off

Ou ajoutez cette ligne à votre .htaccess:

php_flag magic_quotes_gpc Off

Autres conseils

Les citations magiques sont activées. Cela signifie que tout ce qui est placé dans post ou get ou dans d'autres lieux similaires est automatiquement échappé, de sorte que les programmeurs débutants n'ont pas à s'en préoccuper autant. Il est obsolète dans la version actuelle de PHP, si je me souviens bien.

Voici ce que vous voulez faire pour que le script s'exécute de la même manière quelle que soit la configuration:

function fixinput($value){
    if (get_magic_quotes_gpc()){
      $value = stripslashes($value);
    }

    return mysql_real_escape_string($value);
}

Vous voudrez peut-être modifier cela davantage pour envelopper les données non numériques entre guillemets, ce qui est une variante courante, mais j'estime qu'il est préférable de placer ces guillemets manuellement.

Petite modification de la fonction fixinput pour vérifier si votre installation de PHP a bien une vraie chaîne d'échappement (les versions antérieures n'en ont pas):

  function fixinput($value){
    if (get_magic_quotes_gpc()){
      $value = stripslashes($value);
    }

    if (function_exists('mysql_real_escape_string')) {
      return mysql_real_escape_string($value);
    }
    else {
      return mysql_escape_string($value);
    }
  }
  

Une fois dans la base de données, il s’affiche sous la forme O \ 'Connor.

     

Donc, si je devais rappeler ce nom de famille dans mon application Web, je devrais utiliser:

 $lname = stripslashes($r["lname"]);

Faux! Lorsque vous échappez des chaînes avec mysql_real_escape_string , elles ne sont échappées que dans la requête. La base de données interprète la requête afin que les données se retrouvent dans la base de données sans aucun caractère d'échappement. Vous n'êtes pas obligé d'utiliser stripslashes pour extraire des données de la base de données. Si vous pensez le faire, cela signifie que les données de votre base de données sont mutilées. Probablement parce que vous avez activé les guillemets magiques.

Vous devriez:

  • Désactivez les guillemets magiques ou inversez leurs effets globalement. Voir le manuel pour plus de détails.
  • Utilisez les paramètres liés (la meilleure solution) ou échappez toutes les variables avec mysql_real_escape_string . Faites ceci lorsque vous construisez la requête.
  • Ne faites rien sur les éléments que vous extrayez de la base de données.

En particulier, ne créez aucune fonction à la fixinput et aux variantes répertoriées dans certaines des réponses fournies ici. C’est la mauvaise façon de résoudre le problème car cela gâcherait toutes les données qui ne proviennent pas d’une requête http.

Je ne vérifie pas si get_magic_quotes_gpc est activé / désactivé.

Je viens de faire $ lname = mysql_real_escape_string (stripslashes ($ _ POST ['lname'])); donc s'il n'y a pas de texte cité, il ne supprimera pas les barres obliques .. s'il est cité, il le sera enlève-les.

et cela fonctionne à merveille pour moi!

Tout ce que vous avez à faire est de prendre la requête de recherche, mysql_real_escape_string, et tout se passera bien. La meilleure façon de le faire est de ne jamais le stocker, mais simplement de l’échapper, tout se trouve dans la base de données.

Au lieu de cela, procédez comme suit:

 

Tout ce que vous avez à faire est de prendre la requête de recherche, mysql_real_escape_string, et tout se passera bien. La meilleure façon de le faire est de ne jamais le stocker, mais simplement de l’échapper, tout se trouve dans la base de données.

Au lieu de cela, procédez comme suit:

<*>SESSION['search'] =

Tout ce que vous avez à faire est de prendre la requête de recherche, mysql_real_escape_string, et tout se passera bien. La meilleure façon de le faire est de ne jamais le stocker, mais simplement de l’échapper, tout se trouve dans la base de données.

Au lieu de cela, procédez comme suit:

<*>GET['search']; $search = mysql_real_escape_string(

Tout ce que vous avez à faire est de prendre la requête de recherche, mysql_real_escape_string, et tout se passera bien. La meilleure façon de le faire est de ne jamais le stocker, mais simplement de l’échapper, tout se trouve dans la base de données.

Au lieu de cela, procédez comme suit:

<*>GET['search']);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top