2009-08-26 8 views
0

J'écris un script PHP pour ajouter des articles à un panier. Mon panier contient des champs pour l'ID utilisateur, l'ID du produit, l'ID de session, les notes et quelques autres. Certains champs peuvent être vides. Par exemple:Façon concise de vérifier la présence de variables dans MySQL INSERT QUERY en utilisant PHP

Si une personne n'est pas connectée, je vais stocker son ID de session dans la table et, si elle se connecte, ajouter son identifiant d'utilisateur afin d'avoir un moyen permanent de faire correspondre les éléments du tableau au utilisateur. Si c'est le cas, j'ajouterai l'ID utilisateur. Quand il vient à la requête INSERT, puis-je faire quelque chose comme ceci:

$ add_sql = "INSERT INTO sessionBasket (userid) VALUES ( « " isset ($ _ SESSION [ "userid"]) $ _SESSION [".? identifiant d'utilisateur"] : "") ."'"; Cela me permettrait d'économiser beaucoup de temps sur la vérification des variables et le branchement parce que les gens pourraient être connectés ou non, les éléments pourraient avoir des notes ou non, ce genre de chose.

Répondre

1

Yikes! SQL Injection! vous risquez de perdre toute votre base de données

Vous devez rechercher des instructions préparées pour votre insertion sql.

Vous devez utiliser l'interface mysqli, mais il va comme ceci:

$statement = $db_connection->prepare("insert into ... VALUES(?)"); 
$statement->bind_param("id", $sid); 
$statement->execute(); 

Cela permettra d'éviter des attaques par injection SQL. Au minimum, vous devriez au moins échapper à la ficelle.

$sid = isset($_SESSION[userid]) ? mysql_real_escape_string($_SESSION[userid])) : ''; 
$add_sql = "insert into ... values($sid)"; 
+0

Je sais, je sais - je vous donnais juste les os qui se rapportent à mon problème, heh. Je fais des correspondances JavaScript et remplace tous les caractères illégaux quand ils sont tapés, puis je lance une regex PHP, puis je fais mysqli_real_escape_string et coupe chaque entrée et si ça passe, je n'insère qu'une fois que j'ai aussi fait htmlspecialchars(). Donc, croyez-moi quand je vous dis qu'aucune injection de base de données n'est possible :) – user97410

+0

mais, en fait, vous avez répondu à ma question de toute façon: je vais faire la tâche comme une étape distincte. – user97410

Questions connexes