Php 无法删除数据库的第一行

Php 无法删除数据库的第一行,php,Php,我有一个页面可以查看和删除数据库中的数据。delete是一个单击并将url中的变量传递到另一个页面以进行delete查询的链接。例如,我的数据库中总共有3行,删除最后两行没有问题,但无法删除第一行,因为删除是基于“描述”列而不是“ID”列删除记录。下面是提交页面和删除查询页面 viewreportdb.php <!doctype html> <head> <meta charset="utf-8"> <title>Report Da

我有一个页面可以查看和删除数据库中的数据。delete是一个单击并将url中的变量传递到另一个页面以进行delete查询的链接。例如,我的数据库中总共有3行,删除最后两行没有问题,但无法删除第一行,因为删除是基于“描述”列而不是“ID”列删除记录。下面是提交页面和删除查询页面

viewreportdb.php

<!doctype html>
<head>
    <meta charset="utf-8">
    <title>Report Database </title>
    <link href="style/fg_membersite.css" rel='stylesheet' type='text/css'>
</head>
<?php

include('config.php');
include('adminconfig.php');

$sql = "SELECT * FROM report ORDER BY ID"; 
$result = mysql_query($sql);  
?>

<body>
    <form method="POST" action="reportsave.php" onSubmit="return validate(this);">
        <table id='fcolor2' class="viewdb3">
            <tr>
                <td style='border:2px solid black; background-color:#FF9933;' align=center> ID </td>
                <td style='border:2px solid black; background-color:#FF9933;' align=center> Name </td>
                <td style='border:2px solid black; background-color:#FF9933; width:auto;' align=center> Department </td>
                <td style='border:2px solid black; background-color:#FF9933; width:auto;' align=center> Description </td>
                <td style='border:2px solid black; background-color:#FF9933; width:auto;' align=center> Date </td>
            </tr><?!-- missing close tr -->
            <?php
            while($row = mysql_fetch_array($result))
            {
                ?>
                <tr>
                    <td style='border:2px solid black; background-color:#33FF00; width:auto' align=center><?php echo $row['ID'] ?></td>
                    <td style='border:2px solid black; background-color:#33FF00; width:auto' align=center><?php echo $row['name'] ?></td>
                    <td style='border:2px solid black; background-color:#33FF00; width:auto' align=center><?php echo $row['department'] ?></td>
                    <td><textarea rows="5" cols="50" name="description[]"><?php echo $row['description']; ?></textarea></td>
                    <td style='border:2px solid black; background-color:#33FF00; width:auto' align=center><?php echo $row['date'] ?></td>
                </tr><!-- missing close tr -->
                <tr>
                    <td><input class='edit' type = 'text' name="ID[]" value='<?php echo $row['ID'] ?>' maxlength="50"/></td>
                    <td><input class='edit' type = 'text' name="name[]" value='<?php echo $row['name'] ?>' maxlength="50"></td>
                    <td><input class='edit' type = 'text' name="department[]" value='<?php echo $row['department'] ?>' maxlength="50"></td>
                    <td>&nbsp;</td>
                    <td><input class='edit' type = 'text' name="date[]" value='<?php echo $row['date'] ?>' maxlength="50"></td>
                    <?php echo "<td><a href='http://localhost/kinhock/deletereport.php?description=".$row['description']."'>Delete</a></td>";?>
                </tr><!-- missing close tr -->
                <?php
            } ?>
            <tr class='btn2'><td><input type='submit' name='submit' value='Submit' /></td></tr>
            <tr class='btn2'><td><a href="http://localhost/kinhock/adminitem.php"> Back to Description </a></td></tr><!-- missing open & close tr-->
            <tr class='btn2'><td>&nbsp;<a href="http://localhost/kinhock/adminlogin.php">Logout</a></td></tr>
        </table>
    </form>
<?php
$ID=$row['ID'];
$name=$row['name'];
$department=$row['department'];
$date=$row['date'];
$description=$row['description'];
?>
</body>
</html>

报表数据库
身份证件
名称
部门
描述
日期
deletereport.php

<?php
include('adminconfig.php');
include('config.php');

$description = $_GET['description'];

$sql="DELETE FROM `report` WHERE `description`='$description'";
$result=mysql_query($sql);

if(!$result){
    die('invalid query:'.mysql_error());
}else
    ?>
        <p style="font-family:arial;color:#0066CC;font-size:30px;">One row deleted...</p>
    <?php
header('Refresh:3; url=viewreportdb.php');
die;
?>

请不要使用
说明
字段删除,因为URL编码和许多其他因素会破坏此代码,即使重复说明也很可能,不是吗?您的代码也是
容易采用最简单的方法

在此处更改您的代码:

<?php echo "<td><a href='http://localhost/kinhock/
deletereport.php?id=".$row['ID']."'>Delete</a></td>";?>

步骤1

发送要删除的ID,而不是描述

<?php echo "<td><a href='http://localhost/kinhock    
/deletereport.php?id=".$row['ID']."'>Delete</a></td>";?>

您可能应该在where子句和此行中使用ID而不是描述:

(更改)

致:

假设ID是主ID或唯一ID,则使用该ID将更快、更准确

您可能还想使用:

$id =  mysql_real_escape_string($_GET['id']);

防止SQL注入

我相信您的报表的ID是基于用户ID的,对吗?为什么不让每个报告都有一个ID(报告ID)、用户ID(例如admin001)和一个描述呢。这样,如果admin001生成报告A,它将具有ID 1,如果admin001生成报告B,它将具有ID 2。si当您要删除您使用的报告时

$sql = "delete from {tablename} where ID={report ID}";

您能提供MySQL错误消息吗?也许你应该对$description进行mysql\u real\u转义。你真的应该使用唯一的ID来删除条目,而不是description(我假设description甚至不是唯一的)。仅供参考:你使用的是不推荐的mysql\u*函数,你的代码很容易被SQL注入。是的,囚徒是对的,删除/更新条目的最佳方法是通过主键(唯一ID)对其进行标识。您不能有两个具有相同ID的报告-如果您有多行具有相同ID,您没有正确实现ID列。传递的ID应该是整数值吗?url中的id是什么?哦,对不起,我忘了告诉你id不是整数,数据看起来像ad001hm,这听起来是个好主意,到时候我会试着解决它
<?php echo "<td><a href='http://localhost/kinhock    
/deletereport.php?description=".$row['description']."'>Delete</a></td>";?>
<?php echo "<td><a href='http://localhost/kinhock    
/deletereport.php?id=".$row['ID']."'>Delete</a></td>";?>
$description = $_GET['description'];
$sql="DELETE FROM `report` WHERE `description`='$description'";
$id = $_GET['id'];
$sql="DELETE FROM `report` WHERE `ID`='$id'";
$id =  mysql_real_escape_string($_GET['id']);
$sql = "delete from {tablename} where ID={report ID}";