我正在检查 ID 输入是否为非字符串且不为空。这是代码:
$id = $_POST["id"];
if(!is_string($id) && !empty($id)) {
$delete = mysqli_query($connect,"DELETE from users WHERE ID=$id");
$_SESSION["succMsg"] = "User have been successfully removed";
Header("Location:login_update.php");
} else {
$_SESSION["succMsg"] = "Unable to execute the query.";
Header("Location:login_update.php");
}
它以某种方式决定不接受我运行的查询。当我删除 if 语句时,我没有遇到任何问题。虽然我想事先检查一下。
答案 0 :(得分:0)
问题是,$_POST["id"];
始终是一个字符串 - 实际上$_POST
- 数组的所有元素都是 - 所以is_string($id)
当然返回true。您真正意味着做的是检查,如果它只包含数字! ctype_digit($id)
就是这样做的。
如果您的目的是迁移注入攻击,最简单的可能是将转换为整数:
$id = (int) $_POST["id"];
然后它应该按预期工作。 is_string($id)
现在当然没必要了。 is_empty()
检查应该在此任务之前执行(直接在$_POST["id"]
上)。也许isset()
在这里更合适,如果未将id
设置为参数,则会消除警告:
if (isset($_POST["id"])) {
$id = (int) $_POST["id"];
// Do your query....
}