Что я хочу, чтобы он вставил «если», чтобы отобразить другое изображение, если пользователь уже проголосовал, я пробовал это, но он показывает ошибки
ошибки? ах-ха! может быть проблема ... с ошибками. Мой совет: удаляйте ошибки с метлой или громким шумом , тогда ваш код может работать.
если это не поможет, попробуйте их игнорировать. ошибки хотят вашего внимания. вот почему в PHP (и в большинстве других языков программирования) существует так много сообщений об ошибках и уведомлений . Уведомления - это маленькие детские ошибки, еще не опасные, но когда они вырастут, они могут уничтожать приложения намного больше, чем они есть.
Факт: если вы игнорируете их, они, как правило, уходят, потому что им скучно.
но если у вас есть очень постоянные ошибки, которые все равно не исчезнут, возможно, есть другая тактика:
размещать непристойные картинки ошибок в интернете, желательно на SO (ТАК программисты TMZ). ошибки горды и тщеславны, поэтому большинству из них так стыдно, что они прячутся под скалой и плачут, пока все не затуманивается. делайте это только если у вас нет сердца.
Обновление:
я не хотел быть здесь недружелюбным или невежливым, просто в вашем коде много чего не так, и я высмеял тот факт, что вы сказали нам там WERE сообщения об ошибках, но вы не сказали нам ЧТО они сказали . поэтому мы знаем, что «это не работает» и все еще можем только догадываться… и нет, это не помогает «стереть эти 3 строки кода», или, возможно, так и есть. какие 3 строки? 3 случайные строки? проблема: это не выглядит слишком неправильно, никаких явных синтаксических ошибок или чего-то еще. это может работать . но это бессмысленно.
во-первых, parent::closeConnection($db);
является мертвым кодом, потому что функция либо возвращает true, либо false, и никогда не достигает кода (parent::closeConnection($db);
) ниже. это не принесет никакого вреда, потому что обычно соединения с базой данных закрываются автоматически в конце скрипта. это может быть даже лучше, если getConnection возвращает существующий дескриптор, иначе он будет открывать / закрывать соединения для каждого запроса. Да, это плохо. Либо откройте соединение один раз в начале вашего скрипта, либо, если вы используете его в первый раз.
ваше утверждение catch не имеет особого смысла. вы, очевидно, не обрабатываете ошибку, вы просто передаете исключение (я даже не уверен, допустимо ли это. Хотя вы могли бы добиться того же, игнорируя весь процесс обработки исключений). Вы справляетесь с этим где-то еще?
строка имени пользователя в вашем sql-запросе не экранирована, поэтому, возможно, злоумышленник может использовать ее для sql-инъекции. зависит от того, откуда вы получите свое имя пользователя. ты уверен что все продезинфицировал?
вы открываете a-тег вне оператора if, но закрываете его внутри. это не незаконно, потому что это работает. но это некрасиво более того, приятно, что у вас есть ссылка, хотя вы уже проголосовали. Итак, вы можете поднять статью более одного раза? я сомневаюсь. Я думаю, что вы должны быть в состоянии отозвать свой голос, но имхо было бы лучше иметь отдельное действие для этого. может быть upvote и unvote? удобочитаемость, удобство обслуживания, я не твоя мать, но, пожалуйста, держи свою базу кода в чистоте (и да, я лицемер).
давайте проанализируем ваше if-утверждение:
if($articles[$index]->has_voted($articles[$index]->getUsername()) == true) { ...
есть что-то вонючее: $articles[$index]->getUsername()
. я предполагаю $article->getUsername()
возвращает имя пользователя автора статьи. , поэтому вы проверяете, голосовал ли автор статьи за его собственную статью. Что вы, вероятно, хотите сделать, это отметить все сообщения VISITOR , не АВТОР , за который уже проголосовали. мы не можем вам в этом помочь, потому что мы не знаем код для получения данных о посетителях (что-то $ _SESSIONish).
итак, если вы хотите отметить статьи, за которые уже проголосовал пользователь. и kiubbo показывает 30 статей на своей первой странице. это означает, что вы запускаете sql-запросы в цикле, 30 запросов для каждого просмотра страницы, когда вам нужно ровно ноль для этого. почему ноль вместо одного? потому что вы должны оставить левый присоединиться к статьям на голосование, когда вы выбираете статьи. с другой стороны, я предполагаю, что вы получили много денег за некоторые дополнительные SQL-серверы и умение танцевать репликацию.
это не критично, но ... вы выбираете имя пользователя. нет ли идентификаторов? например, первичный ключ INT (11) authorID?
достаточно сейчас.