• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Dynamisches Dropdown

Status
Für weitere Antworten geschlossen.

seblon

Mitglied
Moin,
für die verwaltung eines Sendeplans habe ich eine Eingabemaske, wenn man dort den Tag ausgewählt hat soll onChange eine Javascript funktion aufgerufen werden, die aus der Datenbank ausliest welche Stunden (zwischen 7 und 23Uhr) schon belegt sind und nur die die noch frei sind als DropDown dann anzeigen.


Soweit so gut nur kriege ich immer ein leeres select-feld in dem nur steht Bitte wählen hier die relevanten Codes:
Eingabemaske:
HTML:
...
Tag: <select name='sendetag' onChange='filldropbearbeiten();' id='sendetag'>
<option>Montag</option>
<option>Dienstag</option>
<option>Mittwoch</option>
<option>Donnerstag</option>
<option>Freitag</option>
<option>Samstag</option>
<option>Sonntag</option>
</select><br>
Stunde: <select name='stunde' id='stunde'></select><br>
...
Die Javascript-Funktion (mit php gebündelt):
PHP:
<script type="text/javascript" language="javascript">
      function filldropbearbeiten() {
          document.form.stunde.options.length = 0;
          document.form.stunde.options[0] = new Option('Bitte wählen','0');
          <?
             $res = mysql_query("select * from sendeplan");
                 $y=7; $z=1;
                 while($y<=23){
                  $vorhanden = "nein";
                  while ($daten=mysql_fetch_array($res)) {
                    if ($daten['day']=="document.form.sendetag.value" && $daten[time]==$y) $vorhanden=ja;
                }
                if($vorhanden!=ja){
                 echo "document.form.stunde.options[".$z."] = new Option('".trim($y)."','".trim($y)."');";
                }
                $z++;
                $y++;
                }
            ?>}
            </script>
Ich hab die vermutung das das PHP schon vorher abgearbeitet wird und deswegen nicht funktioniert, wie könnte man das anders machen?
Vielen Dank schonmal im vorraus.
 
Werbung:
Hallo seblon,

du versuchst den Inhalt der 2ten DropSown dynamisch zu generieren. Hierfür kannst du das PHP nicht in den JavaScript Code schreiben.

PHP ist eine serverseitige Scriptsprache und wird somit beim Laden der Seite durch den PHP-Server übersetzt und abgearbeitet.

JavaScript ist eine Clientseitige Scriptsprache und somit findet die Abarbeitung im Brwoser des Clients statt. Der Zugriff auf die MySQL Datenbank lässt sich somit nur über einen Seitenrefresh oder per Ajax realisieren.

Da du sicherlich nicht die Seite neu laden willst, würde ich dir die Ajax Bibliothek ProtoType ans Herz legen, mit der die dynamische Generierung relativ einfach von der Hand geht.

Hier mal die Links:

Prototype JavaScript framework: Easy Ajax and DOM manipulation for dynamic web applications

oder mal eine Library, die noch einige Funktionalität mehr bietet und auf ProtoType aufbaut:

script.aculo.us - web 2.0 javascript

Viel Spaß damit und ich hoffe, dass ich Dir weiterhelfen konnte
 
Erst einmal danke für die Antwort.
Mit AJAX kenn ich mich leider nicht aus deswegen wollte ich es gerne mit PHP und Javascript machen. Nach langem überlegen ist mir die Idee gekommen, ich kann ja für jeden Tag einfach ne Variable machen in die ich die Zeiten die noch frei sind eintrage und dann mit Javascript einfach auf die Variablen zugreifen.
Mein Code sieht jetzt so aus:
PHP:
<? $y=7;
                 while($y<=23){
                  $mon=0; $die=0; $mit=0; $don=0; $sam=0; $son=0; $fre=0;
                  $res = mysql_query("select * from sendeplan WHERE time='$y'");
                  while ($daten=mysql_fetch_array($res)) {
if ($daten[day]=="Montag"){$mon=1; $debug.="<br>DEBUG: $y Montag $mon";}
if ($daten[day]=="Dienstag"){$die=1;}
if ($daten[day]=="Mittwoch"){$mit=1;}
if ($daten[day]=="Donnerstag"){$don=1;}
if ($daten[day]=="Freitag"){$fre=1;}
if ($daten[day]=="Samstag"){$sam=1;}
if ($daten[day]=="Sonntag"){$son=1;}
                }
if ($mon==0){ $Montag.="<option>$y</option>";$debug.="<br>DEBUG: Schreibe $y Montag $mon";}
if ($die==0){ $Dienstag.="<option>$y</option>";}
if ($mit==0){ $Mittwoch.="<option>$y</option>";}
if ($don==0){ $Donnerstag.="<option>$y</option>";}
if ($fre==0){ $Freitag.="<option>$y</option>";}
if ($sam==0){ $Samstag.="<option>$y</option>";}
if ($son==0){ $Sonntag.="<option>$y</option>";}
                $y++;
                }
?>
      <script type="text/javascript" language="javascript">
      function filldropbearbeiten() {
          document.form.stunde.options.length = 0;
          document.form.stunde.options[0] = new Option('Bitte wählen','0');
         <?
            echo "if(doument.form.sendetag.value==Montag){
                     document.form.stunde.write('".$Montag."');}
            else if(doument.form.sendetag.value==Dienstag){
                     document.form.stunde.write('".$Dienstag."');}
            else if(doument.form.sendetag.value==Mittwoch){
                     document.form.stunde.write('".$Mittwoch.");}
            else if(doument.form.sendetag.value==Donnerstag){
                     document.form.stunde.write('".$Donnerstag."');}
            else if(doument.form.sendetag.value==Freitag){
                     document.form.stunde.write('".$Freitag."');}
            else if(doument.form.sendetag.value==Samstag){
                     document.form.stunde.write('".$Samstag."');}
            else if(doument.form.sendetag.value==Sonntag){
                     document.form.stunde.write('".$Sonntag."');}";
            ?>
            }
            </script>
Problem: Die Fehlerkonsole gibt mir folgenden Error aus:
Fehler: unterminated string literal
Quelldatei: Youth FM v2 » Adminbereich
Zeile: 160
:shock: Ich hab keine Ahnung was ich falsch gemacht habe oder ob vllt das document.write so nicht erlaubt ist?
 
Werbung:
Erst einmal danke für die Antwort.
Mit AJAX kenn ich mich leider nicht aus deswegen wollte ich es gerne mit PHP und Javascript machen. Nach langem überlegen ist mir die Idee gekommen, ich kann ja für jeden Tag einfach ne Variable machen in die ich die Zeiten die noch frei sind eintrage und dann mit Javascript einfach auf die Variablen zugreifen.
Mein Code sieht jetzt so aus:
PHP:
<? $y=7;
                 while($y<=23){
                  $mon=0; $die=0; $mit=0; $don=0; $sam=0; $son=0; $fre=0;
                  $res = mysql_query("select * from sendeplan WHERE time='$y'");
                  while ($daten=mysql_fetch_array($res)) {
if ($daten[day]=="Montag"){$mon=1; $debug.="<br>DEBUG: $y Montag $mon";}
if ($daten[day]=="Dienstag"){$die=1;}
if ($daten[day]=="Mittwoch"){$mit=1;}
if ($daten[day]=="Donnerstag"){$don=1;}
if ($daten[day]=="Freitag"){$fre=1;}
if ($daten[day]=="Samstag"){$sam=1;}
if ($daten[day]=="Sonntag"){$son=1;}
                }
if ($mon==0){ $Montag.="<option>$y</option>";$debug.="<br>DEBUG: Schreibe $y Montag $mon";}
if ($die==0){ $Dienstag.="<option>$y</option>";}
if ($mit==0){ $Mittwoch.="<option>$y</option>";}
if ($don==0){ $Donnerstag.="<option>$y</option>";}
if ($fre==0){ $Freitag.="<option>$y</option>";}
if ($sam==0){ $Samstag.="<option>$y</option>";}
if ($son==0){ $Sonntag.="<option>$y</option>";}
                $y++;
                }
?>
      <script type="text/javascript" language="javascript">
      function filldropbearbeiten() {
          document.form.stunde.options.length = 0;
          document.form.stunde.options[0] = new Option('Bitte wählen','0');
         <?
            echo "if(doument.form.sendetag.value==Montag){
                     document.form.stunde.write('".$Montag."');}
            else if(doument.form.sendetag.value==Dienstag){
                     document.form.stunde.write('".$Dienstag."');}
            else if(doument.form.sendetag.value==Mittwoch){
                     document.form.stunde.write('".$Mittwoch.");}
            else if(doument.form.sendetag.value==Donnerstag){
                     document.form.stunde.write('".$Donnerstag."');}
            else if(doument.form.sendetag.value==Freitag){
                     document.form.stunde.write('".$Freitag."');}
            else if(doument.form.sendetag.value==Samstag){
                     document.form.stunde.write('".$Samstag."');}
            else if(doument.form.sendetag.value==Sonntag){
                     document.form.stunde.write('".$Sonntag."');}";
            ?>
            }
            </script>
Problem: Die Fehlerkonsole gibt mir folgenden Error aus:
:shock: Ich hab keine Ahnung was ich falsch gemacht habe oder ob vllt das document.write so nicht erlaubt ist?
Du hast das hintere Hochkomma hinter "Mittwoch" vergessen.

Ansonsten sollte das durchaus funktionieren.

Für das Debuggen von Javascript bietet sich die Firefox-Erweiterung Firebug an:

https://addons.mozilla.org/de/firefox/addon/1843


Klärt das deine Probleme?
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben