我不能得到一行删除,因为id没有通过url。这是一个简单的错误,我找了一个小时后找不到解决方案。
此页包含表格上的信息:
<?php
$result = mysql_query("SELECT review, ratings, date, user FROM reviews")
or die(mysql_error()); ;
if (mysql_num_rows($result) == 0) {
echo 'There Arent Any Reviews Yet';
} else {
echo "<table border='0'><table width=100% border='6'><tr><th>Comments/Thoughts</th><th>Ratings</th><th>Date</th><th>User</th><th>Delete</th></tr>";
while($info = mysql_fetch_array($result))
{
echo "<tr>";
echo "<td>" . $info['review']. "</td>";
echo "<td>" . $info['ratings']. " Stars</td>";
echo "<td>" . $info['date']. "</td>";
echo "<td>" . $info['user']. "</td>";
echo "<td>" . " <a href='deletereview.php?review_id=" . $info['review_id'] . "'>Delete</a> </td>";
echo "</tr>";
}
}
echo "</table>";
?>
它转到deletereview.php执行删除函数:
<?php
session_start();
require_once '../includes/db.php';
$id = $_GET['review_id'];
$info = "DELETE FROM reviews WHERE review_id = '$id'";
mysql_query($info) or die ("Error: ".mysql_error());
echo "<h2>Review Deleted</h2>";
?>
有什么想法吗? 您没有在查询中选择review_id,因此$info["review_id"]始终为null
撇开其他答案不谈,我要说的是:
如果你不清理你的变量,你的数据库将被劫持。
例如,如果我传递review_id=' OR '1'='1
,会发生什么?
DELETE FROM reviews WHERE review_id = '' OR '1'='1'
此查询将删除reviews
中的所有内容。
mysql_real_escape_string()
你的$_GET
和$_POST
变量在使用它们之前在你的MySQL。
您忘记选择review_id
$result = mysql_query("SELECT review_id, review, ratings, date, user FROM reviews")
您没有从数据库中选择review_id
,而是使用$info['review_id']
来设置URL上的ID。只需将第一行更改为:
$result = mysql_query("SELECT review_id, review, ratings, date, user FROM reviews")
必须用mysql_real_escape_string
:
$id = mysql_real_escape_string($_GET['review_id']);
您必须在查询中选择review_id。但是您还必须检查一些SQL注入,因为使用GET请求很容易删除所有表记录。