我认为你们会知道最好的方法:
当我从ORDERS表中删除订单($ prodId)时,此脚本将从ORDERED_ITEMS表中删除所有项目排序行,该表包含从系统中每个订单订购的所有商品。
是否有最佳做法可以确保删除我要删除的内容并且仅删除?我担心出现错误/注入/错误输入脚本和 意外删除了所有订单的所有订购项目行。
这是我有多远。
$delete_prod_items = mysqli_real_escape_string($con,$_REQUEST['prodId']);
if (is_numeric($delete_prod_items)){
$sql3 = "DELETE from proteus.ordered_items where order_id = $orderId";
mysqli_query($con,$sql3) or die('DELETE Order $orderId from the Ordered Items table failed: ' . mysqli_error($con).'<br>');
}
我错过了什么吗?
答案 0 :(得分:2)
不知道为什么有人提到它,但真正保护任何声明的最好方法是使用PreparedStatements:
$delete_prod_items = mysqli_real_escape_string($con,$_REQUEST['prodId']);
$mysqli = new mysqli("localhost", "localuser", "password", "database");
if ($mysqli->connect_errno) {
echo "Failed to connect to MySQL: " . $mysqli->connect_error;
}
if (!($stmt = $mysqli->prepare("DELETE FROM `proteus`.`ordered_items` WHERE `order_id` = ?"))) { //whatever query you want
echo "Prepare failed: (" . $mysqli->errno . ") " . $mysqli->error;
}
$stmt->bind_param("s", $delete_prod_items);
$stmt->execute();
$stmt->close();
在@zerkms提到的内容之后,请使用POST
请求获取您的信息。
答案 1 :(得分:1)
首先,您需要注意sql注入。 link会给你一个想法。
其次,您可以使用javascript来获取弹出窗口,在删除前询问用户确认。
接下来,要避免无意中删除多行,请在查询中加入LIMIT 1
。
N.B。您还可以通过创建一个不同的用户(用户名)访问mysql数据库来限制priveleges在您的mysql_connect('host', 'username', 'password', 'database')
函数中使用它。如果您正在显示非常重要的内容,则可以考虑不给予删除权限。
答案 2 :(得分:0)
$_POST
而不是$_REQUEST
答案 3 :(得分:0)
作为第一项业务,请执行以下操作......
您将面临的主要问题是未经授权的请求。最好的解决方案是使用CSRF token。