【发布时间】:2014-03-07 20:49:06
【问题描述】:
我一直在开发一个社交网络,一个关键功能是能够在其他用户的个人资料上发帖。但是,我当前的代码只会显示一篇文章。此外,它似乎是显示的第一个帖子。我通过创建新帐户和撰写测试帖子对此进行了测试。代码确实显示了第一篇文章,但如果我再试一次,只有第一篇文章可见。代码如下: 将帖子发送到数据库的代码:
$person = "profile.php?id={$id}";
$post = $_POST['post'];
if($post != "")
{
$data_added = date("Y-m-d");
$added_by = $session_username;
$user_posted_to = $id;
$post = preg_replace("#[^0-9a-z]#i", "", $post);
$sqlCommand = "INSERT INTO posts VALUES ('',
'$post',
'$data_added',
'$added_by',
'$user_posted_to')";
$commandQuery = mysql_query($sqlCommand) or die ("Couldn't send post");
}
else
{
echo "You have to fill in the post form...";
}
检索它(并显示它)的代码:
$getPosts = mysql_query("SELECT *
FROM posts
WHERE user_posted_to='$id'
ORDER BY id DESC LIMIT 15") or die("Couldn't find any posts");
while($row = mysql_fetch_array($getPosts))
{
$id = $row['id'];
$body = $row['body'];
$date_added = $row['date_added'];
$added_by = $row['added_by'];
$user_posted_to = $row['user_posted_to'];
$querya = mysql_query("SELECT *
FROM members
WHERE username='$added_by' LIMIT 1");
while($row = mysql_fetch_array($querya))
{
$user_added = $row['id'];
}
$user_added = "profile.php?id={$user_added}";
}
echo "
<div>
<h3><a href='$user_added'>$added_by</a> - $date_added </h3>
<p> $body</p>
</div><br />
";
如果有人需要更多代码,比如我的数据库连接,请发表评论。
【问题讨论】:
-
使用
while()循环从LIMIT 1查询中获取单行是货物崇拜编程的一个相当大的症状。您确实应该将两个嵌套查询重写为单个JOINed 查询。另外,您很容易受到 SQL 注入攻击... -
SELECT p.id, p.body, p.date_added, p.added_by, p.user_posted_to, m.id FROM posts p JOIN members m ON p.added_by = m.username WHERE p.user_posted_to = '$id' ORDER BY p.id DESC LIMIT 15可以避免双重查询。你也有严重的 SQL 注入 问题。 -
....... 祝你社交网络好运!
-
它有点裸露,但您可以在 [link] (destinationstation.site40.net/index.php) 上查看我的网站。该域名只是我用来测试它的旧域名,并不是网站的名称(尚未确定)
标签: php html database post forum