如果条款不能按要求工作

时间:2013-11-22 23:51:41

标签: php

所以我有一个论坛,用户可以在其中发布多个角色。 现在,在编辑帖子页面上,我想要在选择菜单中选择发布帖子的角色。 如果帖子已经发送并且出现错误并且播放器选择使用除最初发布帖子之外的其他字符进行编辑,我希望选择该字符。

问题是现在它打印的帖子的字符数与用户的字符数一样多。

所以让我们说这个帖子的角色叫鲍勃。拥有Bob的用户有6个字符,它将打印Bob六次。什么时候应该鲍勃选择,然后所有其他字符。如果他们选择使用其他角色进行编辑,我希望选择一个,然后打印所有其他角色。我希望你明白。

$post = $db->query("SELECT c.subject, a.message, a.hide_smilies, a.posted, b.name, b.user_id, c.id AS topic_id, c.closed, d.id AS forum_id, d.name AS forum_name FROM posts a 
               INNER JOIN characters b ON a.poster = b.id 
               INNER JOIN topics c ON a.topic_id = c.id
               INNER JOIN forums d ON c.forum_id = d.id
               WHERE a.id = $id")->fetch();


Character to edit with:
foreach($db->query("SELECT id, name FROM characters WHERE user_id = $is_logged_in ORDER BY name ASC") as $row):
if (isset($_POST['character']) && ($row['id'] == $_POST['character'])) {
   echo '<option value="'.$row['id'].'" selected>'.$row['name'].'</option>';
} else if (isset($post['name'])) {
   echo '<option value="'.$row['id'].'" selected>'.$post['name'].'</option>';
} else  {
   echo '<option value="'.$row['id'].'">'.$row['name'].'</option>';
}
endforeach

2 个答案:

答案 0 :(得分:0)

这不是一个完整的答案,但它是一个开始它太大了,不适合评论!

使用绑定变量来防止SQL注入(正如评论中其他人所建议的那样)。改进循环结构和其他改进

$sql = <<<EOF
SELECT c.subject, a.message, a.hide_smilies, a.posted, b.name, b.user_id, c.id AS topic_id, c.closed, d.id AS forum_id, d.name AS forum_name 
FROM posts a 
INNER JOIN characters b ON a.poster = b.id 
INNER JOIN topics c ON a.topic_id = c.id
INNER JOIN forums d ON c.forum_id = d.id
WHERE a.id = ?
EOF;

$stmt = $db->prepare($sql);

$stmt->bind_param("s", $is_logged_in); 
$result = $stmt->fetch();
$char_sql = <<<EOF
SELECT id, name 
FROM characters WHERE user_id = ? 
ORDER BY name ASC
EOF;

$stmt = $db->prepare($char_sql);
$stmt->bind_param( "s", $id);
$result = $stmt->execute();


foreach ($result->fetch_row($char_sql) as $row):
    $id = $row['id']; $name = $row['name'];
    if (isset($_POST['character']) && ($id == $_POST['character'])) {
       echo "<option value='{$id}' selected>{$name}</option>";
    } else if (isset($post['name'])) {
        echo "<option value='{$id}' selected>{$post['name']}</option>";
    } else  {
        echo "<option value='{$id}'>{$name}</option>";
    }
endforeach;

答案 1 :(得分:0)

更改此行:

} else if (isset($post['name'])) {

为:

} else if ($post && $post['name'] == $row['name']) {
每次循环时,

isset($post['name']都是相同的,因此您为每个提取的行打印$post['name']