当php页面中按下删除按钮时,上传的第一个项目将从mysql数据库中删除


The first item uploaded is deleted from mysql database when delete button is pressed in php page

我制作了一个可以删除项目的页面。它看起来工作得很好,但当我按下删除按钮时,它总是删除该用户上传的第一个项目,而不是我选择的项目。。。这是代码:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>Produktai</title>
<link href="CSS/stilius.css" rel="stylesheet" type="text/css"/>
<link href="CSS/menu.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<?php require("includes/validate.php");?>
<?php require("includes/stilius.php");?>
<?php
$rec_limit = 4;
require("includes/connection_to_db.php");
$sql = "SELECT COUNT(P_ID) FROM prekės";
$retval = mysql_query($sql);
if(! $retval)
{ die('13 line. Nepavyko gauti duomenų: ' . mysql_error()); }
$row = mysql_fetch_array($retval, MYSQL_NUM);
$rec_count = $row[0];

if( isset($_GET{'page'} ) )
{
    $page = $_GET{'page'} + 1;
    $offset = $rec_limit * $page;
}
else
{
    $page = 0;
    $offset = 0;
}
$left_rec = $rec_count - ($page * $rec_limit);
$sql = "SELECT prekės.* , CONCAT(vartotojai.name) as v_name
                    FROM prekės 
                LEFT JOIN vartotojai
                    ON vartotojai.V_ID=prekės.V_ID
                ORDER BY prekės.date
        DESC LIMIT $offset, $rec_limit";
$retval = mysql_query($sql);
if(! $retval )
{
    die('38 line. Nepavyko gauti duomenų: ' . mysql_error());
}
?>
<?php
if(isset($_POST['deleteItem']))
{
$P_ID = $_POST['P_ID'];
if(mysql_query("DELETE
                FROM prekės
                WHERE P_ID = '$P_ID'"))
{
    header("Location: products.php");
}
else {echo "Prekės nepavyko ištrinti: " .mysql_error();}
}
?>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">  
<?php while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) : ?>
    <?php $image = '<td><img src="data:image/jpeg;base64,'.base64_encode($row['image']).'" name="pix" width="270" height="200"/></td>' ?>
        <table class="two">
            <th><?php $pav = $row['name']; echo "<a href='"$_SERVER[PHP_SELF]?product=$pav'">$pav</a>" ?></th>
            <th>Prekės savininkas: <?php echo $row['v_name']?></th>
        <?php if($row['V_ID'] != $_SESSION['user_id']) : ?>
            <th><select name="mano_prekės" value="<?php echo $m_product;?>">
            <option value="">Pasiūlykite savo prekę</option>
            <option disabled>---------------------------------</option>
            <?php require ("includes/exchange.php") ?>
            </select>
            <input type="button" name="exchange" id="exchange" value="Mainyti">
            </th>
        <?php elseif($row['V_ID'] = $_SESSION['user_id']) : ?>
            <th>
            <input name="P_ID" type="hidden" id="P_ID" value=<?php echo $row['P_ID']?>>
            <input type="button" value="Redaguoti" id="edit_item">
            <input type="submit" name="deleteItem" id="deleteItem" value="Ištrinti" onclick="return confirm('Ar tikrai norite ištrinti šią prekę?')"></th>
            </th>
        <?php endif; ?>
            <tr>
            <?php echo $image?>
            <td><textarea disabled style="resize:none; background-color:white" name="about" rows="12" cols="65"><?php echo $row['specs']?></textarea><td>   
        </table>
<?php endwhile; ?>
</form>
<?php
if( $page > 0 )
{
    $last = $page - 2;
    echo "<a href='"$_SERVER[PHP_SELF]?page=$last'" style=float:left>Atgal</a>";
    echo "<a href='"$_SERVER[PHP_SELF]?page=$page'" style=float:right>Pirmyn</a>";
}
else if( $page == 0 )
{
    echo "<a href='"$_SERVER[PHP_SELF]?page=$page'" style=float:right>Pirmyn</a>";
}
else if( $left_rec < $rec_limit )
{
    $last = $page - 2;
    echo "<a href='"$_SERVER[PHP_SELF]?page=$last'" style=float:left>Atgal</a>";
}
mysql_close();
?>
</body>
</html>

如果你看到我做错了什么,请告诉我,因为这让我头疼。。

你有很多P_ID在一个单一的形式中,你可以尝试两种解决方案

解决方案-1:每个项目的单独表格。(每次(

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
  <table class="two">
            <th><?php $pav = $row['name']; echo "<a href='"$_SERVER[PHP_SELF]?product=$pav'">$pav</a>" ?></th>
            <th>Prekės savininkas: <?php echo $row['v_name']?></th>
        <?php if($row['V_ID'] != $_SESSION['user_id']) : ?>
            <th><select name="mano_prekės" value="<?php echo $m_product;?>">
            <option value="">Pasiūlykite savo prekę</option>
            <option disabled>---------------------------------</option>
            <?php require ("includes/exchange.php") ?>
            </select>
            <input type="button" name="exchange" id="exchange" value="Mainyti">
            </th>
        <?php elseif($row['V_ID'] = $_SESSION['user_id']) : ?>
            <th>
            <input name="P_ID" type="hidden" id="P_ID" value=<?php echo $row['P_ID']?>>
            <input type="button" value="Redaguoti" id="edit_item">
            <input type="submit" name="deleteItem" id="deleteItem" value="Ištrinti" onclick="return confirm('Ar tikrai norite ištrinti šią prekę?')"></th>
            </th>
        <?php endif; ?>
            <tr>
            <?php echo $image?>
            <td><textarea disabled style="resize:none; background-color:white" name="about" rows="12" cols="65"><?php echo $row['specs']?></textarea><td>   
        </table>
</form>

解决方案2:将删除作为一个简单的按钮,并在其上应用onclick事件。

<input type="button" name="deleteItem" id="deleteItem" value="Ištrinti" onclick="if(confirm('Ar tikrai norite ištrinti šia preke?')){window.location.href='<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>?deleteItem=true&P_ID=<?php echo $row['P_ID']?>';}">

问题是表单包含了所有项目,因此在提交时,它会发送最后一个ID(这是第一个上传的项目,因为您是按降序排序的(。

您需要将每个单独的输入集包装成它们自己的形式。