Struppi: arrays in PHP aus Javascript heraus füllen

Beitrag lesen

Du willst mich veräppeln, oder? hast du die Seite gelesen?

Um Gottes willen, ich will Dich NICHT veräppeln! Und die Seite habe ich jetzt bereits 5x gelesen. Ich kriege aber damit mein Problem nicht in den Griff:

aber das steht doch da ganz klar und deutlich. Ich les mal vor:

.... Betroffen sind vor allem Autoren, die serverseitig PHP einsetzen und ein Select-Element benötigen, dessen Name auf "[]" endet. Und mancher Benutzer eines kommerziellen Formmailers benötigt ein Formularelement namens "mail-to", das mit obiger Anweisung ein Problem bereitet:

<select name="auswahl[]" multiple> ... </select>
  <input type="text" name="mail-to" /> ...

Versucht man nämlich, diese Elementnamen mit obiger Anweisung zu verwenden, erhät man einen Syntaxfehler oder eine Fehlermeldung, die besagt, dass ein Objekt oder eine Eigenschaft nicht bekannt sind. Beispiel:

if (document.formular.mail-to.value == '') {
    error = true;
  }
Der Grund dafür ist trivial: das Zeichen "-" in "mail-to" wird vom JavaScript-Interpreter als Subtraktionsoperator ("Minuszeichen") aufgefasst, man weist ihn an: "Vergleiche die Differenz aus 'document.formular.mail' und 'to.value' mit der leeren Zeichenkette". Die beiden Operanden dieser (gar nicht beabsichtigten) Subtraktionsanweisung sind natürlich nicht bekannt, und genau dies führt zur Fehlermeldung.

....

Grund: Die Element-Lookup-Operatoren "." und "[]" sind gleichwertig. Ebenso können wir bspw. mit einer Eigenschaft "farbe" eines Objekts "myObject" verfahren. Möglich sind hier die beiden Notationen:

myObject.farbe
  myObject["farbe"]

Dies machen wir uns zunutze, um den Fehler zu beseitigen: da Formularelemente nichts anderes als Eigenschaften eines Formularobjekts sind, schreiben wir die oben genannte fehlerhafte Anweisung wie folgt um:

if (document.formular["mail-to"].value == '') {
    error = true;
  }

Bei dieser Notation tritt der Name innerhalb einer Zeichenkette auf, das Zeichen "-" als Teil des Namens wird daher nicht als Operator interpretiert und es tritt kein Fehler mehr auf.

Mein PHP-array
 echo "<input type='hidden' name='x_aend[]' >";
soll bei jedem Mausklick mit diesem Wert:
 object.style.pixelLeft
gefüllt werden, wobei ein Zähler (zaehler) mitläuft. Ich habe Dutzende von Varianten ausprobiert (mit eval, ohne eval, mit einfachen, doppelten Hochkommatas, ...) alles ohne Erfolg. Prinzipiell sollte es doch mit
 eval ("document.formular.x_aend[" + zaehler + "].value = object.style.pixelLeft;");
gehen, oder sehe ich das falsch?

Ja, das geht prinzipiell, sogar ohne eval (eval ist in 99% der Fälle überflüssig und eigentlich nur nötig, wenn du per Laufzeit erzeugten code ausführen willst [z.b. usereingaben])

Der Name deines Array ist "x_aend[]" und davon willst du das x-te Element ansprechen, das geht so:

document.formular.['x_aend[]'][zaehler].value = object.style.pixelLeft;

Struppi.