www.mikrocontroller.net

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


Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Timo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jorge (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

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).


Autor: Jan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...)

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Timo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter (Gast)
Datum:

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

Autor: Timo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Thomas W. (thomas_v2)
Datum:

Bewertung
0 lesenswert
nicht 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:
function liste_aendern(nr) {
  for (var j = document.formular.meineDaten.length - 1; j >= 0; j--) {
    document.formular.meineDaten.options[j] = null;
  }

  // Diese Liste muss mittels Datenbankabfrage generiert werden
  var listen = new Array(2);
  listen[2005] = new Array();
  listen[2006] = new Array();
  listen[2005][0] = "1, abc";
  listen[2005][1] = "2, def";
  listen[2006][0] = "1, uvw";
  listen[2006][1] = "2, xvy";

  for (j = 0; j < listen[nr].length; j++) {
    var daten = listen[nr][j].split(',');
    NeuerEintrag = new Option(daten[1], daten[0], false, true);
document.formular.meineDaten.options[document.formular.meineDaten.length] = NeuerEintrag;
  }
}
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.

Autor: Minetti (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.