php中未定义的删除索引[重复]
Posted
技术标签:
【中文标题】php中未定义的删除索引[重复]【英文标题】:Undefined index for deletion in php [duplicate] 【发布时间】: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']) && isset($_POST['quantity'])
与 isset($_POST['quantity'])
相同:仅 A 和 A = A
你的 PHP 版本是多少?
您的查询无效。这些通知并不是您的数据没有被删除的原因。检查mysqli_error($conn)
我撤回了我的近距离投票,因为我链接到的副本实际上与这里的真正问题无关。
DELETE * FROM
无效删除*
和SET
。使用错误报告。您也对 SQL 注入持开放态度,将其参数化。您还发送GET
和POST
请求吗?
【参考方案1】:
您的代码中有很多问题。
最重要的是,您的数据库查询对SQL Injection 相关问题开放。请使用Prepared Statements。参数化版本的示例可能是:
// 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 Documentation,DELETE
语句的语法如下:
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 讨论之后。以上是关于php中未定义的删除索引[重复]的主要内容,如果未能解决你的问题,请参考以下文章
由于将在索引 主关键字或关系中创建重复的值,请求对表的改变没有成功。 改变该字段中的或包含重复数据的字段中的数据,删除索引或重新定义索引以允许重复的值并再试一次。
由于将在索引 主关键字或关系中创建重复的值,请求对表的改变没有成功。 改变该字段中的或包含重复数据的字段中的数据,删除索引或重新定义索引以允许重复的值并再试一次。
由于将在索引 主关键字或关系中创建重复的值,请求对表的改变没有成功。 改变该字段中的或包含重复数据的字段中的数据,删除索引或重新定义索引以允许重复的值并再试一次。
由于将在索引 主关键字或关系中创建重复的值,请求对表的改变没有成功。 改变该字段中的或包含重复数据的字段中的数据,删除索引或重新定义索引以允许重复的值并再试一次。