MySQL PHP mysql_real_escape_string () - Bu değer bir dize?

3 Cevap php

Ben bilgi ile bir kaydı güncelleştirmek çalışıyorum çoklu seçim kutusundan, bunu ben (mysql_real_escape_string kullanarak bu kodu eklemek için çalışıyorum ki ben yeni bir satır eklemek için INSERT INTO kullanıyordum zaman iyi çalışıyor, ama şimdi oldu ) bu yazının altındaki hata mesajı dönüyor. Bunu ben içine geçmesine çalışıyorum değeri ile yanlış bir şey var, ama tahmin ben PHP mutlu etmek için nasıl şekilleneceğini bilmiyorum!

 $query = "UPDATE studies
            SET strategies = '" . mysql_real_escape_string($strategies) . "' WHERE id = '" . mysql_real_escape_string($id) . "'"; 



while($row = mysql_fetch_array($result)) {
    $strategylist = $row['name'];
    $strategyname = htmlspecialchars($row['name']);
$pagelink = str_replace(" ","_",$strategylist);

    echo '<option value="<a href=&quot;strategies.php?strategy=' . $pagelink . '&quot;>'.$strategyname.'</a>" >' . $strategyname . '</option>' . '\n';
}

Uyarı: mysql_real_escape_string () parametre 1 hattında 100 verilen dize, dizi olmasını beklediğini (yani yukarıda satır SET stratejileri başlıyor = '".....)

3 Cevap

$ Stratejileri gibi yerine bir dize daha bir dizidir görünüyor. Eğer multi-select kutusu var çünkü onlar birden çok öğe seçerseniz, $ stratejileri bir dizi olarak geri gelecektir.

Bu o tek bir veritabanı sütununda birden seçimlerini saklamak istiyorum nasıl aşağı gelir. Sadece büyük bir dizeye birlikte seçimleri eklemek istiyorsanız, o çöktüğünü kullanın ():

// Sets strategies to a comma-separated list of selected strategies.
$query = "UPDATE studies
          SET strategies = '" . 
          mysql_real_escape_string(is_array($strategies) ? implode(',', $strategies) : $strategies) . "'
          WHERE id = '" . mysql_real_escape_string($id) . "'";

ETA:

Bir kenara, ne yapıyorsun burada gerçekten korkutucu görünüyor. Eğer o veritabanı (muhtemelen daha sonra görüntülemek için?) Olarak depolamak bir seçme kutusu seçeneği, bir değer için bir html bağlantı var.

Bu gerçekten birileri sen mutlulukla DB saklamak ve sitenizde daha sonra gösterilecek bir saldırı sitesine link içeren kendi seçenekleri ile sahte bir formu gönderdikten önemsiz bir XSS saldırısı için kendinizi açılıyor.

Eğer bunları görüntülemek için gerektiğinde daha sonra bağlantılar kurmak, sonra bir kimliği (ya da sizin durumda kimlikleri listesi) ya da veritabanında bir şey saklamak.

i think

$ Id dizesi değil

mysql_real_escape_string($id)

Bu $ stratejileri / $ id bir dizidir ve bir dize olması gerektiğini şikayet ediyor.