0

我有一个页面可以查看和删除数据库中的数据。删除是一个链接,单击并将 url 中的变量传递到另一个页面以进行删除查询。例如,我的数据库中总共有 3 行,我在删除最后两行时没有问题,但我无法删除第一行,因为删除是根据“description”列而不是“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>

删除报告.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;
?>
4

4 回答 4

0

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

$sql = "delete from {tablename} where ID={report ID}";
于 2013-08-21T08:40:47.183 回答
0

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

(改变)

<?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 或唯一 ID,则使用 ID 会更快、更准确。

您可能还想使用:

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

以防止 SQL 注入。

于 2013-08-21T08:27:12.527 回答
0

不要删除 usingdescription字段,因为 urlencoding 和许多其他因素会破坏此代码,甚至重复描述也很有可能,不是吗?您的代码也很
容易使用最简单的SQL 注入方法!

在此处更改您的代码:

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

还有你的 SQL 查询:

$id = intval($_GET['id']);
$sql="DELETE FROM `report` WHERE `id`='$id'";
于 2013-08-21T08:22:21.510 回答
0

步骤1

发送 ID,而不是描述,以进行删除。

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

第2步

使用 ID 删除,而不是描述。

$id = intval($_GET['id']);
$sql="DELETE FROM `report` WHERE `id`=$id";  
于 2013-08-21T08:23:10.213 回答