Datenbank Abfrage mit DropdownMenü

  • Hallo Leute.
    Ich bin ein völliger Anfänger wenn es um MySql geht, deshalb beschäftige ich mich zurzeit mit einigen Tutorials. Was ich nun hinkriege ist eine Gästebuch funktion bzw. Ich schreibe einen text, schicke diesen ab, und der text erscheint auf der seite des gästebuch, und bleibt dann auch dort. Sobald ich wieder einen eintrag schreibe reiht er sich über den ersten Eintrag. Soweit so gut.

    Nun zu meinem Problem:
    Ich habe eine DB Tabelle mit ca 100 Datensätze in phpmyadmin importiert. Die Daten haben alle eine eigene aufsteigende ID (von 1 - 100).
    Auf meiner Homepage habe ich ein List-Menü mit mehreren Werten. Ich möchte gerne das wenn der User sich den Wert "1" auswählt und auf senden klickt, dann die erste reihe der Tabelle ausgegeben wird, und wenn der User den Wert "2" auswählt, wird die zweite Reihe ausgegeben usw.

    Habe bis jetzt in google nichts gefunden, wäre euch wirklich sehr dankbar.

  • Hört sich an wie eine Blätternavigation. Dafür bräuchtest du ein LIMIT in der SQL Abfrage:

    Zitat


    Die LIMIT-Klausel kann zur Beschränkung der Anzahl der von der SELECT-Anweisung zurückgegebenen Datensätze verwendet werden. LIMIT nimmt ein oder zwei numerische Argumente entgegen, die (außer bei Verwendung vorbereiteter Anweisungen) beide nichtnegative Integer-Konstanten sein müssen.
    Von den beiden Argumenten gibt das erste den Versatz des ersten zurückzugebenden Datensatzes an, das zweite die maximale Anzahl zurückzugebender Datensätze. Der Versatz des ersten Datensatzes ist 0 (nicht 1):

    SELECT * FROM tbl LIMIT 5,10; # Retrieve rows 6-15Um alle Datensätze beginnend bei einem bestimmten Versatz bis zum Ende der Ergebnismenge zurückzugeben, können Sie als zweiten Parameter eine sehr große Zahl angeben. Die folgende Anweisung ruft alle Datensätze beginnend beim 96. bis zum letzten Datensatz ab:

    SELECT * FROM tbl LIMIT 95,18446744073709551615;Sofern nur ein Argument angegeben ist, gibt der Wert die Anzahl der Datensätze an, die beginnend beim ersten Datensatz zurückgegeben werden sollen:

    SELECT * FROM tbl LIMIT 5; # Retrieve first 5 rowsAnders gesagt, ist LIMIT row_count äquivalent zu LIMIT 0, row_count.
    Bei vorbereiteten Anweisungen können Sie Platzhalter verwenden. Die folgende Anweisung gibt genau einen Datensatz aus der Tabelle tbl zurück:


    Quelle: http://dev.mysql.com/doc/refman/5.1/de/select.html


    Du definierst einfach zwei Variablen:

    PHP
    <?php
    $epp = 10; # anzahl pro seite
    $offset = (int) $_GET['offset'];
    
    
    
    
    $sql = "SELECT `text`, `titel` FROM `tabelle` ORDER BY datum DESC LIMIT $offset, $epp";
    mysql_query($sql);
    ?>

    Damit kannst du dann gewisse Abschnitte deines Gästebuchs anzeigen ;)

    Die Liste mit den Links zu den einträgen versiehst du mit einem Parameter, in diesem Beispiel offset

    HTML
    <ul><li><a href="gaestebuch.php?offset=0">seite 1</a></li><li><a href="gaestebuch.php?offset=1">seite 2</a></li><li><a href="gaestebuch.php?offset=2">seite 3</a></li></ul>



    und dann sollte es schon klappen.

    Gruß crAzywuLf :D

  • Danke crAzywuLf für deine Antwort.
    Zu erst. Sorry dass ich mich erst jetzt melde, hatte den Kopf voll und konnte daran nicht mehr arbeiten.
    Ich versuchte dass nun so umzusetzen, wie du es beschrieben hast. Leider ist das aber nicht genau dass was ich mir vorstelle.
    Vielleicht nochmals zur erklärung.

    Ein Freund von mir hat eine Kurierfirma. Seine Fahrer sollen den genauen Verdienst auf jede Fahrt abrufen können.
    Wenn Also Fahrer1 Nach Berlin fährt, soll er aus einem Auswahlmenü "Berlin" auswählen, auf senden Klicken und sieht dann den genauen Verdienst führ die fahrt nach Berlin (Anz. Km, verdienst pro Kilometer usw).

    Also einfach gesagt: Wähl ich Berlin, gib mir die Infos aus der reihe, in der in der Spalte "ort" Berlin steht, wähl ich München, dann gib mir die Infos aus der Reihe, in der die Spalte ORT München aufweist.

    Die datenbank ist folgendermassen aufgebaut: Ort, PLZ, km, verdienst.

    Wie gesagt in dem Gebiet bin ich relativ neu, und hoffe daher auf leicht verständliche Antwortsformulierungen :)

    Hoffe ich boekomme noch Antworten nach solanger wartezeit.:roll:

    Danke vielmals

  • Vom Prinzip her ziemlich identisch: https://www.forum-hilfe.de/threads/53756-…ll=1#post401261

    Ungetestet:

    Einmal editiert, zuletzt von Bandit (4. September 2012 um 15:25)

  • Habe mir das Script mal rauskopiert und nach "meinem ermessen" angepasst, klappt jedoch nicht wirklich. bekomme immer die meldung: MySQL-Fehler: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'from `tabelle1` where ' at line 4.

    Hab mal einbisschen rumgeschaut, diese Webseite (schlimmes design, ich wiess) hatt genau das was ich brauche (Tarifrechner, hald ohne Dropdownliste)wenn ich hier eine schweizer postleizahl eingebe zb. 8000 kommen unten genau diese Infos zur PLZ.
    Ist es möglich dieses script "ganz einfach:oops:" zu koppieren?

  • Zum Thema kopieren: Nicht möglich und auch nicht legal, das Script gehört dir nicht, das darfst du nicht einfach kopieren.

    Was dein Problem angeht, ist es anhand dieser Fehlermeldung unmöglich zu sagen, was der Fehler ist, da du das Script ja "nach deinem Ermessen" angepasst hast. Poste mal dein Script und ein Beispiel des SQL-Codes den du da generierst, also einfach anstatt an die DB schicken per echo ausgeben.

  • Zum Thema kopieren: Nicht möglich und auch nicht legal, das Script gehört dir nicht, das darfst du nicht einfach kopieren.

    Was dein Problem angeht, ist es anhand dieser Fehlermeldung unmöglich zu sagen, was der Fehler ist, da du das Script ja "nach deinem Ermessen" angepasst hast. Poste mal dein Script und ein Beispiel des SQL-Codes den du da generierst, also einfach anstatt an die DB schicken per echo ausgeben.

    Hier das Script wie ich es jetzt habe. Die DB heisst Kurierzentrale und die Tabelle heisst test. In der Tabelle test hab ich die Spalten "ort, plz, km und verdienst"

    Nun meckert er rum das die funktion: mysql_num_row nicht difiniert ist:?:

    PS: Danke für deine Zeit:yes:

    - - - Aktualisiert - - -

    Habs hingekriegt :lol::razz::cool::p !!!
    Danke vielmals für deine Hilfe. Hab jetzt (vorläufig) nur noch eine Frage, und zwar:
    Bis jetzt gibt er mir nur immer eine Linie aus. wenn ich jetzt aber einen Ort eingeben möchte der mehrere postleizahlen besitzt, möchte ich gerne dass er mir alles ausgibt.
    Mal ein Beispiel aus der Schweiz: Sagen wir Zürich hat zwei postleitzahlen die einte 8000 und die andere 8001. Nach 8000 sind es 11km und der Weg nach 8001 15km. Wenn ich jetzt (nur) Zürich eingebe soll er mir also alle Reihen die in der Spalte ORT Zürich haben, ausgeben. kannst du mir da noch helfen?

    Vielen Dank

    PS: Wie muss ich vorgehen wenn ich dem User offen lassen will ob er die PLZ oder den ORT eingeben will? Ich kann dem <input> ja nur ein namen zuweisen und der wäre vorläufig ort....

  • Wenn das Script für Länder mit numerischen Postleitzahlen ist, frag als erstes den 1. Character vom String ab. Ist dieser eine Zahl, dann ist's die PLZ.

  • Bei dem aktuellen Quellcode und deinem Beispiel hättest du ja sogar Zürich doppelt drin, deshalb kommst du mit der einen Auswahlliste nicht wirklich weiter. Baue eine zweite Auswahlliste ein, in der die Postleitzahlen stehen. Dann kann man entweder den Ort oder die Postleitzahl auswählen. Je nach Wunsch könnte man eine Auswahlliste mit JavaScript immer auf einen leeren Index setzen, wenn in der anderen etwas ausgewählt wurde. Oder du bleibst bei einer Auswahlliste und schreibst noch die Postleitzahl davor.