PHP错误 - 会话和mysqli

时间:2018-05-02 17:12:45

标签: php mysql sql session mysqli

我收到两个错误,第一个是:

  

注意:未定义的变量:custID in   第19行的G:\ xampp \ htdocs \ benstca \ PHP_Scripts \ cartScript.php

我无法理解为什么,正如上面所定义的那样。

第二个是:

  

警告:mysqli_fetch_array()期望参数1为mysqli_result,   在G:\ xampp \ htdocs \ benstca \ PHP_Scripts \ cartScript.php中给出的布尔值   第21行

<?php
include('connect.php');
$rand = rand();
if($_SERVER["REQUEST_METHOD"] =="POST")
{
    $value = $_POST['addBasket'];
    $custID = $_SESSION['custID'];

    /*INSERT QUERY TO ADD INFORMATION INTO THE "CART" WITHIN THE DATABSE*/

    $insertSQL = "INSERT INTO `benstca`.`tblcart` (`Event ID`, `Customer ID`) VALUES ($value, $custID)";
    //echo $insertSQL;
    mysqli_query($dbconnect, $insertSQL);
}

/*QUERY TO SHOW INFORMATION ON WHAT IS WITHIN THE CART*/
$gatherSQL = "SELECT * FROM `tblcart` WHERE `CustomerID` = $custID";
$gatherResult = mysqli_query($dbconnect, $gatherSQL);
while($row = mysqli_fetch_array($gatherResult))
{
    echo "<tr>
        <td>$row[0]</td>
        <td>$row[1]</td>
        <td><button name=removeBTN value=$row[0]>Remove Item</button></td>
    </tr>";
}
?>

1 个答案:

答案 0 :(得分:1)

  

我不明白为什么,正如上面定义的那样

问题是,如果请求方法不是POST,则不会输入您的第一个if语句,因此不会填充$ custID。

第二个错误来自第一个错误 - 查询失败,因为$ custID未定义,错误告诉您$gatherResultfalse(这是查询失败时mysqli_query返回的内容)而不是结果数组。

如果你移动

$custID = $_SESSION['custID'];

if语句开始之前,您应该发现两个错误都消失了(假设您在同一会话中的先前请求期间实际上在会话中设置了“custID”)。

P.S。我认为值得指出的是,您的代码容易受到SQL注入攻击。您应该使用参数化查询和预准备语句来帮助防止攻击者通过使用恶意输入值来破坏您的数据库。 http://bobby-tables.com给出了风险的解释,以及如何使用PHP / mysqli安全地编写查询的一些示例。 从不以您现在的方式直接将未经过处理的数据插入到您的SQL中。