PHP Zweite Select-Box nach Auswahl in erster Select-Box befüllen

[BC]grmbl

Cadet 4th Year
Registriert
Mai 2006
Beiträge
111
Hallo,

ich habe ein html-select mit drei Optionen: Montag, Dienstag und Sonttag. Wenn man montag auswählt, sollen in einer zweiten select-box das Datum des nächsten und übernächsten Montags ausgegeben werden, wenn die Auswahl Dienstag ist, dann...

Die Ausgabe des jeweiligen Datums bekomme ich hin, leider habe ich aber keine Idee, wie ich den Rest anfangen kann. Meine Kenntnisse sind eher bescheiden...
Könnt ihr mir helfen?
 
Ohne Abschicken des Dokuments klingt es für mich nach Einsatz von Javascript, wenn du da von Box zu Box was schubsen willst.
 
In welchem Format liegt das Datum denn vor?
Guck dir mal diese Funktion an: http://de2.php.net/manual/de/function.date.php Und dann halt Format-Zeichen W und ein Wochentag-Array dafür anlegen.

Oder halt allgemein die ganzen Datumsfunktionen die da angeboten werden. Einfach durchklicken.
 
Falls nur mit PHP dann eght das nur übers abschicken der ersten Auswahl, auswerten des Selects und befüllen des zweiten Selects.

Falls du JS verwenden darfst dann kannst du es ganz leicht mittels JQuery oder AJAX(falls die Berechnung der Daten auf dem Webspace geschehen soll) erledigen.
 
...immer schön die jQuery - Keule schwingen... weil man so etwas leichtes ja nur hin bekommt, indem man vorher 100kByte an Framework lädt.

Grundvoraussetzung: Manipulationen an bereits geladenem HTML-Code sind nur per JS möglich
Wenn also eh schon JS vorausgesetzt wird, dann kann man's auch ganz elegant machen, ohne AJAX: Übermittle beim ersten Seitenaufruf alle möglichen Variantenkombinationen direkt mit und schalte sie nacheinander mit einigen wenigen Zeilen JS frei.
 
Und letztendlich will ich das Problem doch lösen. Was haltet ihr von meiner JavaScript-Sorge?

Ich habe im entsprechenden Formular mittels HTML5 required einige Formularfelder ausfüllpflichtig gemacht und da noch nicht jeder required-fähige Browser einsetzt, via PHP "abgesichert". Bei noscript könnte ich ja für den Fall der Fälle ein unsichtbares input einpflegen, das bei selben Namen die php-Absicherung zufrieden stellt und mir als Empfänger mit value mitteilt, dass das noscript angewendet wurde.
 
Wenn du unbedingt auf die Paranoiker und Aluhutträger mit NoScript & Co eingehen willst, dann wird dir kaum eine andere Option bleiben, als das Formular mehrstufig mit SESSIONs zu lösen.
Feld 1 wählen -> absenden/Daten in Session speichern -> neue Formularstufe mit Resultaten auf Basis von Feld 1 -> ....
 
Du "machst" keine Selects per JavaScript. Du schreibst ein serverseitiges Script, das du asynchron aufrufst, wenn eines deiner Selects ein OnChange-Event auslöst. Diesem Aufruf packst du noch die Auswahl des Benutzers mit als Parameter rein. Dein Server-Script wertet diese Daten aus und gibt dir das passende nächste Sammelsurium an Daten zurück, mit dem du z.B. die nächste Select-Box aufbaust.

http://de.wikipedia.org/wiki/XMLHttpRequest
 
[BC]grmbl schrieb:
Blöderweise habe ich mir das fast gedacht. Und JavaScript hat nicht jeder aktiviert, damit fällt die Lösung für mich weg. Dann muss ich nochmal überlegen, wie ich das umsetzen kann.
Dann solltest du aber auch die IE 5 benutzer und Netscape Nutzer auch berücksichtigen....



Daaron schrieb:
...immer schön die jQuery - Keule schwingen... weil man so etwas leichtes ja nur hin bekommt, indem man vorher 100kByte an Framework lädt.
Lieber stattdessen entweder fehleranfälligen und unsauberen PHP Code ersetzen, oder gleich ein Framework in PHP verwenden, welches dazu noch eine Architektur voraussetzt ist natürlich der einfachere Weg oder? Wenn 90kByte dich stören, solltest du mal versuchen auf heutige Seiten mit einer gedrosselten Internetanbindung über das Handy zuzugreifen. Natürlich sollte man nicht unnötig viele Daten hin und herschicken, aber die 90kByte reißens jetzt nicht aus, wenn du deine Seite stylst, hat deine CSS Datei auch ein paar kByte...:freak:
 
SymA schrieb:
Lieber stattdessen entweder fehleranfälligen und unsauberen PHP Code ersetzen, oder gleich ein Framework in PHP verwenden, welches dazu noch eine Architektur voraussetzt ist natürlich der einfachere Weg oder?
Wenn man keine Ahnung hat... ne? Was bitte hat PHP mit jQuery zu tun? Hauptsache irgendwo einen PHP-Flame untergebracht, ne?

Natürlich sollte man nicht unnötig viele Daten hin und herschicken, aber die 90kByte reißens jetzt nicht aus, wenn du deine Seite stylst, hat deine CSS Datei auch ein paar kByte...:freak:
Es geht um Effizienz. Der ganze JS-Code muss ja auch noch ausgeführt werden, und das idealerweise auch noch auf schwächeren Smartphones.
Wenn man sehr viele Aspekte eine JS-Frameworks, egal ob es nun Mootools oder jQuery ist, verwendet: immer her damit, das spart Zeit. Für EINE einzelne Funktion hingegen ist so etwas unsinnig.
 
jQuery ist eine Bibliothek und kein Framework. Nungut das sollte kein Diss gegen PHP sein, sondern ein Vergleich. Lade ich 100kbyte JavaScript und kann es auf jedem Gerät ohne Plugins laufen lassen, oder muss ich erst serverseitig möglicherweise einen größeren Aufwand betreiben für eine kleine Funktion. Ich bin der Meinung für solche kleineren Funktionen eignet sich eher JavaScript als PHP.

Damit du es nochmal verstehst worauf ich hinaus möchte. Entweder ich benutze ein Framework, welches eventuell den Rahmen sprengt für den Umgang der Aufgabenstellung, oder ich fange bei 0 an und schreibe alles selbst. Für Anfänger ist alles selbst schreiben nicht die ideale Wahl, weil viele Nebenläufigkeiten einfach nicht bekannt sind bzw. nicht umgesetzt werden. Aber gut vielleicht verstehst du ja jetzt worauf ich hinaus möchte.
 
Weil es primär darum ging, dass TE das ganze via PHP realisieren wollte?
 
Wie wär's dann, wenn wir dem TE einfach ein bisschen helfen?

Also, das Javascript:
Code:
function select1_onchange(this){
var val=this.value;
var xhr=new XMLHttpRequest();
xhr.open('get','Daten.php?selected='+val,true);
xhr.onreadystatechange=function(){
if(xhr.readyState==4){
var Array=JSON.parse(xhr.responseText);
var select2=document.getElementByid('select2');
select2.options=Array;
}
xhr.send("");
}
select1 muss natürlich bei onchange die Funktion drin haben.
Daten.php muss JSON zurückliefern, wobei die Daten als numerisches Array vorliegen sollte, indem dann ein benanntes Array/Objekt drin ist mit den Attributen text und value.

Das ganze istz natürlich sehr hässlich, ohne Fehlerprüfung etc., aber es ist mal ein Denkanstoß.
 
Wofür denn überhaupt so einen Request anstoßen? Es gibt doch nur drei Optionen mit jeweils zwei weiteren Auswahlmöglichkeiten. Macht also ganze sechs Daten. Die kann man doch schon zur Laufzeit bestimmen und in ein Array oder sonstwas fest speichern. Oder über die Datumsfunktionen von Javascript fix ausrechnen.
 
Ich bin im Internet auf eine Lösung gestoßen, die genau auf mich passt. Was haltet ihr davon? Ich habe das ganze angepasst und es funktioniert sehr gut.

Code:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 
<head>
  <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
  <script>
  function viewSelect(id){
    var obj = document.getElementById(id);
    var index = obj.selectedIndex;
    var _div= document.getElementById("newSelect");
    var text='<select name="starttermin" size="2" style="width: 200px; text-align: center;">';
    switch (index){
      case 0:
      text += '<option><?php $nmontag = strtotime("next Monday"); echo 'KW'.date("W, d.m.Y", $nmontag); ?></option>';
      text += '<option><?php $unmontag = strtotime("next Monday +1 week"); echo 'KW'.date("W, d.m.Y", $unmontag); ?></option>';
      break;
      case 1:
      text += '<option><?php $ndienstag = strtotime("next Tuesday"); echo 'KW'.date("W, d.m.Y", $ndienstag); ?></option>';
      text += '<option><?php $undienstag = strtotime("next Tuesday +1 week"); echo 'KW'.date("W, d.m.Y", $undienstag); ?></option>';
      break;
      case 2:
      text += '<option><?php $nsonntag = strtotime("next Sunday"); echo 'KW'.date("W, d.m.Y", $nsonntag); ?></option>';
      text += '<option><?php $unsonntag = strtotime("next Sunday +1 week"); echo 'KW'.date("W, d.m.Y", $unsonntag); ?></option>';
      break;
      default:
      text = "Bitte Title auswählen"; break;
    }
    text +="</select>";
    _div.innerHTML= text;
     
  }
  </script>
</head>
 
<body>
 
<form>
<select name="termin" size="3" style="width: 200px; text-align: center;" id="firstSelect" onchange="viewSelect('firstSelect');" required>
						<option>Montag, 18-19:30 Uhr</option>
						<option>Dienstag, 18-19:30 Uhr</option>
						<option>Sonntag, 12-13:30 Uhr</option>
					</select>
<div id="newSelect"></div>
</form>
 
</body>
</html>
 

Ähnliche Themen

Zurück
Oben