Variablen innerhalb eines Formulars übergeben ohne GET oder POST
Verona
- php
0 donroca0 verona
0 Sönke Tesch0 molily
0 Thorsten Steffen0 Verona
Hallo liebe Forum-Teilnehmer,
ich hatte diese Frage zuvor schon einmal gestellt, mich aber wohl falsch ausgedrückt. Die Antworten, die ich bekommen habe, haben mir nicht weitergeholfen.
Ich habe die Formulare unten mal aufgezeigt, und denke, dass ihr so das Problem erkennt, und wahrscheinlich auch mal selbst hattet.
Wenn ein Benutzer im oberen Formular den Radio-Button Pkw anklickt, dann wird mittels Javascript onClick das Formular wieder aufgerufen und die Variable 'bus=0' übergeben. Das Formular baut sich dann entsprechend anders auf. In diesem Beispiel wird anstelle des Select-Menüs Preisstufe, dass Text-Feld Entfernung angezeigt. Bis hier hin habe ich noch kein Problem.
Falls der Benuter jetzt aber alle anderen Felder (Vorname, Nachname, Straße) bereits ausfüllt hat, und dann auf den PKW Radio-Button klickt, wird das Formular wie oben erwähnt neu aufgebaut und alle Benutzereingaben sind weg. Wie kann ich die bereits ausgefüllten Benutzereingaben aber behalten.
Ich bin mir sicher, dass das sehr sehr leicht geht, finde aber im Moment den Wald vor lauter Bäumen nicht.
Danke
V.
form.php?bus=1
---------------------------------------
| __________ |
|Vorname |__________| |
| __________ |
|Nachname |__________| |
| __________ |
|Straße |__________| |
| _ |
|Bus |x| (Radio-Button) |
| _ |
|PkW |_| (Radio-Button) |
| |
| __________ |
|Preisstufe|_________^| (Select-Menü) |
| |
| |
| _________ _____ |
| |eintragen| |reset| |
---------------------------------------
form.php?bus=0
---------------------------------------
| __________ |
|Vorname |__________| |
| __________ |
|Nachname |__________| |
| __________ |
|Straße |__________| |
| _ |
|Bus |_| (Radio-Button) |
| _ |
|PkW |x| (Radio-Button) |
| |
| __________ |
|Entfernung|__________| (Text-Feld) |
| |
| |
| _________ _____ |
| |eintragen| |reset| |
---------------------------------------
Hallo Verona,
Variante 1:
Nach Verlassen der Felder fuer Name etc. werden deren Werte in ein hidden-field ausserhalb der Form eingelesen, die vom Reset der Form verschont bleibt.
Variante 2:
wie 1. aber Variablen statt hidden-field
Variante 3:
Ein Cookie mit den Werten wird gesetzt, was aber nur sinnvoll ist, wenn beispielsweise die Seite beim naechsten Besuch den Besucher 'wiedererkennen' soll.
Variante 4:
Die Seite wird komplett neugeladen und die bereits erhaltenen Werte an die URL angehaengt.
V1 oder V2 halte ich fuer die besten, wobei ich vermutlich alle Daten aneinanderhaengen wuerde, getrennt durch ein Zeichen, das in Namen usw nicht vorkommen kann (etwa | oder £) und diesen Wert beim Neuaufbau splitten und wieder in die entsprechenden Felder einfuegen wuerde.
Dieter
Hallo donroca,
den Sinn mit den hidden fields verstehe ich nicht. Der einzige Unterschied besteht doch darin, dass das Feld nicht angezeigt wird. Ansonsten habe ich doch da das selbe Problem, oder.
Ich möchte die Datei auch zum Ändern von Daten nutzen, deshabl sieht mein Vorname-Feld so aus:
<input id="1" type="text" name="vorname" maxlength="50" value="<?php echo $vorname; ?>">
Was sollte jetzt ein weiters Feld, aber eben dann als hidden bewirken? Kann ich nicht nachvollziehen. Mein Radiobutton sieht z.B. so aus:
<input type="radio" name="bus_bahn" value="1"<?php echo $checkbus_bahn." onClick=window.location.href="".$PHP_SELF."?bus_bahn=1; ?>">Ja
Was genau habe ich denn vielleicht hier schon falsch?
Ich habe die Formulare unten mal aufgezeigt, und denke, dass ihr so das Problem erkennt, und wahrscheinlich auch mal selbst hattet.
Also _das_ nenne ich mal eine ausführliche Problembeschreibung! Wenn's doch immer so wäre.. ,)
Wenn ein Benutzer im oberen Formular den Radio-Button Pkw anklickt, dann wird mittels Javascript onClick das Formular wieder aufgerufen und die Variable 'bus=0' übergeben. Das Formular baut sich dann entsprechend anders auf. In diesem Beispiel wird anstelle des Select-Menüs Preisstufe, dass Text-Feld Entfernung angezeigt. Bis hier hin habe ich noch kein Problem.
Falls der Benuter jetzt aber alle anderen Felder (Vorname, Nachname, Straße) bereits ausfüllt hat, und dann auf den PKW Radio-Button klickt, wird das Formular wie oben erwähnt neu aufgebaut und alle Benutzereingaben sind weg. Wie kann ich die bereits ausgefüllten Benutzereingaben aber behalten.
form.php?bus=1
|Bus |x| (Radio-Button) |
| _ |
|PkW |_| (Radio-Button) |
| |
| __________ |
|Preisstufe|_________^| (Select-Menü) |
form.php?bus=0
|Bus |_| (Radio-Button) |
| _ |
|PkW |x| (Radio-Button) |
| |
| __________ |
|Entfernung|__________| (Text-Feld) |
Zwei Möglichkeiten:
1. Zusätzlich zum Parameter bus alle anderen Felder mit übergeben. Da Du das mit bus schon gemacht hast, wird es bei den anderen Feldern sicher kein Problem sein, weitere Erklärung überflüssig.
2. Viel schöner wäre es allerdings, wenn das Formular garnicht erst neu übertragen werden müsste. Du kannst über das CSS-Attribut display Elemente in einer Seite verschwinden und wieder auftauchen lassen.
Dazu verpackst Du die Preisstufen- und Entfernungselemente in jeweils ein <div>-Block. Jeder <div>-Block bekommt eine eindeutige Kennung, z.B. <div id="preisstufenblock"> und <div id="entfernungsblock">. Über die Funktion document.getElementById([kennung]) kannst Du dann auf diesen Block zugreifen und das Attribut display zwischen "none" (versteckt) und "block" (anzeigen) umschalten, zum Beispiel:
document.getElementById("preisstufenblock").setAttribute("display","none");
Das Document Object Model findest Du in SelfHTML unter Javascript/DOM, insbesondere im node-Objekt.
Eine ähnliche Anwendung findest Du hier in der Forumshauptdatei: Klickst Du auf die kleine Grafik links von jedem Threadanfang, wird der Thread versteckt. Klickst Du nochmals drauf, erscheint er wieder.
Gruß,
soenk.e
PS: Für den Code werde ich hoffentlich nicht gesteinigt, er könnte fehlerbehaftet sein.
Hallo, Sönke,
- Viel schöner wäre es allerdings, wenn das Formular garnicht erst neu übertragen werden müsste.
Meiner Meinung nach lässt sich das alles auch ohne (das heißt mit optionalem) JavaScript benutzerfreundlich lösen.
Du kannst über das CSS-Attribut display
»CSS-Eigenschaft«. Du verwechselst CSS-Eigenschaften mit HTML-Attributen.
Elemente in einer Seite verschwinden und wieder auftauchen lassen.
Die Lösung in [pref:t=34668&m=188877] passt schon eher.
[...] und das Attribut display zwischen "none" (versteckt) und "block" (anzeigen) umschalten, zum Beispiel:
Das HTML-Element div hat keine HTML-Attribut namens display... ;)
document.getElementById("preisstufenblock").setAttribute("display","none");
Mit setAttribute werden HTML-Attribute gesetzt, keine Styleeigenschaften. Zu diesem Zweck kann vom style-Objekt Gebrauch gemacht werden.
PS: Für den Code werde ich hoffentlich nicht gesteinigt, er könnte fehlerbehaftet sein.
...
Grüße,
Mathias
hio,
Zunächst mal, ich gehe mal davon aus, das du dir Gedanken gemacht hast, was passiert wenn JavaScript deaktiviert ist?
Also, so wie ich es verstanden habe, prüfst du Veränderungen an dem Formular mit Hilfe von Javascript, schickst bei einer solchen das Formular ab und lässt es neu aufbauen.
Ok, mein Ansatz wäre, lass das abschicken des Formulares zunächst mal sein, da du eh schon mit Javascript arbeitest, kannst du die Veränderungen am Formular auch mit Javascript machen. Wobei es imho immer der bessere Weg ist ein Formular _ohne_ Javascript voll bedinbar machen. Wobei ich in dem Punkt wenig sagen kann, kenne die Aufgabenstellung nicht. Diesen Punkt solltest du dir jedoch mal überlegen.
Ok, zum Lösungvorschlag.
Wenn ein Benutzer im oberen Formular den Radio-Button Pkw anklickt, dann wird mittels Javascript onClick das Formular wieder aufgerufen und die Variable 'bus=0' übergeben. Das Formular baut sich dann entsprechend anders auf. In diesem Beispiel wird anstelle des Select-Menüs Preisstufe, dass Text-Feld Entfernung angezeigt. Bis hier hin habe ich noch kein Problem.
function showEntfernung() {
document.getElementById("Preisstufe").style.diplay = "none";
document.getElementById("Entfernung").style.diplay = "inline";
}
<form>
<select id="Preisstufe" name="Preisstufe">
<option></option>
</select>
<input type="text" id="Entfernung" name="Entfernung">
</textarea>
</form>
so blendest du z.b. die Preisstufe aus und die Entfernung ein. Das als ein Vorschlag (ungetestet). So musst die die Eingabe nicht wiederherstellen. Du musst dan bei der entgültigen Auswertung des Formulares halt darauf achten welche Konstellation besteht.
Nochmals zu deiner Eingangsfrage, _ohne_ GET oder POST kannst du Serverseitig das Formular nicht auswerten. Und wenn du wirklich die Seite neuaufbauen willst, müsstest du, wenn du das über location.href machst, dann die Eingabe an die URL anhängen.
z.b. location.href = 'Name='. document.forms["Formular"].Name.value
gl & hf
Thorsten
Vielen lieben Dank,
DOM!!! Manoman! Das hatte ich schon einmal gehört. Ich werd's schaffen. Danke Danke Danke
Es ist tatsächlich wie hier im Forum selbst. Suuuper Yippieee