无法测试变量是否不是字符串

时间:2017-11-19 12:10:58

标签: php

我正在检查 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 语句时,我没有遇到任何问题。虽然我想事先检查一下。

1 个答案:

答案 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....
}