Benim gibi / sevmemek PHP işe almak gibi olamaz

3 Cevap

My table is comment_likedislike. It has the comment_counterid, comment_counter, comment_id(which is from another table) fields. And I have an url (LIKE) that when clicked would link to this code and get the comment_id and like_id.

Ben 'gibi' ilk ise, bu comment_likedislike tabloda yeni bir comment_counter saklamak istiyorsunuz sayımını yapmak istiyorum. Tablodaki Yorumlarınız için 'gibi' var zaten ama eğer, sadece +1' comment_counter güncelleştirmek.

Bu kodu çalıştırdığınızda Problem:, bu (1. deyimi) GÜNCELLEMEYİ yok ama yorumun veya bir benzeri varsa (2. deyimi eğer) olursa olsun INSERT. Ben comment_id zaten tabloda ise kod denetimi sanmıyorum.

Ben bir acemi php programcı değilim.

Teşekkürler!

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);
        }

}

3 Cevap

Ben size koduna göre yapmaya çalışıyoruz ne anlaması çalışıyorum. Eğer GET parametrelerinde verilen açıklama kimlik günümüze gelen bir satırda bir sayaç artırmak için çalışıyorsanız gibi görünüyor. Ve yeni bir tane oluşturmak istediğinizi Yorumlarınız karşılık hiçbir satır varsa.

Eğer yapmak isteyen buysa o zaman yanlış tüm ilgili gidiyoruz. Ben böyle kod ile gelip olmak zorunda olurdu zihniyet anlamaya olamaz çünkü kodunuzu nasıl yanlış açıklamak biraz zor.

Her şeyden önce, SQL sorgusunda satırın varlığı için kontrol koymak gerekir, o zaman yapısını revize ihtiyacınız if ifadeleri:

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);
    }    
}

Eğer bina sizin örnekte bunu yapıyoruz yolu sorgular olmak istemiyorum, çünkü ben de Best way to stop SQL Injection in PHP okumanızı tavsiye ederim. (Ya benim bu konuda.)

Bunun yerine bütün tablo kapma ve PHP ayrıştırma daha SQL sorgusu içine bir WHERE yan tümcesi koymak gerekir.

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);

Sonra ($ row5) boş değerine geçiş yapabilirsiniz.

$ Comment_id2 her tablodaki son açıklama kimliği olacak çünkü kod bozuldu. Sen tüm tabloyu çekin, daha sonra sırayla her 'comment_id' alanına $ comment_id2 ayarlayın.

Aslında $_GET['comment_id'] için alıyorum ve $comment_id2 konum hangi değerleri görmek için echo deyimini kullanın. Eğer güncelleme davayı isabet asla konum beri, iki değerler eşit olmamalıdır.

Bu parametre gönderilecek asla neden olan bir hata içeren HTML formu (dışarı Döşeme olabilir) değerlerden biri veya diğer ekstra boşluklarından, uyan değil nedeni herhangi bir sayıda olabilir.