【问题标题】:parse_str() need someting on PHP 7parse_str() 在 PHP 7 上需要一些东西
【发布时间】:2019-05-16 11:13:09
【问题描述】:

我已经更新了MAMP 服务器,现在我的 PHP 版本是 PHP 7.2.1。更新后报错

不推荐使用:parse_str():在没有结果的情况下调用 parse_str() 参数已被弃用 /Applications/MAMP/htdocs/projects/functions/checklogin.php 在第 3 行

从此代码:

<?php
    if(isset($_COOKIE[$cookie_name])){
        parse_str($_COOKIE[$cookie_name]);
        $result = mysqli_query($db, "SELECT * FROM `users` WHERE uid='$u' AND username='$u_name'");
        if(mysqli_num_rows($result) == '0'){
            header("Location: " . $base_url . "logout.php");
        }
    }
    else{
      header("Location: " . $base_url . "logout.php");
    }
?>

我该如何解决这个问题?

【问题讨论】:

    标签: php


    【解决方案1】:

    PHP documentation says

    如果没有 parse_str() 的第二个参数,查询字符串参数将填充本地符号表。考虑到这一点的安全隐患,现在不推荐使用不带第二个参数的 parse_str() 。该函数应始终与两个参数一起使用,因为第二个参数会将查询字符串解析为数组。

    你可以写parse_str($_COOKIE[$cookie_name], $myArray);而不是parse_str($_COOKIE[$cookie_name]);来解决这个问题

    并在此行之后使用extract($myArray);

    <?php
        if(isset($_COOKIE[$cookie_name])) {
            parse_str($_COOKIE[$cookie_name], $myArray);
            extract($myArray);
            $result = mysqli_query($db, "SELECT * FROM `users` WHERE uid='$u' AND username='$u_name'");
            if(mysqli_num_rows($result) == '0') {
                header("Location: " . $base_url . "logout.php");
            }
        }
        else {
          header("Location: " . $base_url . "logout.php");
        }
    ?>
    

    此外,您应该使用prepared statement 来保护您的网站。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多