0

我不知道为什么,但是每当用户在我正在处理的网站上发帖时,它都会多次发布到数据库中,网站上的每个成员都有 1 个条目(目前是 3 个)。

这是我的代码。

添加_topic.php

$category=$_POST['category'];
$sub_category=$_POST['sub_category'];
$topic_data=$_POST['topic_data'];
$posted=date("h:i:s d/m/Y"); //create date time

$sql = "INSERT INTO `topics`(category, sub_category, topic_data, posted_by, posted)VALUES('$category', '$sub_category', '$topic_data', '".$_SESSION['user_id']."', '$posted')";
$result=mysql_query($sql);

if($result){
header("Location: topics.php?category=$category&sub_category=$sub_category");
exit();
}

主题.php

$sql = "SELECT users.user_id, users.username, users.profile, topics.topic_id, topics.category, topics.sub_category, 
topics.topic_data, topics.posted_by, topics.posted, topics.view, topics.reply 
FROM users, topics WHERE topics.category = '" . $_GET['category'] . "' AND  topics.sub_category = '" . $_GET['sub_category'] . "' ORDER BY topics.posted DESC";

$result = mysql_query($sql);

while($rows = mysql_fetch_array($result)){
4

1 回答 1

0

我不认为这add_topic.php是插入多行。您可以通过直接查看您的桌子来验证这一点。

我相信您的问题是您在Topics.php.

$sql = "SELECT users.user_id, users.username, users.profile, topics.topic_id,
               topics.category, topics.sub_category, topics.topic_data, 
               topics.posted_by, topics.posted, topics.view, topics.reply 
        FROM users, topics 
        WHERE topics.category = '" . $_GET['category'] . "' 
        AND  topics.sub_category = '" . $_GET['sub_category'] . "' 
        ORDER BY topics.posted DESC";

您正在对usersand进行连接topics,但您没有定义链接它们的内容。因此,它为每个用户创建了每个主题帖子的行。

您可以将其视为此 SQLFiddle 上的第一个示例结果集 - http://sqlfiddle.com/#!2/7dfc4/4

您要做的是LEFT JOIN用户到主题ON topics.posted_by = users.user_id

这是第二个示例结果集 - http://sqlfiddle.com/#!2/7dfc4/4

因此,您的查询现在将是(转义您$_GET以防止 SQL 注入)-

$sql = "SELECT users.user_id, users.username, users.profile, topics.topic_id,
               topics.category, topics.sub_category, topics.topic_data, 
               topics.posted_by, topics.posted, topics.view, topics.reply 
        FROM topics
        LEFT JOIN users
        ON topics.posted_by = users.user_id
        WHERE topics.category = '" . mysql_real_escape_string($_GET['category']) . "' 
        AND  topics.sub_category = '" . mysql_real_escape_string($_GET['sub_category']) . "' 
        ORDER BY topics.posted DESC";

注意 - 您不应该mysql_*在新代码中使用函数。它从 php v.5.5 开始贬值。您应该将代码更新为mysqli_*PDOhttp://php.net/manual/en/mysqlinfo.api.choosing.php

于 2013-07-12T02:42:03.777 回答