Variablen an JavaScript übergeben
irato
- php
0 Der Martin
0 irato0 Der Martin
0 irato0 Der Martin
0 irato
0 Rouven0 irato
0 MudGuard
Sorry, die Geschichte hat einen Bart, aber ich komme einfach nicht weiter:
Ich möchte eine ASCII-Datei mit php einlesen und deren Inhalt in einem String an JS übergeben.
Das einlesen geschieht und klappt wie folgt:
<html>...
<?php
$datei = "message.txt";
$File = fopen($datei, 'r+');
$txt = fread($File, filesize($datei));
fclose($File);
echo $txt;
?>
Das JS:
<script type="text/javascript">
info = "<?php echo $txt;?>";
document.write(info);
</script>
</html>
Aber irgendwas läuft mit der Übergabe falsch (und ich weiss einfach kein Bescheid!)
Wie um Gotteswillen kriege ich das gebacken?
Hallo,
Ich möchte eine ASCII-Datei mit php einlesen und deren Inhalt in einem String an JS übergeben.
Rein formal finde ich an deinem Codeauszug nichts auszusetzen.
Aber...
<script type="text/javascript">
info = "<?php echo $txt;?>";
document.write(info);
</script>
Ich vermute mal ganz stark, dass der Dateiinhalt $txt unmaskierte Steuerzeichen (z.B. Zeilenumbrüche) oderAnführungszeichen oder ähnliches Gerümpel enthält. Leider gibst du keine brauchbaren Anhaltspunkte:
Gibt es Errors oder Notices von PHP? Wenn ja, welche?
Wird ein Javascript-Fehler gemeldet? Welcher?
Bedenke, dass $txt nichts enthalten darf, was innerhalb eines JS-Strings so nicht stehen darf!
So long,
Martin
--
Zwischen Leber und Milz
passt immer noch'n Pils.
Hallo Martin,
Rein formal finde ich an deinem Codeauszug nichts auszusetzen.
dachte ich auch...
Ich vermute mal ganz stark, dass der Dateiinhalt $txt unmaskierte Steuerzeichen ...
"abc" kein Return o.ä.
Gibt es Errors oder Notices von PHP? Wenn ja, welche?
keine!
<script type="text/javascript">
info = "<?= getenv($txt); ?>";
document.write(info);
info = "<?= getenv("REMOTE_ADDR"); ?>";
document.write(info);
</script>
Wäre im Script ein Error, würde die ip nicht angezeigt! Könnte es sein, dass $txt der Fehler ist?
Gibt es nicht auch andere Möglichkeiten der Variablenübergabe?
Ich werd noch varuckt!
;)
Hallo,
Ich vermute mal ganz stark, dass der Dateiinhalt $txt unmaskierte Steuerzeichen ...
"abc" kein Return o.ä.
Sicher? Auch nicht am Dateiende, so dass es dann als
info = "abc
"
im Quelltext stehen würde?
Gibt es Errors oder Notices von PHP? Wenn ja, welche?
keine!
Gut. Das habe ich vermutet.
info = "<?= getenv($txt); ?>";
document.write(info);
info = "<?= getenv("REMOTE_ADDR"); ?>";
document.write(info);
Wäre im Script ein Error, würde die ip nicht angezeigt!
Bisher hast du uns ja noch nicht verraten, was angezeigt wird und was nicht.
Könnte es sein, dass $txt der Fehler ist?
Ja, $txt ist sehr wahrscheinlich der Fehler. Untersuche diesen String mal Zeichen für Zeichen, und zwar schon serverseitig im PHP-Script. Ich bin mir ziemlich sicher, da findest du irgendein Zeichen drin, das du da nicht haben möchtest.
Gegenprobe: Setz mal im PHP-Script einfach $txt = "teststring"; und sieh nach, was dann rauskommt.
Good luck anyway,
Martin
<?php
$datei = "message.txt";
$File = fopen($datei, 'r+');
$abc = fread($File, filesize($datei));
fclose($File);
$abc = "teststring";
echo "<p>";
echo $abc;
echo "</p>";
?>
<script type="text/javascript">
info = "<?= getenv($abc); ?>";
document.write(info);
document.write("abc");
</script>
angezeigt wird:
teststring
abc
Browser-Quelltext:
<p>teststring</p><script type="text/javascript">
info = "";
document.write(info);
document.write("abc");
</script>
Hi,
<?php
[...]
$abc = "teststring";
echo "<p>";
echo $abc;
echo "</p>";
?>
<script type="text/javascript">
info = "<?= getenv($abc); ?>";
document.write(info);
document.write("abc");
</script>
das ist mal ein schön reduziertes Test-Szenario. :-)
angezeigt wird:
teststring
abc
Richtig. Die erste Zeile "teststring" ist noch die direkte Ausgabe deines PHP-Scripts (im Quelltext: "<p>teststring</p>"), die Zeile darunter ist das Ergebnis von document.write("abc"); im Javascript. Das document.write(info) wird garantiert auch ausgeführt, aber info dürfte ein Leerstring sein. Denn mit getenv() greifst du in PHP auf die Variablen zu, die im PHP-Environment hinterlegt sind, sowie auf die GET- POST- und COOKIE-Daten. Aber nicht auf normale Script-Variablen. Die Anweisung <?= getenv($abc); ?> gibt daher einen Leerstring aus.
Informativer wäre es gewesen, wenn du info="<?= $abc; ?>"; notiert hättest. Dann hättest du erkannt, dass die Variablenübergabe an sich klappt (teststring wäre zweimal ausgegeben worden).
Hast du inzwischen untersucht, was nach
$abc = fread($File, filesize($datei));
_wirklich_ in $abc steht?
So long,
Martin
Hallo, hallo, das war der Fehler!
<?= getenv($abc); ?>
ist ursächlich für den Leerstring!
info="<?= $abc; ?>";
ist die Lösung für NullAchtFuffzehnVaris (und für mich) gewesen...
1000 Dank!
Als Ergänzung:
Schau dir mal _nicht_ den PHP-Code an, sondern öffne mal die Quelltextansicht im Browser. Das sollte schon helfen zu erkennen was da wohl schief läuft, wobei Martin's Vermutung extrem wahrscheinlich ist.
MfG
Rouven
Hi Rouven,
Klasse Idee, so siehts aus:
php zeigt "abc" mit echo tadellos an...
Quelltext:
<script type="text/javascript">
info = "";
document.write(info);
info = "89.53.119.249";
document.write(info);
</script>
also info wird ohne Fehler (und ohne Inhalt) ausgegeben, soviel zur Syntax-Richtigkeit...
Hi,
Das JS:
<script type="text/javascript">
info = "<?php echo $txt;?>";
document.write(info);
</script>
</html>
Warum schreibst Du per PHP etwas ins Javascript, was das Javascript dann direkt ins Dokument schreibt?
Wäre es da nicht sinnvoller, den Umweg über Javascript wegzulassen und die Ausgabe direkt per PHP ins Dokument zu schreiben?
cu,
Andreas