从DB中删除ID

时间:2010-12-25 11:58:59

标签: php mysql

原始表格

  <?php
echo '<td><form action="episodesdelete.php" method="POST">';
echo '<input type="hidden" name="epid" value="'.$row['epid'].'">';  
?>

episodesdelete.php

<?php
$connection = mysql_connect("localhost","root","")
or die ("Couldn't Connect To Server");
$db = mysql_select_db("shows", $connection)
or die ("Couldn't Select Database");
$query = "DELETE FROM shows WHERE epid= "'.$_POST['epid']'";
$result = mysql_query($query)
or die ("Query Failed: " . mysql_error());

?>

2 个答案:

答案 0 :(得分:4)

首先,您使用了双引号:

$query = 'DELETE FROM shows WHERE epid= ".$row['epid']"';

应该是:

$query = "DELETE FROM shows WHERE epid= ".$row['epid']";

还有一个问题:

您还需要使用具有正确字段名称的$_POST数组,如:

$query = "DELETE FROM shows WHERE epid= " . $_POST['id'];

因为您使用POST作为表单的方法:

<form action="episodesdelete.php" method="POST">

您需要使用$_POST

因为您的隐藏字段名为id

echo '<input type="hidden" name="id" value="'.$row['epid'].'">';

您需要在查询中指定:

$_POST['id']

以下是您的查询应该如何:

$query = "DELETE FROM shows WHERE epid= " . $_POST['id'];

答案 1 :(得分:1)

请在浏览器中查看生成的html页面的源代码。

  • 隐藏输入字段的值是否填充了正确的ID而不是空?
  • 最多只有一个输入字段,其名称为每个&lt; form&gt;?

在服务器上,检查表单是否已提交,而不仅仅是提取显示:

if (isset($_POST)) {
    ...
}
你写道:     $ query ='DELETE FROM显示WHERE epid =“。$ row ['epid']”';

这一行存在许多问题:

  • 您需要使用$ _REQUEST或$ _POST代替$ row,因为它是从浏览器发送的数据
  • 而不是“epid”,你在html代码中将它命名为“id”。
  • 在单引号内,变量未被替换
  • 存在一个名为SQL injection的安全问题,它允许用户通过将其作为“id” - 参数发送来执行他们想要的任何SQL语句;例如,使用Firebug。

该行应如下所示:

$query = "DELETE FROM shows WHERE epid='"
          .mysql_real_escape_string($_POST['id'])."'";

PS:说到安全性,请确保在将htmlspecialchars插入html页面之前使用CSRF转义不受信任的数据。并且您需要在表单中使用一个不可用的令牌来防止其他网站(登录用户可能访问)盲目地提交删除请求。请参阅{{3}}。