arrays in PHP aus Javascript heraus füllen
Peter Ständert
- javascript
Hi Cracks,
ich bin etwas frustriert, weil ich ein (evtl.) simples Problem nicht in den Griff kriege:
Wie bekomme ich Werte aus javascript (Bildschirmkoordinaten) in ein array in PHP hinein?
Das sind meine arrays:
echo "<input type='hidden' name='x_aend[]' >";
echo "<input type ='hidden' name='y_aend[]' >";
echo "<input type ='hidden' name='id_aend[]' >";
und damit soll es aus javascript heraus gefüllt werden:
object.style.pixelLeft
object.style.pixelTop
object.id
Mit dem eval() habe ich es schon probiert:
eval ("document.formular.x_aend[" + zaehler + "].value = object.style.pixelLeft;");
aber ohne Erfolg. Er erkennt die blöden eckigen Klammern nicht, denn ich erhalte als Fehlermeldung: " 'document. formular.x_aend.0' ist Null oder kein Objekt"
Wer kann mir helfen? Danke im voraus!
Peter
Hi Cracks,
ich bin etwas frustriert, weil ich ein (evtl.) simples Problem nicht in den Griff kriege:
Ja, http://dcljs.de/faq/antwort.php?Antwort=forms_elementnamen
Struppi.
Danke Struppi, aber es hilft mir nicht wirklich weiter. Ich weiß, daß das Sonderzeichen "[" irgendwie aufgelöst werden muß, aber ich weiß immer noch nicht WIE.
Wo steckt der Denkfehler beim eval():
eval (" document.formular.x_aend[" + zaehler + "].value = "blabla");
Danke!
Peter
Danke Struppi, aber es hilft mir nicht wirklich weiter. Ich weiß, daß das Sonderzeichen "[" irgendwie aufgelöst werden muß, aber ich weiß immer noch nicht WIE.
Wo steckt der Denkfehler beim eval():
Du willst mich veräppeln, oder? hast du die Seite gelesen?
Struppi.
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:
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?
Vielen Dank für Deine Geduld
Peter
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.
Danke, aber wahrscheinlich liegt mein Problem auf einer ganz anderen Ebene. Wenn ich mir meine lange Liste von Versuchen anschaue, entdecke ich u.a. auch einen, der in etwa so aussieht, wie Du ihn vorschlägst, nur funktioniert dort etwas anderes nicht. Es stimmt zwar, daß der Syntax-Error weg ist, aber dafür kann ich meine Objekte jetzt nicht mehr auf dem Desktop verschieben und das sollte eigentlich der Witz des Programmes sein. Ich möchte nämlich Objekte auf dem Desktop verschieben und per Mausklick sollen die neuen Koordinaten abgespeichert werden.
Peter
Hi Struppi,
ich hab noch mal ein bißchen rumgespielt mit dem Problem. Selbst ein simples
alert(document.formular.elements["x_aend["zaehler"]"].value));
bringt meine ganze drag-and-drop-Lösung zum Stillstand, während ein beliebiges, anderes alert (z.B. die direkte Koordinatenausgabe)
alert ('object.style.pixelLeft = ' + object.style.pixelLeft);
anstandslos funktioniert. Also bleibt nach wie vor das Problem: Wie bekomme ich meine Pixelkoordinaten in das array UND wie funktioniert gleichzeitig drag and drop?
Peter
PS
Darf ich Dir das komplette Skript schicken?
Hi Struppi,
ich hab noch mal ein bißchen rumgespielt mit dem Problem. Selbst ein simples
alert(document.formular.elements["x_aend["zaehler"]"].value));
Och bitte, ich hab dir das letzte mal doch genau geschrieben wie und warum du anders darauf zugreifen musst.
Dein Array heisst: document.formular.elements["x_aend[]"]
und zugreifen tust du folglich so:
document.formular.elements["x_aend[]"][zaehler].value;
Darf ich Dir das komplette Skript schicken?
Nee, die E-mail adresse nutz ich nich.
Struppi.