php中用于删除的未定义索引

i1icjdpr  于 2021-06-19  发布在  Mysql
关注(0)|答案(1)|浏览(285)

这个问题在这里已经有答案了

引用-这个错误在php中是什么意思(36个答案)
如何显示mysqli查询的错误[重复](2个答案)
两年前关门了。
我对php还是新手(昨天刚开始),当我想删除我的数据时,它会这样说
注意:第13行的c:\wamp64\www\helpingclass\delete.php中的未定义索引:bookname
注意:未定义索引:第14行的c:\wamp64\www\helpingclass\delete.php中的数量
注意:未定义的索引:第15行的c:\wamp64\www\helpingclass\delete.php中的price
这是我第13、14、15行的代码

$bookname = $_POST['bookname'];
$quantity = $_POST['quantity'];
$price = $_POST['price'];

我甚至试着把那些13,14,15行改成这个

if(isset($_POST['bookname']) && isset($_POST['bookname'])){
    echo $_POST['bookname'];
}
    if(isset($_POST['quantity']) && isset($_POST['quantity'])){
    echo $_POST['quantity'];
}
    if(isset($_POST['price']) && isset($_POST['price'])){
    echo $_POST['price'];}

通知未定义的索引已消失,但我仍然无法删除数据:(
这是我的delete.php的完整代码

<?php
    include ('connection.php');
    session_start();
    if (!isset($_SESSION ['userid'])&& empty($_SESSION['userid'])){
        header ("location:login.php");
        exit;
    }
    else {
        $userid = $_SESSION ['userid'];
    }

    $bookid = $_GET['bookid'];
    $bookname = $_POST['bookname'];
    $quantity = $_POST['quantity'];
    $price = $_POST['price'];

    $query = mysqli_query ($conn, "DELETE FROM book SET WHERE Book_Id='$bookid';");

    if ($query == TRUE)
        {
            echo "<script language='javascript'>";
            echo "alert('Deleted.');";
            echo "window.location.href='action.php';";
            echo "</script>";
        }
        else
        {
            echo "<script language='javascript'>";
            echo "alert('Delete Failed.');";
            //echo "window.location.href='action.php';";
            echo "</script>";
        }

 ?>

我真的很感激你的帮助

cyej8jka

cyej8jka1#

你的代码中有很多问题。
最重要的是,您的数据库查询对sql注入相关的问题是开放的。请使用事先准备好的报表。
参数化版本的示例可以是:

// prepare the query statement
$stmt = $mysqli_prepare($conn, "DELETE FROM book 
                                WHERE Book_Id = ?");
// bind the parameters
$stmt->bind_param("i", $bookid);
// execute the query
$stmt->execute();
//fetching result would go here (in case of SELECT queries)
$stmt->close();

其次,检查变量是否存在,使用 isset 功能。可以同时使用三元运算符。
如:

$bookid = isset($_GET['bookid']) ? $_GET['bookid'] : 0;
$bookname = isset($_POST['bookname']) ? $_POST['bookname'] : '';
$quantity = isset($_POST['quantity']) ? $_POST['quantity'] : 0;
$price = isset($_POST['price']) ? $_POST['price'] : 0;

第三,你的 DELETE 查询语句语法错误。你不能使用 * 以及 SET . 还有,你呢 (int) 屏幕上的打字 $bookid (假设这里是整数)。你也不需要分号( ; )在查询字符串中,使用 mysqli_query 功能。
具体如下:

$query = mysqli_query ($conn, "DELETE FROM book 
                               WHERE Book_Id = '" . (int)$bookid . "'");

从mysql文档中,语法 DELETE 声明如下:

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]

相关问题