ile dizeleri kesiliyor patlayabilir ve foreach

3 Cevap php

Ben, tek tek kelimelerin içine yıkmak bir veritabanında onları aramak ve daha sonra başka bir veritabanına sonuçlarını eklemek için bir php dize almaya çalışıyorum ..

Şu anda böyle dize var

"SDGCC, SDGFS ORTAYA"

Ben bu kullanıyorum bu kelimelerin GİBİ etiketleri için giriş etiketleri tabloda aramak istediğiniz

SELECT * logintags WHERE tag LIKE '% string%'

her etiket Ben patlayabilir ve foreach kullanarak denedim ama istenen etkiyi almak gibi görünmüyor dize alınır böylece.

$ String = $ _POST ['etiketler'];

$ Tags = explode (',' $ string);

foreach ($ anahtar olarak $ tags) {

$query = mysql_query("SELECT * FROM dept_logintags WHERE tag LIKE '%".$key."%'"); $r = mysql _fetch _object($query);

$ Insert = mysql_query ("INSERT INTO briefings_logintags (id, briefing_id, logintag_id) VALUES (NULL, '$ id', ' ".. $ r-> id" ') ");

}

her etiket etiket id ve brifing id arasında bir başvuru oluşturmak için ben oluşturmak için çalışıyorum etkisi ...

Ancak sadece veritabanında bir doğru girilmesini koyarak gibi görünüyor.

3 Cevap

Bir boşluk orijinal dize virgülden sonra varsa, o zaman () [, "ORTAYA", "SDGFS" "SDGCC"] gibi bir şey dönecektir patlayabilir.

Bu GİBİ fıkra sadece ilk kelime maç için neden olacaktır. Döşeme kullanmayı deneyin ():

$word=trim($key);
$safe=mysql_real_escape_string( $word );
$query=mysql_query("SELECT * FROM dept_logintags WHERE tag LIKE '%".$safe."%'");

EDIT: Artelius belirtildiği gibi, her zaman SQL enjeksiyonu önlemek için kullanıcı gönderilen verileri kaçış.

Denemek

$tags = explode(',',$string);

foreach($tags as $key) {    
    echo '"'.$key.'"<br/>';    
}

Benim tahminim bir boşluk önce ORTAYA ve SDGFS alıyorsanız olmasıdır.

Ayrıca, emin olun her zaman escape strings düzgün MySQL sorguları içine koyarak önce! Aksi takdirde birisi sunucusu için kusurlu girdi göndermek ve veritabanı üzerinde büyük hasara yol açabilir. (Bu bir SQL injection denir.)

, Internet aşk için, bir SQL sorgusu kendinizi inşa etmeyin. Kullan PDO.