Php 不同的图像取决于用户是否已投票
我正在开发一个链接投票网站,我有这个功能,检查用户是否已经投票链接:Php 不同的图像取决于用户是否已投票,php,Php,我正在开发一个链接投票网站,我有这个功能,检查用户是否已经投票链接: function has_voted($user) { try { $db = parent::getConnection(); $query = "select id from votes where username = '$user' and article_id = $this->id"; $res
function has_voted($user)
{
try
{
$db = parent::getConnection();
$query = "select id from votes where username = '$user' and article_id = $this->id";
$results = parent::execSQL($query);
if($results->num_rows == 1) {
return true;
}
else
{
return false;
}
parent::closeConnection($db);
}
catch(Exception $e){
throw $e;
}
}
在frontpage中,我显示了一个要用这行进行投票的图像:
<a href="/index.php?action=vote&param=<?php echo $articles[$index]->getId(); ?>">
<img class="vote_button" src="assets/images/triangulo.png" />
</a>
如果用户已经投票,我希望其插入“如果”以显示不同的图像,我尝试了此操作,但显示错误:
<a href="/index.php?action=vote&param=<?php echo $articles[$index]->getId(); ?>">
<?php if($articles[$index]->has_voted($articles[$index]->getUsername()) == true)
{ ?><img src="assets/images/triangulo.png"/></a><?php }
else
{ ?><img class="vote_button" src="assets/images/triangulo2.png" /></a><?php } ?>
+++编辑:
施奈尔
感谢您的分析,这就是我所做的:
- 好的,我把parent::closeConnection($db)拿出来了,谢谢
- 我也尝试剪切catch语句,但我得到了以下错误:
Parse error:syntax error,意外的“}”,在第155行的/home/mexautos/public\u html/kiubbo/data/article.php中应为T_catch
- 我在这里得到了用户名,我不知道它是否足够安全: 函数getUsername(){ 返回$this->username; } 我尝试了以下代码对其进行清理: $query=sprintf(“从投票中选择id,其中username='$user'和article_id=$this->id”, mysql\u real\u escape\u字符串($user), mysql_real_escape_字符串($password)) 但是我在mysql\u real\u转义行中得到了这个错误:
- 我将关闭标签外,一旦我解决这个问题,我不知道它是否单独工作
- 你是对的,我得到了错误的变量。我改成了$_SESSION['user'],它成功了
- 我理解你所说的:与其用循环来写链接,不如选择它们并把它们写下来,我将检查它们以了解如何做
- 我使用一个id,让我来实现它
事实:如果你忽视他们,他们往往会走开,因为他们感到无聊 但是如果你有一些非常一致的错误仍然不会消失,可能还有另一种策略: 在互联网上发布错误的不雅图片,最好是在SO上(程序员TMZ也是如此)。错误是一种骄傲和虚荣,所以他们中的大多数人都很羞愧,他们躲在岩石下哭泣,直到整个事情结束。只有当你没有心的时候才这样做 更新: 我不想在这里表现得不友好或不礼貌,只是你的代码有很多问题,我嘲笑你告诉我们有错误消息,但你没有告诉我们他们说了什么。所以我们知道“它不起作用”,仍然只能猜测。。。不,它不能帮助“删除这3行代码”,或者它确实可以。哪三行?3条随机线?问题是:它看起来没有太大的错误,没有明显的语法错误或任何东西。它可以工作。但这是以一种荒谬的方式进行的
- 首先,
是死代码,因为函数返回true或false,并且永远不会到达代码(parent::closeConnection($db)
)如下。这不会造成任何损害,因为通常情况下,数据库连接会在脚本结束时自动关闭。如果getConnection返回一个现有的句柄,那么这种方式可能更好,否则它将为每个查询打开/关闭连接。是的,那很糟糕。可以在脚本开始时打开一次连接,也可以在第一次使用时打开parent::closeConnection($db);
- 你的捕获声明没有多大意义。很明显,您没有处理错误,只是传递了异常(我甚至不确定这是否合法。尽管您可以通过忽略整个异常处理来实现同样的效果)。你在别的地方处理吗
- sql查询中的用户名字符串没有转义,因此攻击者可能会将其用于sql注入。取决于您从何处获取用户名。你确定你把所有东西都消毒了
- 在if语句外部打开a标记,但在内部关闭。这并不违法,因为它是有效的。但是很难看。而且,即使你已经投票了,你仍然拥有链接也很好。那么,你可以对一篇文章进行多次投票?我对此表示怀疑。我认为你应该能够撤回你的投票,但我认为最好是对此采取单独行动。可能是向上投票还是不投票?可读性,可维护性,我不是你的母亲,但请保持你的代码库干净(是的,我是个伪君子)
if($articles[$index]->has_voted($articles[$index]->getUsername()) == true) { ...
有些东西很臭:$articles[$index]->getUsername()
。我假设$article->getUsername()
返回文章作者的用户名。那么你是在检查文章的作者是否已经有了vot