Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 不同的图像取决于用户是否已投票_Php - Fatal编程技术网

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&amp;param=<?php echo $articles[$index]->getId(); ?>">
<img class="vote_button" src="assets/images/triangulo.png" />
</a>

如果用户已经投票,我希望其插入“如果”以显示不同的图像,我尝试了此操作,但显示错误:

    <a href="/index.php?action=vote&amp;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转义行中得到了这个错误:

警告:mysql_real_escape_string()[function.mysql real escape string]:在第145行的/home/mexautos/public_html/kiubbo/data/article.php中拒绝用户'mexautos'@'localhost'(使用密码:否)的访问 警告:mysql_real_escape_string()[function.mysql real escape string]:无法在第145行的/home/mexautos/public_html/kiubbo/data/article.php中建立到服务器的链接 警告:mysql_real_escape_string()[function.mysql real escape string]:第146行/home/mexautos/public_html/kiubbo/data/article.php中的用户'mexautos'@'localhost'(使用密码:否)的访问被拒绝 警告:mysql_real_escape_string()[function.mysql real escape string]:无法在第146行的/home/mexautos/public_html/kiubbo/data/article.php中建立到服务器的链接

  • 我将关闭标签外,一旦我解决这个问题,我不知道它是否单独工作

  • 你是对的,我得到了错误的变量。我改成了$_SESSION['user'],它成功了

  • 我理解你所说的:与其用循环来写链接,不如选择它们并把它们写下来,我将检查它们以了解如何做

  • 我使用一个id,让我来实现它

谢谢, CS

如果用户已经投票,我希望它插入一个“如果”以显示不同的图像,我尝试了这个,但它显示错误

错误?啊哈!可能有个问题。。。带着错误。我的建议是:用扫帚或大声的噪音把错误赶走,这样你的代码就可以工作了

如果这没有帮助,试着忽略它们。错误需要你的注意。这就是为什么在PHP(以及大多数其他编程语言)中有如此多的错误消息和通知的原因。通知是小错误,还不算危险,但当它们长大后,它们可以删除比它们大得多的应用程序。
事实:如果你忽视他们,他们往往会走开,因为他们感到无聊

但是如果你有一些非常一致的错误仍然不会消失,可能还有另一种策略:

在互联网上发布错误的不雅图片,最好是在SO上(程序员TMZ也是如此)。错误是一种骄傲和虚荣,所以他们中的大多数人都很羞愧,他们躲在岩石下哭泣,直到整个事情结束。只有当你没有心的时候才这样做

更新:

我不想在这里表现得不友好或不礼貌,只是你的代码有很多问题,我嘲笑你告诉我们有错误消息,但你没有告诉我们他们说了什么。所以我们知道“它不起作用”,仍然只能猜测。。。不,它不能帮助“删除这3行代码”,或者它确实可以。哪三行?3条随机线?问题是:它看起来没有太大的错误,没有明显的语法错误或任何东西。它可以工作。但这是以一种荒谬的方式进行的

  • 首先,
    parent::closeConnection($db)
    是死代码,因为函数返回true或false,并且永远不会到达代码(
    parent::closeConnection($db);
    
    )如下。这不会造成任何损害,因为通常情况下,数据库连接会在脚本结束时自动关闭。如果getConnection返回一个现有的句柄,那么这种方式可能更好,否则它将为每个查询打开/关闭连接。是的,那很糟糕。可以在脚本开始时打开一次连接,也可以在第一次使用时打开

  • 你的捕获声明没有多大意义。很明显,您没有处理错误,只是传递了异常(我甚至不确定这是否合法。尽管您可以通过忽略整个异常处理来实现同样的效果)。你在别的地方处理吗

  • sql查询中的用户名字符串没有转义,因此攻击者可能会将其用于sql注入。取决于您从何处获取用户名。你确定你把所有东西都消毒了

  • 在if语句外部打开a标记,但在内部关闭。这并不违法,因为它是有效的。但是很难看。而且,即使你已经投票了,你仍然拥有链接也很好。那么,你可以对一篇文章进行多次投票?我对此表示怀疑。我认为你应该能够撤回你的投票,但我认为最好是对此采取单独行动。可能是向上投票还是不投票?可读性,可维护性,我不是你的母亲,但请保持你的代码库干净(是的,我是个伪君子)

让我们分析一下您的if语句:

if($articles[$index]->has_voted($articles[$index]->getUsername()) == true) { ...
有些东西很臭:
$articles[$index]->getUsername()
。我假设
$article->getUsername()
返回文章作者的用户名。那么你是在检查文章的作者是否已经有了vot