46356
Goto Top

Formular aktualisierung verhindern

Guten Abend.

Grundsätzlich geht es um die Frage, wie ich es verhindern kann, dass Formulare, bei denen entweder die Url verändert wird oder die aktualisiert werden das Input Feld geleert wird...

Und zwar habe ich ein Formular (kurzform):

<form ... action="thispage.php" ...>  
Name: <input type="text" name="name">  
Nachname: // Hier werden Einträge aus einer Datenbank geholt und der User muss den Link schlussendlich anklicken der seinem Nachnamen entspricht: Also
<a href="?surname=A">A</a> // Das a und b entspricht dem Wert aus der Datenbank ($row->A;)  
<a href="?surname=B">B</a>  
<input type="submit" value="Absenden">  
</form>

<-- Noch mal zusammenfassend:
Der User schreibt seinen Vornamen in das Feld (Name).
Die Datenbank holt die Nachnamen. Der User klickt seinen Namen an. Der Nachname wandert in die Url.
Das Formular wird aktualisiert :@ und das Feld Vorname (Name) wird geleert. Dies möchte ich aber verhindern!

A ja und noch ein 2.tes Problem ergibt sich bei diesem Script:
Wird das Formular abgesendet, kann ich über $_HTTP_GET_VARS['surname'] den Nachnamen nicht mehr abrufen, da er nicht mehr in der URL steht.

Anmerkung: Dies ist nur ein Beispiel und in Echt wählt der User natürlich nicht seinen Nachnamen aus gg

Liebe Grüße und ich bin gespannt auf Eure Antworten,
Alex

Content-Key: 95497

Url: https://administrator.de/contentid/95497

Printed on: April 20, 2024 at 04:04 o'clock

Member: bytecounter
bytecounter Aug 28, 2008 at 07:48:19 (UTC)
Goto Top
Hi Alex,

also so ganz verstanden habe ich das noch nicht. Aber warum machst Du das Ganze nicht mit Ajax? Mit einem XML-Request hast Du das Problem mit der URL nicht mehr. Die Daten kannst Du einfach in einer Session speichern.
Solange Du Daten an eine URL hängst, kann man die jederzeit problemlos (absichtlich) "verbiegen"..

vg
Bytecounter
Member: Arano
Arano Aug 28, 2008 at 13:46:25 (UTC)
Goto Top
Moin...

hm... warum werden die Nachnamen den als Hyperlinks angegeben ?
Wenn du auf einen von denen klickst, hat das mit dem eigentlichem Formular nichts mehr zu tun und dieses wird auch __nicht__ abgeschickt !

Verwende stattdessen doch das <select> (Dropdownliste).
Dann wird beim versenden auch der Name wieder mitgeschickt (weil jetzt das Formular ja abgeschickt wird) den du dann auch wieder anzeigen lassen kannst.
<?php
  echo '<input type="text" name="name" value="'.(isset($_GET['name'] && trim($_GET['name'])!='' ? $_GET['name'] : '').'">';  
?>

~Arano

@bytecounter: weil dann auch ein alternativer Weg her __muss__ für all die die Javascript deaktiviert haben !
Meiner Meinung nach so schon richtig, erst ohne irgendwelchen Javascript zusätzen und dann für die Javascript Freunde mit Extras "erweitern".
Mitglied: 46356
46356 Aug 28, 2008 at 19:40:26 (UTC)
Goto Top
Hallo Arano!

Das mit der Dropdownliste habe ich mir auch schon überlegt.
Aber bei mir hat es nicht funktioniert.

Ich erklär nun schnell die Alterantive:
Es gibt 3 Themen.
Zum Beispiel: Thema A = IT
Thema B = Programmieren
Thema C = PHP
---
hier wird der Stammbaum angezeigt.

Was ich nun genau machen möchte ist, dass alle drei Werte aus einer Datenbank ausgegeben werden.
Und zwar so, dass es drei selects gibt.
Das A select ist immer das, das als erstens angezeigt wird. Dann klickt der User auf einen Wert von A, und das 2 Select wird angezeigt (in PHP / MySQL hätte ich das so realisiert: SELECT A, B FROM Links WHERE A = '$stammbaum von A'
Wie ist es aber möglich dass das ausgewählte Feld im select Tag sofort eine Variable zugewiesen bekommmt (sprich dass das zweite select ohne einen Butten etc. automatisch mit den Werten aufscheint, die zum ausgewählten A gehören....

Laut google wäre das Zauberwort dynamisches Dropdown.

Aber das ist Javascript und ich habe überhaupt keine Ahnung wie ich das mit einer Datenbank verknüpfen kann.

---
Das mit dem Vornamen etc. war nur einen Vereinfachung. In Wirklichkeit handelt es sich um die Links, die ich bis jetzt an die URL gehängt habe...

LG. Alex
Member: bytecounter
bytecounter Aug 29, 2008 at 07:17:37 (UTC)
Goto Top
Hallo,

alles was sich erst beim Client entscheidet, ist Javascript. Wenn Du es ohne JS machen möchtest, bleibt Dir nichts anderes übrig, als das Formular nach der ersten Auswahl zum Server zu schicken, und das zweite Menu mit PHP zu erzeugen.

..wobei mir gerade einfällt: Vielleicht wären verschachtelte Auswahllisten Deine Lösung:
http://de.selfhtml.org/html/formulare/auswahl.htm#menuestruktur

vg
Bytecounter
Mitglied: 46356
46356 Aug 29, 2008 at 08:50:54 (UTC)
Goto Top
Hallo bytecounter!

Danke für den Tip! Das wäre genauso gut... :D
Aber lassen sich damit auch drei Optionen anzeigen?
Z.b.:
IT
->Programmieren
-->PHP
-->Java
-->C#
->Betriebssysteme:
-->Windows
-->Mac
usw.

Nach selfhtml geht das nicht:
Mit <optgroup> ist in HTML und XHTML nur eine einzige tiefere Ebene möglich, innerhalb eines optgroup-Elements darf kein weiteres optgroup-Element vorkommen. Eine Menüverschachtelung über mehrere Ebenen ist daher derzeit nicht realisierbar, auch wenn diese Möglichkeit mit den Worten "könnte eventuell später mal kommen" im HTML-Standard eingeräumt wird.

Vielleicht eine Alternative?
LG. Alex
Member: bytecounter
bytecounter Aug 29, 2008 at 09:26:25 (UTC)
Goto Top
Hmm...langsam wird's trickreich face-wink

Du könntest so eine Verschachtelung auch nur grafisch realisieren:
<optgroup label="IT">  
  <option style="padding-left:5px;" label="...">Programmieren</option>  
  <option style="padding-left:10px;" label="...">PHP</option>  
  <option style="padding-left:10px;" label="...">Java</option>  
  <option style="padding-left:5px;" label="...">Betriebsyssteme</option>  
  ....
</optgroup>

Durch das padding rückst Du den Text einfach weiter nach rechts, wodurch Du die verschiedenen Ebenen darstellst. Hat zwar den Nachteil, dass man auch auf Programmieren klicken kann, aber da würde ich dann auf der Folgeseite einfach alle dazugehörenden Themen auflisten.

Ansonsten doch Javascript..

vg
Bytecounter
Mitglied: 46356
46356 Aug 29, 2008 at 10:10:44 (UTC)
Goto Top
Hallo bytecounter!

Vielen, vielen Dank für die vielen Tips :D
Die letzte Möglichkeit erwies sich bis jetzt als die beste und ich werde die nun verwenden (DANKE)

LG. Alex
Mitglied: 46356
46356 Aug 29, 2008 at 11:51:03 (UTC)
Goto Top
Hallo nochmals...
Es funktioniert zwar, aber wie kann ich doppelte Einträge verhindern?

							<select name="select">	  
							<?php
							$abfrage = "SELECT A, B, C FROM Links";  
							$ergebnis = mysql_query($abfrage);
							while($row = mysql_fetch_object($ergebnis))
							   {
							?>

											
							<optgroup label="<?php echo $row->A; ?>">  
							  <option style="padding-left:5px;" label="<?php echo $row->B; ?>"><?php echo $row->B; ?></option>  
							  <option style="padding-left:10px;" label="<?php echo $row->C; ?>"><?php echo "-->".$row->C; ?></option>  

							<?php } ?>
							</select>

Hab mal ein Bild angehängt, dann seht ihr, wie ich es meine:
59fb6dd8e7f28cb817f741c8892ca2ee-thislike
Mitglied: 46356
46356 Aug 29, 2008 at 11:52:25 (UTC)
Goto Top
Ach ja:
Distinct bzw. GROUP BY
bringen nichts...

Sonst bin ich wieder beim Ausgangsprobel ;)
LG. Alex
Member: bytecounter
bytecounter Aug 29, 2008 at 12:00:27 (UTC)
Goto Top
Um das Bsp IT->asdf->asdf nehmen:

Dann steht "asdf" ja in den Spalten B und C, oder sehe ich da was falsch?
Ansonsten müsste ich mal den Aufbau Deiner Datenbank haben, falls ich das nu falsch verstanden hab.

Eventuell hilft Dir folgender Code:

...
 <option style="padding-left:5px;" label="<?php echo $row->B; ?>"><?php echo $row->B; ?></option>   
<?php if ($row->B != $row->C) {
  ?>
  <option style="padding-left:10px;" label="<?php echo $row->C; ?>"><?php echo "-->".$row->C; ?></option>   
  <?php
}
?>
...
Mitglied: 46356
46356 Aug 29, 2008 at 12:32:04 (UTC)
Goto Top
Hallo!

asdf steht sowohl in der Spalte B und in der Spalte C (also kein Fehler im Datenbankaufruf).
Mein einziges Problem ist nun, dass wie auf dem Bild zu sehen ist, jeder Eintrag seperat gelistet ist.

Aber ich möchte gerne, dass alles das zu IT gehört zusammengehört ;)

LG. Alex