php und javascript

meycom

Well-known member
14 Oktober 2008
79
1
Ich hab ein Problem :
ich möchte eine php-Variable in einem alert() Fenster anzeigen.
als erstes muß ich die php_variable an Javascript übergeben und dann die Javascript Variable in der Form anzeigen:

echo "alert('Folgende Fehler sind aufgetreten: (LF,CR)

und dann die Variable $fehler anzeigen

wie bekomme ich das hin ???
 
Ich weiss ja nicht, wie Deine Skriptumgebung aussieht, aber die einfachte Variante ist die folgende:
PHP:
$foo = 'bar';
echo '<script type="text/javascript">alert("'.addslashes($foo).'");</script>';
addslashes() habe ich nur aus dem Grund eingefügt, damit man nicht drauf achten muss, was in $foo drin steckt.
 
das funktioniert aber wie bekomme ich da einen Zeilenvorschub rein ?
Ich hab folgende Variable :

$foo = "Ihre Anfrage konnte nicht versandt werden weil : ".$fehler;

wobei $fehler aus mehreren Zeilen bestehen kann.
<li>Keine Adresse</li>
<li>keine PLZ</li>

u.s.w.
 
Mit den <li>s wird das nix, da alert() nur reinen Text darstellen kann.

Die Umbrüche machen das Ganze dann schon wieder etwas komplizierter, da Javascript keine "offenen" Strings mag. Bedeutet, jeder geöffnete String muss innerhalb derselben Zeile wieder geschlossen werden, wodurch die Zeilenumbrüche logischerweise anders eingebaut werden müssen.

Ich hab dafür mal ein Beispiel gebaut:
PHP:
<?php
	$foo = "bar\nfoo\n";
	$js = 'var output = "";'."\n";

	foreach (explode("\n", trim($foo)) as $line)
	{
		$js .= 'output += "'.addslashes($line)."\\n".'";';
	}

	echo '<script type="text/javascript">'.$js.'alert(output);</script>';
?>
Funktionsweise ganz grob:

  • Definierten PHP-String nehmen und anhand der Umbrüche aufsplitten.
  • Über die erzeugten Teile iterieren und dabei die JS-Variable aus den einzelnen Teilen wieder zusammensetzen.
  • Schliesslich die erzeugte JS-Variable an alert() übergeben und fertig.
 
Versehe ich nicht ganz....??

in der Variablen $fehler steht z.B.:

<li>email nicht angegeben</li><li>strasse fehlt</li>....

u.s.w.

wenn ich das Script starte werden diese <li></li> auch angezeigt und kein Zelenumbruch... ????