2009-11-24 6 views
3

ce code est censé faire en sorte que le code propre à la base de données seMagic quotes sur les anciennes versions et nouvelles de PHP

il est censé fonctionner dans les versions antérieures de PHP (plus tôt que 4.3.0) et les versions ultérieures de php (plus ancienne que 4.3.0)

cela fonctionne bien parce que les données arrive à la base de données sans problème, mais je reçois une erreur sur le navigateur

$menu_name = mysql_prep($_POST['menu_name']); 

comment j'appelle la fonction mysql_prep

function mysql_prep($value) 
{ 

    $get_magic_quotes = get_magic_quotes_gpc(); 

    $new_enough_php = function_exists ("mysql_real_escape_string"); //check if php version is greater than 4.3.0 

    if($new_enough_php) // if php is of a newer version 
    { 
     //undo magic quotes effect so that mysql_real_escape_string can work well 
     if ($get_magic_quotes) 
     { 
      $value = stripslashes ($value); 
     } 

     $value = mysql_real_escape_string($value); 

    } 
    else //mysql is older than 4.3.0  
    { 
     //add slashes manually if magic quotes are off 
     if(!$get_magic_quotes) 
     { 
      $value = addslashes ($value); 
     } 
     //if magic quotes already exist, slashes already exists 
    } 

    return $value; 

    //$value = mysql_real_escape_string($value); 

    //$value_without_slashes = stripslashes ($value); 

    //return $value_without_slashes; 

} 
+0

quelle erreur? Un 'E_NOTICE'? – mauris

+0

Oui, plus d'informations d'erreur sont requises. –

+0

Il s'agit d'une erreur mysql, la requête n'a pas pu être exécutée, et il montre l'erreur est venu avant le vient avant le; ce qui serait l'instruction MYSQL – Gatura

Répondre

2

Pour les démarreurs, cette fonction pourrait être raccourcie à environ 5 lignes (il serait aussi plus facile à lire).

Deuxièmement, êtes-vous connecté à MySQL lorsque vous appelez cette fonction? Vous devez être connecté pour PHP pour savoir comment/quoi échapper. Ce n'est pas clair à 100% du manuel pour mysql_real_escape_string, mais il est sous-entendu:

Si l'identifiant de connexion n'est pas spécifié, le dernier lien ouvert par mysql_connect() est supposé. Si un tel lien n'est pas trouvé, il essayera d'en créer un comme si mysql_connect() était appelé sans argument.

Si cela ne le résout toujours pas, je suggère d'imprimer la requête avant de l'exécuter et de vérifier que tout est en ordre.

0

Vous ne devriez pas le faire à l'intérieur d'une méthode DB, si vous utilisez PHP 5.3+, vous pouvez placer ce code sur la plus haute de la page:

if (get_magic_quotes_gpc() === 1) 
{ 
    $_GET = json_decode(stripslashes(json_encode($_GET, JSON_HEX_APOS)), true); 
    $_POST = json_decode(stripslashes(json_encode($_POST, JSON_HEX_APOS)), true); 
    $_COOKIE = json_decode(stripslashes(json_encode($_COOKIE, JSON_HEX_APOS)), true); 
    $_REQUEST = json_decode(stripslashes(json_encode($_REQUEST, JSON_HEX_APOS)), true); 
} 

Il gère les guillemets magiques dans les clés, les valeurs et des tableaux multidimensionnels.

Questions connexes