我正在做一个非常简单的脚本来从数据库中删除一行。我以前用几乎相同的代码做过,但出于某种原因,这行不通!
Viewmessages.php 运行没有问题,但是当我尝试使用 deletemessage.php 删除行时,我收到一个 sql 错误,我只有一行 sql:
查看消息(将信息发送到 deletemessage.php):
echo "<a href='deletemessage.php?contactname=".$contactname."'>Delete</a>";
以下是删除消息的代码:
<?php
session_start();
if ( !isset($_SESSION['adminusername']))
{
header("Location:admin.php");
exit();
}
require "dbconn.php";
$contactname = $_GET['contactname'];
$query = "DELETE FROM message WHERE contactname =".$contactname;
$results = mysql_query($query) or die(mysql_error());
header("Location: viewmessages.php");
?>
我不知道错误是什么! viewmessages.php 文件中的 $contactname 肯定是表的主键!
有什么想法吗?
编辑:我知道问题出在 sql 中的联系人姓名上……由于某种原因,它没有很好地接收它,我做了一个回显,看看它认为联系人姓名是什么,它是正确的。然后我更改了变量并在 contactname 中放入了一个值的字符串,它正确地删除了行......所以问题是 GET_['contactname'] 但我不确定是什么......
最佳答案
在查询中用引号将 $contactname
括起来,因为它是一个字符串。但先逃脱它!它像现在这样极易受到 SQL 注入(inject)的攻击。我知道它可能是一个管理页面,但始终观察是一个很好的习惯,即使您的用户是可信的。 (特别是当您试图删除他时 O'Malley
先生会破坏 SQL 语句)
$concatname = mysql_real_escape_string($_GET['contactname']);
$query = "DELETE FROM message WHERE contactname ='".$contactname . "'";
通过超链接删除时一定要小心。看起来您在允许执行之前正在检查管理员权限,但请确保这些链接无法通过广泛的 Internet 访问,where they might get crawled.
关于php - 试图删除数据库中的条目,收到 sql 错误但无法解决,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9422421/