2010-03-26 1 views
0

Моя таблица comment_likedislike. Он имеет поля comment_counterid, comment_counter, comment_id (который из другой таблицы). И у меня есть url (LIKE), который при нажатии будет ссылаться на этот код и получить comment_id и like_id.Может показаться, что мне не нравится/не нравится работать в PHP

Я хочу сделать счет, если он первый, понравится, он будет хранить новый comment_counter в таблице comment_likedislike. Но если для комментария в таблице уже есть «как», он просто обновит comment_counter до +1.

Проблема: Когда я запускаю этот код, он не ОБНОВЛЯЕТ (1-й оператор), а INSERT (2-й оператор if) независимо от того, есть ли комментарий для комментария или нет. Я не думаю, что код проверяет, есть ли comment_id в таблице.

Я новичок программист php.

Спасибо!

if (isset($_GET['comment_id']) && isset($_GET['like_id'])) { 
    $query5="SELECT * FROM comment_likedislike "; 
    $data5=mysqli_query ($dbc, $query5); 
    while ($row5= mysqli_fetch_array($data5)){ 
     $comment_id2=$row5['comment_id']; 
    } 

     if ($comment_id2 == $_GET['comment_id']){ 

      $counter=$row5['comment_counter']; 
      $counter++; 

      $query= "UPDATE comment_likedislike SET comment_counter ='$counter' WHERE comment_id= '".$_GET['comment_id']."' "; 
      mysqli_query($dbc, $query); 

     } 
     if ($comment_id2 != $_GET['comment_id']) { 
      $counter2=1; 
      $query9 = "INSERT INTO comment_likedislike (comment_counter, comment_id) VALUES ('$counter2', '".$_GET['comment_id']."')"; 
      mysqli_query($dbc, $query9); 
     } 

} 
+0

код отключен наверху ... извините – ggfan

ответ

3

Я пытаюсь сделать вывод, что вы пытаетесь сделать на основе вашего кода. Похоже, вы пытаетесь увеличить счетчик в строке, соответствующей заданному идентификатору комментария, представленному в ваших параметрах GET. И если нет строки, соответствующей этому комментарию, вы хотите создать новую.

Если это то, что вы намереваетесь сделать, значит, вы все исправите. Трудно объяснить, насколько неправильным является ваш код, потому что я не могу понять, какой образ мышления вы должны были бы использовать, чтобы придумать такой код.

Прежде всего, вы должны поставить проверку на наличие строки в запросе SQL, то вам необходимо пересмотреть структуру ваших если заявления:

if (isset($_GET['comment_id']) && isset($_GET['like_id'])) { 

    // Ignoring obvious SQL injection vulnerability for now 
    $query5="SELECT * FROM comment_likedislike WHERE comment_id = '" . 
     $_GET['comment_id'] . "'"; 

    $data5=mysqli_query ($dbc, $query5); 
    if ($row5= mysqli_fetch_array($data5)){ 
     $counter=$row5['comment_counter']; 
     $counter++; 

     $query= "UPDATE comment_likedislike SET comment_counter ='$counter' WHERE comment_id= '".$_GET['comment_id']."' "; 
     mysqli_query($dbc, $query); 
    } 
    else 
     $counter2=1; 
     $query9 = "INSERT INTO comment_likedislike (comment_counter, comment_id) VALUES ('$counter2', '".$_GET['comment_id']."')"; 
     mysqli_query($dbc, $query9); 
    }  
} 

Я также рекомендую прочитать Best way to stop SQL Injection in PHP потому что вы никогда не хотите строить запросы так, как вы делаете это в своем примере. (Или мой, если на то пошло.)

+0

благодарим вас за ввод. Я попытаюсь пересмотреть свое кодирование. – ggfan

0

Используйте echo заявление, чтобы увидеть, какие ценности вы на самом деле получаете за $_GET['comment_id'] и $comment_id2. Поскольку вы никогда не сталкиваетесь с случаем обновления, эти два значения никогда не должны быть эквивалентными.

Может быть любое количество причин, по которым они не совпадают, из дополнительных пробелов в одном или другом из значений (которые вы могли бы обрезать) в вашу HTML-форму, содержащую ошибку, которая заставляет параметр никогда не отправляться ,

4

Вы должны поместить предложение WHERE в свой SQL-запрос, а не захватывать всю таблицу и анализировать ее на PHP.

if (isset($_GET['comment_id']) && isset($_GET['like_id'])) { 
    $query5="SELECT * FROM comment_likedislike WHERE comment_id = '" . $_GET['comment_id'] . "'"; 
    $data5 = mysqli_query ($dbc, $query5); 
    $row5 = mysqli_fetch_array($data5); 

Тогда вы можете включить значение пустого ($ row5).

Ваш код не работает, потому что $ comment_id2 всегда будет последним идентификатором комментария в таблице. Вы вытаскиваете всю таблицу, затем по очереди добавляете $ comment_id2 в каждое поле comment_id.

+2

+1: Я бы использовал параметризованные запросы, чтобы избежать атак SQL-инъекций. – Powerlord

+0

Согласен. Спасибо что подметил это. :) – David

Смежные вопросы