php - 试图删除数据库中的条目,收到 sql 错误但无法解决

标签 php html sql sql-delete

我正在做一个非常简单的脚本来从数据库中删除一行。我以前用几乎相同的代码做过,但出于某种原因,这行不通!

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/

相关文章:

javascript - 无法读取属性,试图制作一个应用程序要求用户输入年龄和姓名

javascript - jQuery 选择何时属性名称以?

mysql - SQL 查询以获取同一表中计数大于 1 的列

php - mysql中的多重求和

php - 如何通过php中的外部命令传递变量的内容?

javascript - 使所选元素(内容框)变暗/着色并添加复选标记图标 AngularJS

sql - 中止来自 SQLite 触发器的以下语句

php - 可视化 PHP GUI IDE

php - 通过 ImageMagick 或 GhostScript 命令行旋转 .EPS 文件

java - 正则表达式:完全匹配由定界符分割的字符串