0

我正在开发一个问答网站。每个答案旁边都有一个“选择为最佳答案”按钮,该按钮应该对提问者可见,但对其他查看者不可见。网页的其他部分几乎相同。那么我该如何编码这个网页呢?我是否应该每次检查查看者身份以确定按钮是否应该可见。如果一个问题有很多答案,那么除了提问者之外,还有很多按钮对观众隐藏。这种编码会浪费很多额外的带宽吗?而且我认为这种编码有点可疑。有更好的方法吗?

“添加评论”按钮也有同样的问题。右下方有一个“添加评论”按钮和一个隐藏的<form><textarea></textarea></form>,如果有20个答案,就会有20个隐藏<form></form>,隐藏的代码大大增加了HTML文件的大小。有没有优雅的方式呢?

至于“添加评论”按钮,任何登录的用户都可以添加评论,因此没有身份区分。那么如何处理这个问题呢?

4

4 回答 4

5

这种类型的东西不是浪费带宽,不。是的,您应该仅在当前查看页面的用户可以使用这些控件时在页面上包含这些控件,因此请务必检查您的登录(如果他们已登录)用户是谁以及他们的关系是什么到他们正在查看的项目。

这可能很简单:

if ($current_user_id == $question_asker_id) {
  // show 'accept as best answer' form
}

在允许对任何内容进行任何更改之前,请务必检查服务器端的表单数据。

于 2009-12-18T04:20:33.620 回答
5

你不应该隐藏HTML,你不应该包含HTML。即在服务器上,你正在做这样的事情:

if ($loggedIn && $user == 'asker') {  // pseudocode
    echo acceptButton();  // outputs the HTML for the button
}

非询问者用户甚至不会在他们的浏览器中收到接受按钮的 HTML。

于 2009-12-18T04:24:49.700 回答
2

我是否应该每次检查查看者身份以确定按钮是否应该可见。

是的,检查然后不显示按钮。此外,您还应该在按下按钮后检查,并且在您处理该操作时检查它不是发起它的提问者,因为这很容易被滥用。

于 2009-12-18T04:20:17.820 回答
1

如果您担心 20 个次要表单占用大量空间(提示,它们不会,大多数服务器会压缩它们的输出,因此额外的表单几乎会被压缩掉),只需使用简单的链接。

为了隐藏只使用 if 测试,您应该检查用户的身份来执行此操作。这条 if 语句的开销(即使运行 20 次)几乎为零。

“过早的优化是万恶之源”——学习这个,活出这个。

执行此操作的“优雅”方式是(伪代码):

foreach($answers as $answer)
{
    // Print answer here
    if($current_user == $question_asker)
    {
        echo "button form here";
    }
    echo "comment form here";
}
于 2009-12-18T04:34:33.013 回答