我正在尝试制作这个程序,如果我已经登录,我可以删除一个线程。现在我已经将按钮链接到了所有内容,我按下时执行了多个任务,但似乎没有运行SQL查询我想要它。现在我有一个名为$ forumid的变量,它在URL中设置并使用$ _GET [' forumid']检索; 我知道这个设置正确,因为我已经完成了echo $ forumid;这是正确的。但是有一行代码由于某种原因而无法运行,那就是:
$db->query("DELETE FROM threads WHERE id='$forumid'");
现在,当我删除WHERE子句时,它可以工作,但它会清除整个表。所以我现在知道问题是WHERE子句,我只是无法找出问题的原因。我对PHP很新,所以请原谅我的无知。但如果有人能够看到这个问题,请告诉我。谢谢。
[编辑:完整代码]
<?php
require 'connect.php';
session_start();
$forumid = $_GET['forumid'];
$title;
$body;
$by;
$loggedAsAuthor;
?>
<html>
<head>
<title>Legend Factions - View Forum</title>
<link href="stylesheet.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="header">
<a href="index.php">Home</a>
<a href="forum.php">Forum</a>
<a href="vote.php">Vote</a>
<a href="http://legacyfactionsraid.buycraft.net/">Donate</a>
<a href="members.php">Members</a>
</div>
<div id="content">
<div id="divider">
<?php
if ($result = $db->query("SELECT * FROM threads")) {
while ($row = $result->fetch_assoc()) {
if ($row['id'] == $forumid) {
$title = $row['title'];
$body = $row['words'];
$by = $row['by'];
if ($_SESSION['sess_username'] == $by || $_SESSION['sess_username'] == "admin") {
$loggedAsAuthor = true;
}
}
}
}
echo '<h2>', $title, '</h2><br/><label>By: ', $by;
if (isset($loggedAsAuthor)) {
echo '<form action="viewForum.php" method="post">
<br/><input type="submit" name="delete" value="Delete Thread"/>
</form>';
}
$delete = $_POST['delete'];
if (isset($delete)) {
$db->query("DELETE FROM threads WHERE id=$forumid ");
//header("Location: forum.php");
}
?>
<hr/>
<?php
echo $body;
?>
</div>
</div>
</body>
</html>`
答案 0 :(得分:0)
您需要修改您的SQL查询,如:
$db->query("DELETE FROM threads WHERE id= $forumid "); // removed single quotes
希望它现在适合你。
答案 1 :(得分:0)
if(isset($_GET['forumid']) && !empty($_GET['forumid'])){
$qry = "DELETE FROM threads WHERE id= '" . mysql_real_escape_string ($_GET['forumid']) . "'";
}
或使用有效记录
$this->db->where('id', $forumid );
$this->db->delete('threads ');
答案 2 :(得分:0)
你可以尝试这种方式,希望它会有所帮助
$qry = "DELETE FROM threads WHERE id= $forumid ";
$db->query($qry);
答案 3 :(得分:0)
您的查询似乎是正确的。
如果$ _GET [&#39; forumid&#39;]是一个字符串,请执行:
$db->query("DELETE FROM threads WHERE id=".$db->quote($_GET['forumid']));
如果$ _GET [&#39; forumid&#39;]是数字,请执行:
$db->query("DELETE FROM threads WHERE id=".(int)$_GET['forumid']);
在任何情况下,字符串语法都应该有效,因为字符串将被mysql强制转换为整数。
要进行调试,请执行:
echo "DELETE FROM threads WHERE id=".$db->quote($_GET['forumid']) ;
并将结果提供给我们,或直接将其粘贴到phpMyAdmin中以查看错误。
您还应该在脚本顶部添加此行以查看所有错误:
error_reporting(E_ALL) ;
ini_set('display_errors', true) ;
答案 4 :(得分:0)
如果线程id是整数,则MySQL中的整数或字符串语法都应该有效。我所看到的可能是:
1)$ forumid没有您认为的价值? 要检查它,在删除查询之前var_dump变量:
var_dump($forumid); die;
2)表id列未命名&#34; id&#34;? 检查数据库架构,检查列是否具有您认为应具有的名称。在mysql CLI中:
desc threads;