【问题标题】:Undefined index for deletion in php [duplicate]php中未定义的删除索引[重复]
【发布时间】:2019-03-05 18:49:45
【问题描述】:

我还是 php 的新手(昨天才开始),当我想删除我的数据时,它会说这个
Notice: Undefined index: bookname in C:\wamp64\www\HelpingClass\delete.php on line 13
Notice: Undefined index: quantity in C:\wamp64\www\HelpingClass\delete.php on line 14
Notice: Undefined index: price in C:\wamp64\www\HelpingClass\delete.php on line 15

这是我在第 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>";
        }


 ?>

非常感谢您的帮助

【问题讨论】:

  • isset($_POST['quantity']) &amp;&amp; isset($_POST['quantity'])isset($_POST['quantity']) 相同:仅 A 和 A = A
  • 你的 PHP 版本是多少?
  • 您的查询无效。这些通知并不是您的数据没有被删除的原因。检查mysqli_error($conn)
  • 我撤回了我的近距离投票,因为我链接到的副本实际上与这里的真正问题无关。
  • DELETE * FROM 无效删除*SET 。使用错误报告。您也对 SQL 注入持开放态度,将其参数化。您还发送GETPOST 请求吗?

标签: php mysql forms session


【解决方案1】:

您的代码中有很多问题。

参数化版本的示例可能是:

// 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。另外,对$bookid 进行(int) 类型转换(假设这里是整数)。使用 mysqli_query 函数时,查询字符串中也不需要分号 (;)。

应该是这样的:

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

来自MySQL DocumentationDELETE语句的语法如下:

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

【讨论】:

  • @user3783243 添加参数化版本示例
  • OP 在之前关于 DELETE 查询的编辑中删除了星号。
  • @FunkFortyNiner 是的,在 cmets 讨论之后。
猜你喜欢
  • 2011-08-06
  • 1970-01-01
  • 2011-06-18
  • 2014-01-27
  • 2013-05-22
  • 1970-01-01
  • 1970-01-01
  • 2020-08-10
相关资源
最近更新 更多