2009-05-28 6 views
-1

Ich bin ein Stück HTML/JavaScript mit dem folgenden Code erstellen:Gemäße Verwendung von Zitaten für die Ausgabe von JavaScript in einer Variablen

$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>'; 

} 

ich dann einen Teil meiner Seite mit dem folgenden Code aktualisieren:

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

Aus irgendeinem Grund, egal wie ich zitiere oder gebe $source in playsong(''); Ich verliere die '' in playsong(); was zu etwas wie playsong(theSongVariable); führt und das natürlich nicht funktioniert.

Wie kann ich die '' richtig angeben oder ausgeben, um sicherzustellen, dass sie in playsong('') bleiben?

Antwort

0

edit: auch, sollte nicht

$p = p.$source; 

sein

$p = $p.$source; 

btw, vergessen Sie nicht, können Sie die Verwendung Operator =.. wie

$p .= $source; 

edit2: bereiten $ p für die Analyse zur Ausgabe verwendet (wird < zu & lt ändern;

echo htmlspecialchars($p); 

Edited JS Linie entfernen klar ausgegeben nicht aus einer <php.?> Block. (Sollte mein Kaffee zuerst gehabt haben)

+0

Wenn ich die eine Zeile herausnehmen, die fehlen verursacht ‚‘ es funktioniert ... – ian

+0

Natürlich ist es ein fehlendes $ ... Danke, die behoben es. Und das JavaScript funktioniert, weil das wird verarbeitet, dann zurück gesendet und in das JavaScript eingefügt und dann wird das JavaScript ausgeführt, wenn die Seite geladen wird, ja? – ian

1

Haben Sie versucht, mit der addslashes Funktion auf Ihre $ p-Zeichenfolge. Ich denke, sein Hauptzweck bezieht sich auf das Erstellen von Abfragen für Datenbanken, aber es kann auch in Ihrem Fall funktionieren.

+0

kein Glück damit aber gut zu wissen ... – ian

3

Wenn möglich sollten Sie json_encode verwenden, um eine JavaScript-String-Deklaration undzu erstellenes als HTML-Attribut-Wert zu verwenden:

$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, und IDs must be unique in documents.

+0

Mit json nicht versiert, aber lesen Sie auf htmlspecialchars() danke. – ian

+0

Ich denke, json_export() sollte json_encode() in Ihrem Beispiel sein –

1

Je nach dem Kontext, in dem Sie sie verwenden, gibt es verschiedene Möglichkeiten, Strings zu umgehen.

In Ihrem speziellen Fall sollten Sie verwenden: im Javascript Teil

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

htmlspecialchars Sie HTML-Sequenzen zu entkommen hilft so, dass Sie wie </script> nicht abgefahrene Dinge haben.

json_encode stellt sicher, dass Ihre Zeichenfolge als eine JavaScript-Sequenz gültig ist.

Dies sind sehr wichtige Sicherheitskonzepte, da es sonst ernste Probleme wie XSS oder sogar XSRF gibt, wenn Sie den Benutzern spezielle Berechtigungen auf Ihrer Site geben.

Da wir zum Thema sind, stellen Sie sicher, dass Ihre $ user_id ein validierter Wert ist, da Sie sonst anfällig für SQL injection sind. Zum Beispiel könnte $ user_id "1 'OR' 1 '=' 1" sein.

HTH

+0

Ist mysql_real_escape_string() der beste Weg, um meine $ user_id Variable und andere wie es zu sichern? – ian

+0

Das ist eine Option. Ich habe PHP seit mehr als einem Jahr nicht aktiv benutzt, aber wie ich mich erinnere, diskutierten sie die neuere langsamere mysqli Schnittstelle, die Platzhalter in Abfragen erlaubte. Ich würde das probieren. –