Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP MySQLi prepared语句正在删除错误的行_Php_Mysql_Mysqli - Fatal编程技术网

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如果您唯一关心的是您可以从该欺诈中获得的信誉点,那就这样吧。