2013-04-01 2 views
-1

Je prends l'entrée d'une page html puis les données viennent à la page php et sont stockées dans une variable dire $ code. Le problème est quand je soumets: -Stocker une chaîne comme dans php

#include<iostream> 
    using namespace std; 
    int main() { 
    cout<<"1"; 
    } 

Alors qu'est-ce stocké dans $ code est: -

#include<iostream> 
using namespace std; 
int main() { 
cout<<\"1\";   //Notice the change , these backslashes at cout. 
} 

Comment puis-je éviter cela? J'utilise 000webhost.com & cette chose ne se passe pas dans mon localhost.

+0

Est-ce une nouvelle version de php? lol –

+4

[Citations magiques] (http://php.net/manual/fr/security.magicquotes.php)? –

+3

@Kaii: Est-ce ** difficile ** pour vous les gars de comprendre que c'est une chaîne qui contient du code C++ ou que vous essayez de gagner "la pire clown" tasse? – zerkms

Répondre

-1

Son parce que les citations sont échappèrent donc ce dosent arriver: Dites que vous stockez « pomme » si les citations ne sont pas échappé que cela arriverait

$var = ""apple""; 

provoquant une erreur que cela fonctionne:

$var = "\"apple\""; 

Vous pouvez utiliser stripslashes(); pour supprimer les barres obliques si vous envisagez de répercuter les données.

+3

Terrible conseil. Vous devez réparer la racine, pas les conséquences. -1 – zerkms

+0

Eh bien j'ai supposé qu'ils ne pouvaient pas résoudre le problème à cause de 000webhost désolé. Mais s'ils y ont accès, désactivez simplement les magicquotes dans php.ini. – lemondrop

+0

@lemondrop que d'essayer http://www.ramnode.com/ son très bon marché .. et vous pouvez essayer des choses –

0

Meilleure solution Dans votre fichier php.ini, il y a de fortes chances que la directive magic_quotes_gpc soit activée. Cela devrait être désactivé pour des raisons de sécurité. Si vous n'avez pas accès au fichier php.ini (par exemple sur un hôte partagé), vous pouvez toujours faire la même chose en utilisant une directive .htaccess (en supposant qu'il s'agit d'un serveur apache).

Dans votre php.ini

magic_quotes_gpc Off 

Dans un fichier .htaccess:

php_flag magic_quotes_gpc Off 

Pourquoi est-ce qui se passe?

La raison pour laquelle cela se produit est due au déroulement logique suivant.

Une chaîne qui doit être échappée est envoyée au serveur. Ceci est ma chaîne. C'est génial. Magic Quotes échappe à l'apostrophe avant qu'elle n'atteigne votre code. Ceci est ma chaîne. Il est génial mysql_real_escape_string a maintenant deux caractères à échapper, la barre oblique inverse \ ainsi que l'apostrophe \ '. Ceci est ma chaîne. C'est génial Cette nouvelle chaîne super-échappée est stockée dans la base de données. Lorsque la chaîne est extraite de la base de données, elle est transmise à stripslashes. Cela supprime les deux échappements ajoutés à l'étape 3, mais comme l'un des antislashs a été échappé, stripslashes pense qu'il appartient. Ceci est ma chaîne. C'est génial Ce problème peut vraiment devenir incontrôlable lorsque vous soumettez de nouveau ces chaînes à la base de données, car chaque fois que le nombre de barres obliques inversées se multiplie.

Alternative Solution Une alternative rapide et facile serait de simplement supprimer les barres obliques ajoutées par magic_quotes avant de passer la chaîne à mysql_real_escape_string.

$str = stripslashes($code); 
$str = mysql_real_escape_string($str); 
Questions connexes