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

[BC]grmbl schrieb:
Was haltet ihr davon?
Du wolltest doch HTML5 nutzen, dann würde ich auch den passenden Dokumententyp senden. Auch würde ich alle Variablen bis auf "text" streichen. Wozu zwischenspeichern, wenn du die eh nur einmal nutzt? Da du auch nur auf das select#firstSelect zugreifen willst, bräuchte man das der Funktion nicht zu übermitteln. Das div#newSelect würde ich direkt zu einem select machen, sparste dir auch nochmal was. Aber alles eine Geschmacksfrage.
 
SymA schrieb:
jQuery ist eine Bibliothek und kein Framework.
Das sind eher Spitzfindigkeiten. jQuery wird auf der Homepage als Bibliothek bezeichnet, Mootools hingegen als Framework. Am Ende bieten beide Vergleichbares.

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.
Du vergleichst hier Äpfel mit Birnen...
Um Formulare auszuwerten MUSS IMMER eine serverseitige Verarbeitung erfolgen.... außer dein Formularfeld verändert ausschließlich per JS irgendwelche Anzeigen auf der aktuell dargestellten Seite bzw. einen Cookie.

Wenn du wirklich dynamisch Formularfelder nachladen willst, dann brauchst du sowohl JavaScript (für die Dynamik im Browser) als auch eine serverseitige Sprache, z.B. eben PHP.

Für Anfänger ist alles selbst schreiben nicht die ideale Wahl, weil viele Nebenläufigkeiten einfach nicht bekannt sind bzw. nicht umgesetzt werden.
Ein XmlHttpRequest ist kein Hexenwerk, den grundsätzlichen Code bekommt man doch sogar direkt im Wikipedia-Eintrag. Den Rest müsste man, egal ob man nun jQuery/Mootools/Prototype/... lädt oder nicht, eh selbst schreiben.
Es lohnt sich, wenigstens 1x einen Blick unter die Haube zu werfen und die zu Grunde liegende Funktion zu begreifen. Später, bei großen Projekten wo die JS-Frameworks eh Pflicht sind, kann man immer noch mit den vereinfachten Request-Klassen arbeiten.

SymA schrieb:
Weil es primär darum ging, dass TE das ganze via PHP realisieren wollte?
Wenn die Daten so einfach sind wie in diesem Fall, dann spart man sich den AJAX-Call und die serverseitige Verarbeitung so oder so. Darauf hab ich aber bereits in meiner ersten Antwort hingewiesen.
Ist das Problem etwas komplexer, willst du z.B. in einem Shop den Preis in Abhängigkeit der Variantenkombination anzeigen, dann lohnen sich AJAX-Calls sehr wohl... und die müssen dann von einem Serverscript in PHP, Perl, Python, ASP.NET, C, Java, Node.JS,... verarbeitet werden.
 
Nase schrieb:
Du wolltest doch HTML5 nutzen, dann würde ich auch den passenden Dokumententyp senden. Auch würde ich alle Variablen bis auf "text" streichen. Wozu zwischenspeichern, wenn du die eh nur einmal nutzt? Da du auch nur auf das select#firstSelect zugreifen willst, bräuchte man das der Funktion nicht zu übermitteln. Das div#newSelect würde ich direkt zu einem select machen, sparste dir auch nochmal was. Aber alles eine Geschmacksfrage.
Sobald ich an den Script rumspiele, funktioniert nichts mehr. Kannst du mir das funktionstüchtig entschlacken?
 
PHP:
<!DOCTYPE html>
<html>
    <head>
        <title></title>
        <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
        <script>
            function viewSelect() {
            
                text  = "";
                
                switch (document.getElementById("firstSelect").selectedIndex) {
                  case 0:
                      text += '<option><?php echo 'KW'.date("W, d.m.Y", strtotime("next Monday")); ?></option>';
                      text += '<option><?php echo 'KW'.date("W, d.m.Y", strtotime("next Monday +1 week")); ?></option>';
                      break;
                  case 1:
                      text += '<option><?php echo 'KW'.date("W, d.m.Y", strtotime("next Tuesday")); ?></option>';
                      text += '<option><?php echo 'KW'.date("W, d.m.Y", strtotime("next Tuesday +1 week")); ?></option>';
                      break;
                  case 2:
                      text += '<option><?php echo 'KW'.date("W, d.m.Y", strtotime("next Sunday")); ?></option>';
                      text += '<option><?php echo 'KW'.date("W, d.m.Y", strtotime("next Sunday +1 week")); ?></option>';
                      break;
                  default:
                      break;
                }
                
                document.getElementById("newSelect").innerHTML = text;
                 
            }
        </script>
    </head>
     
    <body>
     
        <form>
            <select name="termin" id="firstSelect" onchange="viewSelect();" required>
        		<option>Montag, 18-19:30 Uhr</option>
        		<option>Dienstag, 18-19:30 Uhr</option>
        		<option>Sonntag, 12-13:30 Uhr</option>
            </select>
            <select id="newSelect" name="starttermin"></select>
        </form>
     
    </body>
</html>

Z.B.
 
Vielen Dank! Das hätte ich niemals hinbekommen. Funktioniert tadellos.
Ergänzung ()

Bei mir sieht das jetzt so aus:
PHP:
Bei mir sieht das jetzt so aus:
[PHP]
<!DOCTYPE html>
<html>
    <head>
        <title></title>
        <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
        <script>
            function viewSelect() {
            
                text  = "";
                
                switch (document.getElementById("firstSelect").selectedIndex) {
                  case 0:
                      text += '<option><?php echo 'KW'.date("W, d.m.Y", strtotime("next Monday")); ?></option>';
                      text += '<option><?php echo 'KW'.date("W, d.m.Y", strtotime("next Monday +1 week")); ?></option>';
                      break;
                  case 1:
                      text += '<option><?php echo 'KW'.date("W, d.m.Y", strtotime("next Tuesday")); ?></option>';
                      text += '<option><?php echo 'KW'.date("W, d.m.Y", strtotime("next Tuesday +1 week")); ?></option>';
                      break;
                  case 2:
                      text += '<option><?php echo 'KW'.date("W, d.m.Y", strtotime("next Sunday")); ?></option>';
                      text += '<option><?php echo 'KW'.date("W, d.m.Y", strtotime("next Sunday +1 week")); ?></option>';
                      break;
                  default:
                      break;
                }
                
                document.getElementById("newSelect").innerHTML = text;
                 
            }
        </script>
    </head>
     
    <body>
     
        <form>
            <select name="termin" id="firstSelect" onchange="viewSelect();" required>
        		<option>Montag, 18-19:30 Uhr</option>
        		<option>Dienstag, 18-19:30 Uhr</option>
        		<option>Sonntag, 12-13:30 Uhr</option>
            </select>
            <select id="newSelect" name="starttermin"></select>
			<noscript>
				<br>
				Für diese Funktion ist JavaScript erforderlich!
				<input type="hidden" type="text" name="starttermin" value="Kein JavaScript aktiviert">
			</noscript>
        </form>
     
    </body>
</html>
Jetzt kann ich beim newSelect natürlich das html5-required nicht nutzen, da er für dieses Feld eine Eingabe erwartet, die ohne JavaScript nicht möglich ist. Wie kann ich das Select für ausgeschaltetes JavaScript ausblenden lassen?
[/PHP]
 
Zuletzt bearbeitet: (Direktzitat entfernt)
Könntest z.B. das select#newSelect mit CSS ausblenden (display: none) und bei aktiviertem Javascript wieder anzeigen. Eventuell auch noch zusätzlich required als Attribut setzen (per Script).

Aber um ehrlich zu sein: Ich würde mich daran nicht zu sehr aufhalten. Dem required kannst du eh nicht trauen und musst es auf der Serverseite nochmals verifizieren. Und mit dem noscript ... naja.
 
Lässt sich das nicht so umsetzen irgendwie?
Code:
<script>
viewSelect();
</script>
Auf der Serverseite ist das mit php abgesichert, für alle die ältere Browser nutzen. Die Umsetzung via html5 finde ich aber sehr schick und deswegen nutze ich gerne required.
 
klar lässt sich das so umsetzen... bloß eben nicht genauso.
- DOMReady-Event abwarten (falls du ein Framework verwendest, dass dieses Event bereitstellt. Ansonsten window.onload) und deine Funktion zünden
In deiner Funktion:
- Element suchen & auswählen
- Element deinen Wunsch-Style anpappen
 
Oder du schreibst halt etwas in das zweite Select rein, dann ist der nicht mehr leer. Das Script würde den Inhalt ja eh überschreiben und du kannst dir den hidden input auch sparen.
 

Ähnliche Themen

Zurück
Oben