2009-07-06 9 views
2

Le code ci-dessous permet à l'utilisateur d'entrer une phrase en anglais courant, qui est ensuite ajoutée à une base de données en tant que "$ site". Si l'utilisateur entre dans une apostrophe, la phrase est stockée avec une barre oblique inverse en regard de l'apostrophe. Comment puis-je obtenir la variable "$ site" à ajouter à la base de données sans backslashes devant les apostrophes?PHP - supprimer une barre oblique inverse à partir d'une apostrophe

Merci à l'avance,

John

print "<div class=\"siteadd\"> 
     <form action='process.php?find=$find1' method='post'> 
     Add a book to this topic: <input name='site' type='text' size='50'> 
     <input type='submit' value='Submit'> 
     </form> 
     </div>"; 

Puis, sur process.php:

$site = str_replace($remove_array, "", $_POST['site']); 
$site = strtolower($site); 
$site = mysql_real_escape_string($site); 
$illegal = array("/", "\""); 
$site = str_replace($illegal, '', $site); 

mysql_query("INSERT INTO `$find` VALUES (NULL, '$site',1,0)"); 

Répondre

6

Je suppose que le backslash est ajouté par PHP pour des raisons de sécurité. En savoir plus sur magic quotes. Et puisque vous utilisez la fonction appropriée pour échapper les chaînes passées aux requêtes mysql, vous n'avez pas besoin de compter sur l'échappement fictif de PHP.

Au début du script, vérifiez si magic_quotes sont, et si oui, enlever les barres obliques:

if (get_magic_quotes_gpc()) { 
    function stripslashes_deep($value) 
    { 
     $value = is_array($value) ? 
        array_map('stripslashes_deep', $value) : 
        stripslashes($value); 

     return $value; 
    } 

    $_POST = array_map('stripslashes_deep', $_POST); 
    $_GET = array_map('stripslashes_deep', $_GET); 
    $_COOKIE = array_map('stripslashes_deep', $_COOKIE); 
    $_REQUEST = array_map('stripslashes_deep', $_REQUEST); 
} 

BTW, dans votre code, la variable $find provient d'une source non fiable et doivent être protégés/filtré aussi bien.

+0

Merci ... cela fonctionne. Et j'ai ajouté "mysql_real_escape_string" à $ find. –

+0

Vous devriez vérifier si $ find est sur votre liste blanche. Vous ne voulez pas laisser quiconque ajouter des données à la table * any * de votre base de données, n'est-ce pas? –

1

utilisez mysqli::prepare, puis utilisez bind_param sur le résultat mysqli_stmt. Cela empêchera également d'autres types d'injection sql.

Questions connexes