Bir değişken JavaScript çıkışı için tırnak doğru kullanımı

4 Cevap php

Ben aşağıda kod ile HTML / JavaScript bir yığın oluşturma:

$result = mysql_query("SELECT * FROM posts WHERE userid = '$user_id' ORDER BY DATE desc LIMIT 5")or die (mysql_error());

while ($row = mysql_fetch_array($result))
{

    $source = $row[source];
    $source = "'$source'";

    $p = $p.'<div id="red-div"><div id="smartass"><div id="image"><img src="thumbs/'.$user_image.'" /></div><div id="playsong"><a href="#" onclick="playsong(';
    $p = p.$source;
    $p = $p.'); return false;"><img src="play.png" width="16" height="16" border="0" /></a>'.$row[artist].' - '.$row[title].'</div></div><div id="post-comment">'.$row[comment].'</div><div id="post-date">'.$row[date].'</div></div><div id="dotted-line"></div>';

}

Daha sonra aşağıdaki kodu ile benim sayfanın bir bölümünü güncelleştirmek:

parent.document.getElementById('posts').innerHTML = '<?php echo $p; ?>';

Nedense olursa olsun teklif veya $source playsong('') girmek nasıl; Ben '' playsong(theSongVariable); ve tabii böyle bir şey neden çalışmıyor playsong(); gevşek.

, Nasıl düzgün onlar playsong('') kalmak emin olmak için '' alıntı veya çıkış mı?

4 Cevap

edit: ayrıca, olmamalı

$p = p.$source;

olmak

$p = $p.$source;

btw, sen. = operatörünü de kullanabilirsiniz unutmayın. gibi

$p .= $source;

edit2: try outputting your $p for analysis using (will change < to &lt;

echo htmlspecialchars($p);

JS çizgisini kaldırmak için düzenlenebilir. açıkça içinde outputted değil bloğu. (Önce kahvemi yaşadım gerekir)

Eğer mümkünse json_encode to build a JavaScript string declaration and htmlspialchars Bir HTML öznitelik değeri olarak kullanmanız gerekir:

$onclick = 'playsong('.json_encode($row['source']).'); return false';
$p .= '<div id="red-div"><div id="smartass"><div id="image"><img src="thumbs/'.htmlspecialchars($user_image).'" /></div>';
$p .= '<div id="playsong"><a href="#" onclick="'.htmlspecialchars($onclick).'"><img src="play.png" width="16" height="16" border="0" /></a>';
$p .= htmlspecialchars($row[artist].' - '.$row[title]).'</div></div>';
$p .= '<div id="post-comment">'.htmlspecialchars($row['comment']).'</div>';
$p .= '<div id="post-date">'.$row['date'].'</div></div><div id="dotted-line"></div>';

Oh, ve IDs must be unique in documents.

Eğer $ p dize addslashes fonksiyonunu kullanarak denedim. Ben onun birincil amacı veritabanları için sorguları bina ilgilidir düşünüyorum, ama aynı zamanda sizin durumunuzda için çalışabilir.

Eğer bunları kullanmak hangi bağlam bağlı dizeleri kaçmak için farklı yolları vardır.

Belirli bir durumda kullanmak gerekir:

echo json_encode(htmlspecialchars($p, ENT_QUOTES, *your charset*));

htmlspecialchars Eğer JavaScript parçası gibi </script> gibi korkak şeyler yok böylece HTML dizileri kaçmak için yardımcı olur.

json_encode sizin dize bir JavaScript dizisi olarak geçerli olduğundan emin kılar.

Sitenizde kullanıcılara özel izinler vermek, aksi takdirde bu tür XSS ya da XSRF gibi ciddi sorunları vardır, çünkü bu çok önemli bir güvenlik kavramları vardır.

Biz konuyla ilgili konum olarak, aksi takdirde SQL injection için savunmasız çünkü $ User_id valide değer olduğundan emin olun. Örneğin, $ User_id "1 'OR '1' = '1" olabilir.

Hth