Forum: PC-Programmierung Listen dynamisch mitttel PHP aus Datenbank?


von Peter (Gast)


Lesenswert?

Hallo Leute,
ich möchte 3 Auswahllisten realisieren:
Jahr -> Monat -> Tag  so ähnlich wie wenn ich im Netz irgend ein Sop 
besuche und dort zB. Hardware -> Speicher - DDR2 -> usw. auswähle.

In einer Datenbank sin zum Datum immer Werte gespeichert.
Es sollen auch nur die Werte zur Auswahl stehen die auch in der DB 
stehen.

Die Abfrage nach dem Jahr ist kein Problemm nur tue ich mich sehr schwer 
mit dem nächsten Schritt.
Wie kann ich die Abfrage nach dem Monat jetzt realisieren ohne das die 
Seite neu läd?
Mir ist wichtig, das in der Liste nur Werte auftauchen die in der DB 
auch vorhanden sind.

Jahr -> Monat -> Tag  so ähnlich wie wenn ich im Netz irgend ein Sop 
besuche und dort zB. Hardware -> Speicher - DDR2 -> usw. auswähle.

Wie realisiert man sowas? Ich finde keinen richtigen Ansatz oder ist die 
Sachlage doch Größer als ich denke?

hier noch mal der Testcode von auswahl.php:

//kann ich auch den Parameter der aktuellen PHP Datei auch übergeben? 
zb. zu auswahl.php?

echo ('<form action="anfrage.php" method="POST">');
echo ("<select name='Jahr' size='1' tabindex='1' 
onChange='this.form.submit()'>");          //mittels Java bei Auswahl 
senden
    while($Datum = mysql_fetch_array($Wetterdaten))
        {
            $Jahr[] = date("Y",strtotime($Datum['Datum']));
            #$Monat[] = date("m",strtotime($Datum['Datum']));
            #$Tag[] = date("d",strtotime($Datum['Datum']));
         }

        $arr = array_count_values($Jahr);             // zähler für alle 
Verschiedenen Werte, in der Form [2007]=>200; [2005]=>1 usw.
        $ar  = array_keys($arr);                      // erzeugen eines 
neue Arrays in der Form [0]=>2007; [1]=>2005 usw.

        foreach($ar as $wert)
        echo ("<option value=$wert>$wert</option>");
        echo ("</select>");


echo('</form>');

Gruß Peter

von Timo (Gast)


Lesenswert?

Ganz verstanden habe ich das nicht. Sind grundsätzlich alle Daten 
auswählbar, oder ist ein betimmtes Datum nicht auswählbar, wenn dazu 
keine Infos in der DB sind? Wenn das so ist wirst du nur mit PHP nichts 
werden, da muss dann was dynamisches wie Java Script her.

von Jorge (Gast)


Lesenswert?

Hallo,

Man kann etwas "fertiges" nehmen und sich dann damit abquälen.

strus:
struts4php (php5)

ajax:
http://www.ajax-info.de/uebersicht-ajax-frameworks/php-frameworks

oder selber machen...

PHP lädt zum unsturkturierten Programmieren ein. Man kann über eval() 
vieles erreichen was in Richtung selbstmodifizierender Code und 
regelbasiertes Programmieren geht. Deine Fragestellung ist dazu zu 
offen...

>kann ich auch den Parameter der aktuellen PHP Datei auch übergeben?
>zb. zu auswahl.php?

Eben genau sowas geht mit PHP. Beispiel aus dem Manual:

// Das ist KORREKT.
if ($bedingung) {
    include $datei;
} else {
    include $andere_datei;
}

Das führt zu unstrukturierten Programmen (->Murks).


von Jan (Gast)


Lesenswert?

Du moechtest also Inhalt auf einer Seite dynamisch anzeigen, je nach 
Auswahl des Benutzers, ohne das die Seite neu vom Server geladen wird?

Dann brauchst du auch eine clientseitige Programmiersprache wie 
JavaScript. Theoretisch koennte man auch mit CSS etwas basteln, dass 
immer nur die richtige Auswahlliste sichtbar ist - wird aber aufwendig, 
dass auch in Klicki-Bunti-Internetprogrammen zum Laufen zu bekommen (in 
standardkonformen Browsern wie FF ist das kein Problem...)

von Peter (Gast)


Lesenswert?

Hallo,
Es soll ein bestimmtes Datum nicht auswählbar sein, wenn dazu
keine Infos in der DB sind.

Wie wäre denn der Ansatz mit Javascript? Das hat doch aber dann wieder 
den Nachteil, dass einige die Seite nicht benutzen können, oder? Welche 
serverseitige Lösung gibt es?

Danke.

von Timo (Gast)


Lesenswert?

Dafür gibt es keine serverseitige Lösung mit deiner Forderung, die Seite 
nur einmal laden zu müssen! Ich weiß zwar nicht, welchen Umfang der 
Datenbestand hat, aber die Übertragung könnte mitunter ziemlich groß 
werden bei einer Java Script Anwendung. Du musst schließlich jede 
abhängige Kombination abdecken. Sprich du musst bei dieser Art der 
Lösung schon mal vorneweg jedes zulässige Datum übertragen.

von Peter (Gast)


Lesenswert?

Wie werden denn solche Auswahllisten in Shops usw. realisiert? Da wird 
doch auch eine Datenbank überprüft, oder?

von Timo (Gast)


Lesenswert?

Ist möglich, muss aber nicht sein. Bei Shops ist die Datentiefe aber 
auch überschaubar. Weiß gerade nicht welchen Shop du meinst, aber du 
kannst dir ja den Seitenquelltext mal ansehen, dann weißt du ja wie sie 
es gemacht haben.

von Thomas W. (thomas_v2)


Lesenswert?

Falls du das vom Prinzip her wie z.B. bei der Markenauswahl auf 
mobile.de meinst, habe ich das folgendermaßen gemacht (wie schon 
beschrieben geht das wohl nur mit Javascript):

Die Daten mittels php (ich habs mit perl gemacht) abholen, und ein 
Javascript-Array mit den Daten erstellen. Für den Jahresauswahlfeld in 
etwa  so:
1
function liste_aendern(nr) {
2
  for (var j = document.formular.meineDaten.length - 1; j >= 0; j--) {
3
    document.formular.meineDaten.options[j] = null;
4
  }
5
6
  // Diese Liste muss mittels Datenbankabfrage generiert werden
7
  var listen = new Array(2);
8
  listen[2005] = new Array();
9
  listen[2006] = new Array();
10
  listen[2005][0] = "1, abc";
11
  listen[2005][1] = "2, def";
12
  listen[2006][0] = "1, uvw";
13
  listen[2006][1] = "2, xvy";
14
15
  for (j = 0; j < listen[nr].length; j++) {
16
    var daten = listen[nr][j].split(',');
17
    NeuerEintrag = new Option(daten[1], daten[0], false, true);
18
document.formular.meineDaten.options[document.formular.meineDaten.length] = NeuerEintrag;
19
  }
20
}
In deinem Jahres-Selectfeld dann bei Änderung die Funktion aufrufen:

onChange="liste_aendern(this.form.Jahr.options[this.form.Jahr.options.se 
lectedIndex].value)"

Bei Änderungen wird dann das select-Feld "meineDaten" mit den 
zugehörigen Daten gefüllt.

Hängt von der Datenmenge ab ob das so zu gebrauchen ist. Bei Mobile.de 
stehen die Modelldaten in einer 16kB großen Textdatei.

von Minetti (Gast)


Lesenswert?

Wenn du unbedingt Daten vom Server nachladen musst, schau dir mal das 
XMLHttpRequest Objekt für JavaScript an.

Grober Ablauf:
- Benutzer feuert durch Auswahl in der ersten Box ein Event.
- Zugehöriger Eventhandler wirft sowas wie 'Loading' auf den Schirm, 
ruft mittels XMLHttpRequest ein paar Daten vom Server ab, wartet auf die 
Ankunft der Daten und fügt sie in die richtige Liste ein. Danach das 
'Loading' wieder wegnehmen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.