PHP MySQLi prepared语句正在删除错误的行
我正在编写一个脚本,其中一个功能应该是删除表中的一行,但是当我尝试删除该行时,它最终删除了错误的行 我的脚本中的代码如下所示:PHP MySQLi prepared语句正在删除错误的行,php,mysql,mysqli,Php,Mysql,Mysqli,我正在编写一个脚本,其中一个功能应该是删除表中的一行,但是当我尝试删除该行时,它最终删除了错误的行 我的脚本中的代码如下所示: <?php session_start(); include '../includes/conn.php'; $verified = $_SESSION['verified']; if($verified !== true){ header("Location: index.php"); } if(isset($_POST['id'])){
<?php
session_start();
include '../includes/conn.php';
$verified = $_SESSION['verified'];
if($verified !== true){
header("Location: index.php");
}
if(isset($_POST['id'])){
$query = $conn->prepare("DELETE FROM inventory WHERE ID=?");
$query->bind_param('s', $_POST['id']);
$query->execute();
}
if(isset($_POST['desc']) && isset($_POST['mcost']) && isset($_POST['price']) && isset($_POST['rrp']) && isset($_POST['loc'])){
date_default_timezone_set("Europe/London");
$date = (string)date("l jS \of F Y");
$query = $conn->prepare("INSERT INTO inventory (Description, MaterialsPrice, Price, RRP, Location, Date_Created) VALUES (?, ?, ?, ?, ?, ?)");
$query->bind_param('ssssss', $_POST['desc'], $_POST['mcost'], $_POST['price'], $_POST['rrp'], $_POST['loc'], $date);
$query->execute();
header("Location: inventory.php");
}
?>
<html>
<head>
<title>Encanto Jewellery - Inventory</title>
<style type="text/css">
@import url(../includes/tablestyles.css);
</style>
</head>
<body>
<?php
$desca = array();
$mpa = array();
$pa = array();
$rrpa = array();
$loca = array();
$datea = array();
$query = $conn->prepare("SELECT Description, MaterialsPrice, Price, RRP, Location, Date_Created FROM inventory ORDER BY ID desc");
$query->execute();
$query->bind_result($desc, $mp, $p, $rrp, $loc, $date);
while($query->fetch())
{
$desca[] = $desc;
$mpa[] = $mp;
$pa[] = $p;
$rrpa[] = $rrp;
$loca[] = $loc;
$datea[] = $date;
}
?>
<form action="" method="POST" name="insert">
<div class="col" style="border-style: solid solid none solid;">
<div class="row">
<b><p>Description</p></b>
</div>
<?php
for($i = 0; $i < count($desca); $i++)
{
echo '<div class="row"><p>' . $desca[$i] . '</p></div>';
}
?>
<div class="row">
<textarea style="width: 99%;" rows="1" name="desc"></textarea>
</div>
</div>
<div class="col">
<div class="row">
<b><p>Price of Materials</p></b>
</div>
<?php
for($i = 0; $i < count($mpa); $i++)
{
echo '<div class="row"><p>' . $mpa[$i] . '</p></div>';
}
?>
<div class="row">
<textarea style="width: 99%;" rows="1" name="mcost"></textarea>
</div>
</div>
<div class="col">
<div class="row">
<b><p>Price</p></b>
</div>
<?php
for($i = 0; $i < count($pa); $i++)
{
echo '<div class="row"><p>' . $pa[$i] . '</p></div>';
}
?>
<div class="row">
<textarea style="width: 99%;" rows="1" name="price"></textarea>
</div>
</div>
<div class="col">
<div class="row">
<b><p>RRP</p></b>
</div>
<?php
for($i = 0; $i < count($rrpa); $i++)
{
echo '<div class="row"><p>' . $rrpa[$i] . '</p></div>';
}
?>
<div class="row">
<textarea style="width: 99%;" rows="1" name="rrp"></textarea>
</div>
</div>
<div class="col">
<div class="row">
<b><p>Location</p></b>
</div>
<?php
for($i = 0; $i < count($loca); $i++)
{
echo '<div class="row"><p>' . $loca[$i] . '</p></div>';
}
?>
<div class="row">
<textarea style="width: 99%;" rows="1" name="loc"></textarea>
</div>
</div>
<div class="col">
<div class="row">
<b><p>Date Created</p></b>
</div>
<?php
for($i = 0; $i < count($datea); $i++)
{
echo '<div class="row"><p>' . $datea[$i] . '</p></div>';
}
?>
<div class="row">
<input type="submit" value="Insert" style="height: 24px;" />
</div>
</div>
</form>
<div class="col">
<div class="row">
<b><p>Delete</p></b>
</div>
<?php
for($i = 0; $i < count($datea); $i++)
{
?>
<div class="row">
<form action="" method="POST">
<input type="hidden" name="id" value="<?php echo $i + 1; ?>" />
<input type="submit" value="Delete" />
</form>
</div>
<?php } ?>
</div>
</body>
</html>
Encanto珠宝-库存
@导入url(../includes/tablestyles.css);
描述
材料价格
价格
RRP
位置
创建日期
删除
将ID放入表单时,会有一个循环,在其中添加ID,如下所示:
<input type="hidden" name="id" value="<?php echo $i + 1; ?>" />
ID是整数吗?如果是,请使用
$query->bind_param('i', $_POST['id']);
另外,我怀疑您仍然在删除错误的元素。尝试以下更改:
将ID添加到查询并将变量绑定到该查询:
$ids = array();
// other stuff...
$query = $conn->prepare("SELECT ID, Description, MaterialsPrice, Price, RRP, Location, Date_Created FROM inventory ORDER BY ID desc");
$query->execute();
$query->bind_result($id, $desc, $mp, $p, $rrp, $loc, $date);
while($query->fetch())
{
$ids[] = $id;
$desca[] = $desc;
$mpa[] = $mp;
$pa[] = $p;
$rrpa[] = $rrp;
$loca[] = $loc;
$datea[] = $date;
}
然后,在生成delete元素时,迭代$ids数组:
<?php
foreach($ids as $delete_id){
?>
<div class="row">
<form action="" method="POST">
<input type="hidden" name="id" value="<?php echo $delete_id; ?>" />
<input type="submit" value="Delete" />
</form>
</div>
<?php } ?>
你不能那样计算身份证
从数据库中选择它会更成功(与其他字段一样)。如何创建链接/按钮,以及将要删除的ID发布到此脚本的任何html元素?仅供参考:ID是整数吗?如果是,请使用$query->bind\u param('i',$POST['ID'))
@Loïc在底部看,呃,没有看到滚动条,没关系,我累了…@Ray…将其更改为$query->bind_param('I',intval($_POST['id'));成功…@ProgrammingTurtle我建议不要选择错误的答案。@YourCommonSense如果我的答案解决了他的问题,怎么会是错误的答案?它无法解决任何问题。任何有知识的人都可以看到。是的,删除表单是使用循环生成的,然后在隐藏字段中传递$I。这将导致一次更大的问题一行被删除,并将再次删除错误的行。因此,在隐藏字段中,应传递表行的ID。@Ray如果您唯一关心的是您可以从该欺诈中获得的信誉点,那就这样吧。