php array als alert ausgeben
Hallo zusammen,
ich stehe gerade vor einem Problem, das mich in den Wahnsinn treibt.
Ich möchte den Inhalt eines php arrays in einer alert - box ausgeben. Also habe ich einfach mal standartmäßig eine Schleife mit dem array erstellt:
for ($i = 0; $i < $durchlauf; $i++) {
echo $ergebnis[$i] ."<br>";
}
Nun frage ich mich aber, wie ich den Inhalt, also $ergebnis, in einer alert - box ausgeben kann. Wenn ich es in die Schleife packe, kommt ja immer ein alert, für jeden Index.
Ich stehe gerade irgendwie auf dem Schlauch^^
Über Antworten wäre ich sehr dankbar!
Grüße, Hummel
5 Antworten
Öhm
Also fangen wir an .
Erstens ist alert Box warscheinlich das JavaScript gemeinte .
Du hast da aber PHP .
Also willst du das PHP Array in einer JavaScript alert funktion unterbringen .
<?php
$alertdingens = "";
$durchlauf = count($ergebnis);
for ($i = 0; $i < $durchlauf; $i++) {
$alertdingens .= $ergebnis[$i].'\n' ;
}
// HTML Ausgabe JavaScript
$page =<<<PAGEEND
<html>
<head>
</head>
<body>
<script type="text/javascript">
alert('$alertdingens');
</script>
</body>
</html>
PAGEEND;
// ab zum client damit
echo $page;
?>
Hallo RakonDark,
schonmal vielen Dank für deine Antwort!
Das ist exakt die Antwort von Ascy70, nur etwas ausführlicher ;-)
Manchmal braucht man wieder einen fremden Einfall, wenn man sich in eine Variante verfahren hat...
Mal eine andere Frage:
Wenn ich in php ein Script ausgebe, in folgender Form:
echo "<script>alert('blabla \n blabla');</script>";
haut er mir eine leere Alert Box raus. Warum? Wenn ich den Zeilenumbruch "\n" entferne, funktioniert es wieder. Woran liegt das?
Über eine Antwort würde ich mich freuen!
Grüße,
Hummel
Nun die Antwort von oakkumulator wäre wohl der eleganteste Weg mit einem kleinen Problem. Richtig müsste es so lauten:
<script type="text/javascript">
alert('<?php echo implode('\n', $ergebnis); ?>');
</script>
implode gibt ein String zurück, der muss natürlich mit einem echo ausgegeben werden und kann nicht alleine im alert stehen, wie in der Antwort von oakkumulator.
Weiter ist es richtig, dass PHP doppelte Quotes brauch um z.B. Zeilenumbrüche zu verwenden. Das Problem ist aber, dass wir damit den Quelltext des gerenderten JavaScripts umbrechen. JavaScript kann selbstständig mit den Zeilenumbrüchen arbeiten, wir müssen also einfache Quotes innerhalb von implode verwenden, damit PHP hier keine Umbrüche erzeugt und die von JavaScript im alert erfolgen.
Hallo,
vielen Dank für die Korrektur des Scripts ;-)
Jetzt habe ich auch endlich verstanden, warum "\n" einen Fehler verursacht hat - vielen Dank!
Du hast mir wirklich gut weitergeholfen, die Lösung für meine Antwort habe ich aber als hilfreichste Antwort ausgewählt, dir sende ich ein "Kompliment" als Entschädigung ;-)
Grüße,
Hummel
Ich hoffe ich versteh Dich richtig, vielleicht kannst Du bei jedem Durchlauf eine zweite Variable um den neuen Inhalt erweitern, also sinngemäß
$gesamtvariable .= $ergebnis[$i]
Hinter der Schleife packst Du dann $gesamtvariable in die Alertbox
ok den Zeilenumbruch hab ich vergessen, aber ich hoffe es kam rüber was ich meinte :D
1. ansatz: statt der schleife
print_r ($ergebnis);
Hallo,
schön, damit gibt er mir das komplette Array mit Index aus, dass ist für den Besucher nicht wirklich schön und führt zu Verwirrungen...
Ich habe es mit der Idee von Antwort 1 umgesetzt.
Danke dennoch!
Grüße,
Hummel
<script type="text/javascript">
<?php implode("\n" . $ergebnis); ?>
</script>
Hallo,
erstmal danke für deine Antwort!
Verstehe ich das richtig, dass du das so meinst?
$ergebnis = implode("\n" . $ergebnis);
echo "<script>alert('".$ergebnis."');</script>";
Das funktioniert leider nicht. Die alert-Box bleibt leer.
Woran liegt das?
Grüße,
Hummel
Übrigens liegt meist der denkfehler bei :
PHP und JavaScript haben keine interaktion .
Das PHP läuft bis zum ende und schickt erst dann alles raus . Weder kann von einem noch von der anderen seite aus irgendwie zugegriffen werden . AJAX ist dann wiederum eine möglichkeit im hintergrund etwas nach zu laden , dazu liefert aber das php auch nur wieder klartext aus was dann im client verarbeitet werden muss und andersrum auch .