Ankündigung

Einklappen
Keine Ankündigung bisher.

Probleme mit select(-Box) aus Datenbank, Anzeige nach vorgegebenem Buchstaben

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Probleme mit select(-Box) aus Datenbank, Anzeige nach vorgegebenem Buchstaben

    Mein <select> wird aus einer Datenbank ausgefüllt. (So weit kein Problem)
    Da aber über 100 Auswahlmöglichkeiten bestehen wollte ich innerhalb des <select> eine Vorauswahl nach Anfangsbuchstabe ermöglichen.
    hier mein Script dazu:
    PHP-Code:
    if(isset($_GET['Order'])){
    $order = ('Title');
    $buchstabe = ("");
    }elseif(isset(
    $_GET['Buchstabe'])){
    $order = ('Title');
    $buchstabe = ($_GET['Buchstabe']);
    $buchstabe = (strtoupper($buchstabe));
    }else{
    $order = ("InventaryNo");
    $buchstabe = ("");
    }

    include (
    "../zugriff.inc.php");

    $sql "SELECT * From $datenbank WHERE id ORDER BY $order";
    $result Mysql_query($sql);

    echo (
    "<select name='suchId' size='18' Style='width:100%'>");

    while (
    $row mysql_fetch_assoc($result)){
    $id "$row[Id]";
    $invno "$row[InventaryNo]";
    $title "$row[Title]";
    $category "$row[Category]";
    $suchtext = ('&nbsp;'.$invno.' &nbsp;'.$title.'&nbsp;/&nbsp;'.$category);
    $list = ("<option value='$id'>$suchtext</option>");
    if ((
    $buchstabe != "") && ($buchstabe == $list[0])){
    echo 
    $list;
    }else{
    echo 
    $list;
    }
    }
    echo (
    "</select><br></p>"); 
    Sind statt aus der Datenbank vorgegebene Begriffe festgelegt, ist das ganze völlig unproblematisch. Daraus habe ich auch meine Idee für obiges Script abgeleitet.
    PHP-Code:
    if ($buchstabe != ""){

    $select1 = ("Eintrag 1");
    $select2 = ("Ereignis 2");
    $select3 = ("Beitrag 3");
    $select4 = ("Bearbeiten 4");
    $select5 = ("Daten 5");
    $select6 = ("Durchforsten 6");
    }
    if ((
    $select1[0] == $buchstabe)||($select2[0] == $buchstabe)){
    echo (
    "<option value='value1'>$select1</option>");
    echo (
    "<option value='value2'>$select2</option>");}
    elseif ((
    $select3[0] == $buchstabe)||($select4[0] == $buchstabe)){
    echo (
    "<option value='value3'>$select3</option>"); 
    usw.
    Kann ich leider nicht machen, da die Datenbank ständig erweitert wird.

    Würde mich über Hilfe freuen.
    Vieleicht gibt es da eine wesentlich einfachere Lösung.

  • #2
    Schau dir einfach mal select2.org an. Denke das ist was du suchst
    Pre-Coffee-Posts sind mit Vorsicht zu geniessen!

    Kommentar


    • #3
      Danke für den Tip, werde mich mal mit der Seite https://select2.org/ auseinandersetzen

      Kommentar


      • #4
        Ich bin mir nicht sicher was du mit dem Code oben bezweckst (die schlechte Lesbarkeit (->nicht als Zitat sondern als Code einfügen!) macht es nicht einfacher) aber du suchst wohl datalist.

        Aber wieso steht das Thema unter "Fortgeschrittene"? Außerdem:
        - »$order = ('Title');« - wofür die Klammern? Auch bei echo und um Funktionsaufrufe (z.B. strtoupper) ist ein Satz Klammern unnötig.
        - »$id = "$row[Id]";« - Anführungszeichen um Variablen waren schon immer Unsinn. Lass sie weg und setzte sie stattdessen um den Arraykey -> »$id = $row["Id"]«. Wobei das Umkopieren von Werten ohnehin sinnfrei ist …
        - es fehlt jegliche Behandlung des Kontextwechsels!
        - durchnummerierte Variablen (wie $select1 usw. im zweiten Code) sind immer ein Hinweis darauf dass man besser ein Array verwenden sollte

        Kommentar


        • #5
          Zitat von tk1234 Beitrag anzeigen
          Ich bin mir nicht sicher was du mit dem Code oben bezweckst (die schlechte Lesbarkeit (->nicht als Zitat sondern als Code einfügen!) macht es nicht einfacher) aber du suchst wohl datalist.

          Aber wieso steht das Thema unter "Fortgeschrittene"? Außerdem:
          - »$order = ('Title');« - wofür die Klammern? Auch bei echo und um Funktionsaufrufe (z.B. strtoupper) ist ein Satz Klammern unnötig.
          - »$id = "$row[Id]";« - Anführungszeichen um Variablen waren schon immer Unsinn. Lass sie weg und setzte sie stattdessen um den Arraykey -> »$id = $row["Id"]«. Wobei das Umkopieren von Werten ohnehin sinnfrei ist …
          - es fehlt jegliche Behandlung des Kontextwechsels!
          - durchnummerierte Variablen (wie $select1 usw. im zweiten Code) sind immer ein Hinweis darauf dass man besser ein Array verwenden sollte
          Der Code war gestaffelt dargestellt und wurde beim Einfügen zusammengeschoben, sorry
          »$order = ('Title');« Das mit der Klammer kann ich mir einfach nicht abgewöhnen, der Mensch ist ein Gewohnheitstier
          »$id = "$row[Id]";« Werde ich mir zu Herzen nehmen.
          Kontextwechsel: üblicherweise benutze ich " und ' statt /"
          durchnummerierte Variablen: Das ist mir schon klar, ich wollte nur verdeutlichen welcher Grundgedanke mich zu dem obigeb Code veranlasste.

          Mein Problem als solches ist aber oimmer noch nicht gelöst.

          Hier noch einmal der Code gestaffelt (hoffe wenigstens das es mir gelingt ihn hier so einzustellen):
          PHP-Code:
          <?php
          if(isset($_GET['Order'])){ // soll nach Titel sortiert ausgegeben werden ( FUNKTIONIERT )
              
          $order = ('Title');
              
          $buchstabe = ("");
          }elseif(isset(
          $_GET['Buchstabe'])){ // soll nach Titel sortiert, mit einem bestimmten anfangsbuchstaben, ausgegeben werden ( mein PROBLEM )
              
          $order = ('Title');
              
          $buchstabe = ($_GET['Buchstabe']);
              
          $buchstabe = (strtoupper($buchstabe));
          }else{
              
          $order = ("InventaryNo"); // soll nach der Inventar-Nummer sortiert ausgegeben werden ( FUNKTIONIERT )
              
          $buchstabe = ("");
          }

          include (
          "../zugriff.inc.php");

          $sql "SELECT * From $datenbank WHERE id ORDER BY $order";
          $result Mysql_query($sql);

          echo (
          "<select name='suchId' size='18' Style='width:100%'>");

          while (
          $row mysql_fetch_assoc($result)){
              
          $id "$row[Id]";
              
          $invno "$row[InventaryNo]";
              
          $title "$row[Title]";
              
          $category "$row[Category]";
              
          $suchtext = ('&nbsp;'.$invno.' &nbsp;'.$title.'&nbsp;/&nbsp;'.$category);
              
          $list = ("<option value='$id'>$suchtext</option>");
              if ((
          $buchstabe != "") && ($buchstabe == $list[0])){
                  echo 
          $list;
              }else{
                  echo 
          $list;
              }
          }
          echo (
          "</select><br></p>");
          ?>

          Kommentar


          • #6
            Zitat von Obertroll Beitrag anzeigen
            Kontextwechsel: üblicherweise benutze ich " und ' statt /"
            ? Kontextwechsel hat nichts mit ' oder " zu tun, lies die von mir verlinkte Seite.

            Mein Problem als solches ist aber oimmer noch nicht gelöst.
            Sehe ich das richtig dass du erst über ein Textfeld o.ä. den ersten Buchstaben abfragen und im zweiten Schritt das Select mit der entsprechend reduzierten Anzahl an Elementen anzeigen willst? Das Filtern der Daten kann auch die Datenbank direkt in der Abfrage machen - viel besser als per PHP. Aber der erste Schritt ist unnötig: lass ihn weg und verwende datalist (auf der von mir verlinkten Seite ist auch ein Beispiel).

            Hier noch einmal der Code gestaffelt (hoffe wenigstens das es mir gelingt ihn hier so einzustellen):
            Jetzt noch den PHP-Button nehmen dann wird es auch bunt. Mir ist trotzdem noch was aufgefallen:

            PHP-Code:
            $result Mysql_query($sql); 
            die Funktion existiert nicht mehr, verwende mysqli oder PDO wobei ich letzteres empfehlen würde.

            Kommentar


            • #7
              Danke für die Tipps. Funktioniert jetzt, hatte allerdings bei der letzten Abfrage auch einen logischen Fehler drin. Den Schuh muss ich mir dann wohl selber anziehen.
              Code:
               
               if (($buchstabe != "") && ($buchstabe == $list[0])){         echo $list;
              $list[0] beginnt mit einer Zahl, da kann ich Stunden lang nach Buchstaben suchen. Da muss title[0] stehen. SORRY

              Kommentar


              • #8
                Und hast du den Rest auch angepasst, insbesondere das veraltete mysql gegen PDO ausgetauscht?

                Und da wäre dann noch das Vermeiden von SELECT *

                Kommentar


                • #9
                  alles funzt

                  Kommentar

                  Lädt...
                  X