Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] DB-Einträge nach Anfangsbuchstabe auslesen - Problem bei Zahlen/Sonderzeic

Einklappen

Neue Werbung 2019

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

  • [Erledigt] DB-Einträge nach Anfangsbuchstabe auslesen - Problem bei Zahlen/Sonderzeic

    Hallo zusammen!

    Ich möchte auf meiner Seite eine große Liste verschiedener Serien einbauen,
    wobei ich die Serien alphabetisch anordnen will.

    Soweit bin ich schonmal:
    Anime4ever.info | Anime-Index

    Allerdings habe ich bisher nur die Buchstaben A-Z untergebracht,
    es gibt aber auch Serien, die mit einem Punkt, einer Zahl oder sonstwas anfangen.
    Nun suche ich eine Möglichkeit, diese auch irgendwie anzeigen zu lassen.

    Ich möchte all diese Serien vor [A] mit dem Link [#] (oder so ähnlich) anzeigen lassen.

    Hier der Code der Paginierung:

    PHP-Code:
    <?php

    $letters 
    = array(=> "a"=> "b"=> "c"=> "d"=> "e"=> "f"=> "g"=> "h"=> "i"=> "j"10 => "k"11 => "l"12 => "m"13 => "n"14 => "o"15 => "p"16 => "q"17 => "r"18 => "s"19 => "t"20 => "u"21 => "v"22 => "w"23 => "x"24 => "y"25 => "z");
    $lettere = array(=> 0=> 0=> 0=> 0=> 0=> 0=> 0=> 0=> 0=> 010 => 011 => 012 => 013 => 014 => 015 => 016 => 017 => 018 => 019 => 020 => 021 => 022 => 023 => 024 => 025 => 0);

    $sql "SELECT " $select " FROM " $tabelle " WHERE " $required "!='' ORDER BY " $select;
    $sql sql_query($sql"anime");

    $count mysql_num_rows($sql);
    while ( 
    $row mysql_fetch_object($sql) )
    {
        foreach(
    $letters as $lettern => $letter)
        {
            if ( 
    substr(strtolower($row->$select), 01) == $letter)
            {
                
    $lettere[$lettern] = "1";
                break;
            }
        }
    }
    ?>
    <p class="c">
    <?php
    foreach ($lettere as $lettern => $lettert)
    {
        if ( 
    $lettert == "1" )
        {
            echo 
    '[<a href="' $base_url '&amp;&amp;letter=' $letters[$lettern] . '">' strtoupper($letters[$lettern]) . '</a>] ';
        }
        else
        {
            echo 
    "[" strtoupper($letters[$lettern]) . "] ";
        }
    }
    ?>
    </p>
    <?php

    if ( $_GET['letter'] == "" 
    {
        
    $letter "a";
    }
    else
    {
        
    $letter substr(strtolower($_GET['letter']), 01);
    }

    ?>
    Dabei wird überprüft, ob es überhaupt Einträge mit dem entsprechenden Anfangsbuchstaben gibt,
    wenn nicht, wird der Eintrag erst gar nicht verlinkt.

    Nun wäre das erste Problem, dass man einen "Buchstaben" hinzufügen muss,
    der alles beinhaltet außer A-Z. Kann man das so formulieren? Oder muss man
    alles aufzählen, was er beinhalten kann? (Wäre ziemlich umständlich...)

    Dann noch die eigentliche Abfrage:

    PHP-Code:
    $abfrage "SELECT * FROM " $tabelle " WHERE " $select " LIKE '" addslashes($letter) . "%' AND " $required "!='' ORDER BY " $select ;
        
    $sql sql_query($abfrage"anime");
    $count mysql_num_rows(mysql_query($abfrage));
        
    if ( 
    $count != "0" )
    {
    ...

    Die muss ja dann auch anders lauten, da es bei dem neuen Link ja mehrere Möglichkeiten gibt.
    Kann man die so formulieren, dass für $letter z.B. ein Array mit allen Möglichkeiten durchgegangen wird?

    Ich hoffe echt, mir kann damit jemand weiterhelfen...

  • #2
    Zitat von Teela Beitrag anzeigen
    [php]
    <?php

    $letters = array(0 => "a", 1 => "b", .......
    $lettere = array(0 => 0, 1 => 0, ......
    Geht denn nicht, einfach die beiden Arrays zu erweitern:
    zum Beispiel für Umlaute:
    für letters: 26 => "ä", 27=>"ö",28=>"ü",.............
    und so weiter für alle Einträge, die du benötigst.
    $lettere muss dann einfach ebenfalls nur ergänzt werden mit den Arrayfeldnamen aus $letters und alle Werte auf 0.

    Kommentar


    • #3
      PHP/MySQL: Datensätze gruppiert nach Anfangsbuchstabe - phpfriend.de
      "[URL="http://www.youtube.com/watch?v=yMAa_t9k2VA&feature=youtu.be&t=25s"]Mein Name ist Lohse, ich kaufe hier ein.[/URL]"

      Kommentar


      • #4
        Zitat von phpler Beitrag anzeigen
        Geht denn nicht, einfach die beiden Arrays zu erweitern:
        zum Beispiel für Umlaute:
        für letters: 26 => "ä", 27=>"ö",28=>"ü",.............
        und so weiter für alle Einträge, die du benötigst.
        $lettere muss dann einfach ebenfalls nur ergänzt werden mit den Arrayfeldnamen aus $letters und alle Werte auf 0.
        Das kann ich zwar machen, allerdings müsste ich dann für jedes weitere Zeichen einen neuen Listenpunkt erstellen. Ich möchte aber, dass alle Zeichen außer A-Z unter einem einzigen Punkt zusammengefasst werden.

        Ist zwar ein tolles Script, leider funktioniert es so, dass es alles auf einer Seite anzeigt. Es läuft durch alle Buchstaben und nimmt für den letzten einfach das, was übrig ist. Bei meinem Script sollen auf einer Seite aber immer nur die Einträge von einem Buchstaben angezeigt werden.

        Daher brauche ich eine Abfrage in der Form:

        Wenn $letter == "." dann soll er alle aus der Tabelle auslesen, wo der erste Buchstabe entweder "." oder "1" oder "2" etc ist.

        Ich hatte das bisher immer mit dem Befehl LIKE '" . $letter . "%' gelöst,
        wie kann ich bei diesem Befehl mehrere Möglichkeiten angeben,
        von denen eine zutreffen muss (praktisch ein "oder" reinbringen)?

        Kommentar


        • #5
          benutz ein regulären ausdruck...

          Kommentar


          • #6
            Zitat von Teela Beitrag anzeigen
            Bei meinem Script sollen auf einer Seite aber immer nur die Einträge von einem Buchstaben angezeigt werden
            Also mindestens bei dem von dir gezeigten Script ist das ja auch nicht der Fall. Du gibst auch alle Buchstaben (aber nicht die Titel) auf einer Seite aus. Dazu kannst du aber sehr wohl die etwas vereinfachte Funktion von Zergling benutzen:
            PHP-Code:
            <?php
            $sql 
            "
                SELECT 
                    select 
                FROM 
                    tabelle 
                WHERE 
                    required != '' 
                ORDER BY 
                    select"
            ;
            $sql sql_query($sql) or exit(mysql_error());
            foreach (
            array_merge(array('#'), range('A''Z')) as $char){
                
            $letters[$char] = 0;
            }

            while ( 
            $row mysql_fetch_object($sql) ){
                
            $initial getInitial($row->select);
                
            $letters[$initial] ++;
            }

            foreach (
            $letters as $letter){
                echo 
            $letter == "[$letter]" "[<a href='$base_url&amp;letter='$letter'>$letter</a>]";
            }


            function 
            getInitial($string){
                
            $initial strtoupper(substr($string01));
                if (
            preg_match('/^[A-Z]$/i'$initial) {
                    return 
            $initial;
                }
                else{
                     
            // Anfangsbuchstabe ein anderes Zeichen? Dann Raute als Default
                    
            return '#';
                }
            }
            ?>
            Gruss
            L

            Kommentar


            • #7
              Die Links der Buchstaben oben waren ja das geringste Problem,
              der eigentliche Knackpunkt war ja, dass er auf der #-Seite
              alles außer A-Z ausliest.

              Ist aber auch egal, wie man sieht, habe ich es irgendwie doch auf die Reihe bekommen ^^

              Trotzdem danke für eure Hilfe ^^

              Kommentar

              Lädt...
              X