2010-08-30 36 views
0

Je viens d'implémenter mysql_real_escape_string() et maintenant mon script n'écrira pas dans la base de données. Tout a bien fonctionné avant d'ajouter mysql_real_escape_string():Le formulaire PHP ne sera pas publié

Des idées?

$name = mysql_real_escape_string($_POST['name']); 
$description = mysql_real_escape_string($_POST['description']); 
$custid = mysql_real_escape_string($_SESSION['customerid']); 

mysql_send("INSERT INTO list 
       SET id = '', 
        name = '$name', 
        description = '$description', 
        custid = '$custid' "); 
+2

Qu'est-ce que mysql_send? Y a-t-il une erreur signalée? À quoi ressemble la requête avant qu'elle ne soit envoyée à mysql (essayez d'en faire écho)? – blockhead

+0

Astuce de débogage: Placez l'instruction SQL dans une variable, c'est-à-dire '$ sql =" INSERT INTO liste SET id = '', name = '$ name' "' etc ... puis 'echo $ sql' (ou' die ($ sql) '). Cela peut faire la lumière sur ce qui cause le problème. Aussi, comment vous connectez-vous à la base de données, vous-même ou à travers une sorte d'API tierce? Dans ce dernier cas, il existe peut-être une méthode que l'API recommande pour échapper des données. – webbiedave

Répondre

2

quelle est cette mysql_ envoyer fonction?
et si changer pour mysql_query();

+0

OP a dit que ça fonctionnait jusqu'à ce qu'il commence à utiliser mysql_real_escape_string. Il n'a pas dit qu'il avait changé cette ligne de code. – blockhead

0

mysql_real_escape_string doit avoir une connexion de base de données transmis comme second argument car il demande à la base de données ce que les personnages doivent être échappé.

$connection = mysql_connect(HOST, USERNAME, PASSWORD); 
$cleanstring = mysql_real_escape_string("my string", $connection); 
+0

Pas si vous avez déjà une connexion ouverte – blockhead

+0

@blockhead, j'étais sur le point de le dire. Vous pouvez être confondu avec mysqli_real_escape_string, qui a besoin de son premier argument pour être un lien vers la base de données. – Lekensteyn

+0

Dans certains cas, il devient confus (comme si vous avez plus d'une connexion ouverte), j'ai eu ce problème un certain nombre de fois. Je passe toujours une connexion pour m'assurer que la chaîne n'est pas tronquée/effacée. – KeatsKelleher

0

Un échec typique de comprendre comment utiliser certaines fonctions ... Vous utilisez simplement mysql_real_escape_string sur des données d'entrée brutes. Avez-vous déjà entendu parler d'une entrée de validation/validation? mysql_real_escape_string n'a pas de sens sur les nombres. Si vous avez validé une variable pour qu'elle soit un nombre, vous n'avez pas besoin de l'échapper.

mysql_send est un alias pour mysql_query non? Utilisez le code de débogage, ajoutez echo mysql_error(); après mysql_send(...).

1

Il devrait être facile de comprendre ce qui se passe. Fist, au lieu d'envoyer la requête que vous construisez à la base de données, renvoyez-la (ou consignez-la), et voyez ce que vous envoyez réellement à la base de données.

Si cela ne le rend pas évident, voyez ce que mysql_error() a à dire.

0
 mysql_connect("localhost", "username", "password") or die(mysql_error()); 
     mysql_select_db("database") or die(mysql_error()); 
     $name = mysql_real_escape_string($_POST['name']); 
     $description = mysql_real_escape_string($_POST['description']); 
     $custid = mysql_real_escape_string($_SESSION['customerid']); 

     //If you doing Update use this code 
     mysql_query("UPDATE list SET id = '', name = '$name', description = '$description' WHERE custid = '$custid' ") or die(mysql_error()); 
     //OR if you doing Insert use this code. 
     mysql_query("INSERT INTO list(name, description, custid) VALUES('$name', '$description', '$custid')") or die(mysql_error()); 
     //If custid is Integer type user $custid instead of '$custid'.     

Si vous mettez à jour les enregistrements de la table de liste en fonction de la custid utiliser la commande UPDATE ou si vous insertinf les enregistrements dans l'utilisation de la table liste des commandes INSERT.

Questions connexes