Adressbuch mit Buchstaben Reiter (Accordeon Effekt) erstellen...

  • Hi,
    Ich habe nun zig stunden an Goolge & co durchwühlt und stehe mit einem "Problem" ein wenig an:

    Ich möchte ein Namensverzeichnis sortiert nach A.... B.... C... etc. erstellen.
    Dh.
    Ich möchte aus meiner mysql Datenbank alle Nachnamen die mit A Beginnen in ein Div Schreiben
    Dann B etc.

    etwas so:

    A.........
    Alen Rudi
    Ales Fritz
    Anderer Name
    B.........
    Baslau Franz
    Bresbaum Klaus
    Bulan Kurt

    C....
    (leer wenn keiner mit C beginnt)
    D...
    Demla Martin
    etc. etx

    Was wäre der optimale weg sowas umzusetzen?

    1) Datenbank Verbindung herstellen usw.. ist klar.
    Seite wird eine php Seite sein... auch klar.

    Natürlich kann ich etwa so alles ausgeben:
    $query_Recordset1 = "SELECT * FROM meineTabelle WHERE meineTabelle.SpalteA LIKE 'a%' or SpalteA LIKE 'b%' ";

    So gibts alle A's aus dann B's ...
    Ich müsste aber in ein Div alle A's reinschreiben lassen
    ein ein weiteres Div alle B's
    usw.
    :?:
    Frage - wäre dieser Ansatz klug:
    $query_Recordseta = "SELECT * FROM meineTabelle WHERE meineTabelle.SpalteA LIKE 'a%' ";
    $query_Recordsetb = "SELECT * FROM meineTabelle WHERE meineTabelle.SpalteA LIKE 'b%' ";
    $query_Recordsetc = "SELECT * FROM meineTabelle WHERE meineTabelle.SpalteA LIKE 'c%' ";

    und dann in jedes Div diesen Code (mit a,b,c je nach Reihenfolge) rein:

    PHP
    <?php do { ?>
            <?php echo  $row_Recordseta['SpalteA']; ?></a><br />  <?php }  while ($row_Recordseta = mysql_fetch_assoc($Recordseta)); ?>

    zum Schluß der Seite:
    <?php
    mysql_free_result($Recordseta);
    mysql_free_result($Recordsetb);
    mysql_free_result($Recordsetc);
    ?>

    Bitte um Hilfe

    DANKE
    Martin

    Einmal editiert, zuletzt von martinius332 (2. September 2013 um 13:54)

  • Wo liegen denn deine Probleme.
    Du lässt dir alle Namen alphabetisch sortiert in einer Schleife ausgeben.
    In der Schleife prüfst du dann gleich am Anfang auf den Anfangsbuchstaben.
    Wenn der sich ändert, liegt ein Gruppenwechsel vor, dass heisst der nächste Buchstabe folgt.
    Den nächsten Buchstaben hast du ja als Anfangsbuchstaben aus den Namen und stellts ihn oben voran als Überschrift oder was auch immer.

    Das war es eigentlich.


  • Du lässt dir alle Namen alphabetisch sortiert in einer Schleife ausgeben.
    In der Schleife prüfst du dann gleich am Anfang auf den Anfangsbuchstaben.

    OK,
    Die Ausgabe aller Daten ist ja easy:
    im Head:
    unter anderem...(Datenbankverbindung...)

    PHP
    mysql_select_db($database_Vertrigo, $Vertrigo);
    $query_RecordsetA = "SELECT * FROM tabelleA ORDER BY tabelleA.Nachname";
    $RecordsetA = mysql_query($query_RecordsetA, $Vertrigo) or die(mysql_error());
    $row_RecordsetA = mysql_fetch_assoc($RecordsetA);
    $totalRows_RecordsetA = mysql_num_rows($RecordsetA);

    im body:

    Was rauskommt ist eine Tabelle mit allen Zeilen der TabelleA
    Nach Nachnamen -und A-Z Sortiert.

    Schön,
    aber wie schreibe ich NUR A beginnende Namen in ein Div (für den Accordeon Effekt muss es in ein Div rein!)
    Die Namen mit B müssen in ein anderes Div.
    Die Überschriften also A Reiter B Reiter kann ich selber schreiben, obwohl es natürlich perfekt wäre, wenn man dies auch automatisieren könnte, muss aber nicht sein...

    Konkrekter:

    noch ein weinig Javascript.. und css dazu und das Accordeon läuft...

    So nun statt html only...
    daten aus der Datenbank holen...

    in dieser Art würde es schon laufen, aber das ist sicher nicht die beste Art (denke ich).

  • So in etwa, ist aber ungetestet!

    Einmal editiert, zuletzt von explanator (2. September 2013 um 23:07)

  • So in etwa, ist aber ungetestet!

    SUper,
    DAnke,
    ich werde mal daran rumwerkeln...
    ...in der While Schleife ist noch irgendein Error...
    ich suche mal nach lösungen...

    Das fette Buch von Stefan Münz liegt am Tisch neben mir und die Download pdf Version am Bildschirm...
    versuche mein Bestes...


    DANKE inzwischen
    lg
    Martin

  • Back to basic:

    wie stelle ich es an, dass NUR der erste Buchstabe der alphabetischen Reihe ausgeben wird??? :?:

    Also z.b.
    in meiner Datenbank VERTIGO steht unter VORNAMEN in der Tabelle - NAMENSLISTE

    Anton
    Alfons
    Aaron
    Alois
    Berta
    Beate
    Birgitt
    Dorin
    Dagmar

    ich möchte folgende Ausgabe zusammenbringen:

    A
    Anton
    Alfons
    Aaron
    Alois

    B
    Berta
    Beate
    Birgitt

    D
    Dorin
    Dagmar


    (c fehlt ja in der Namensliste)

    fertig sollte es ja dann so aussehen

  • Den ersten Buchstaben erhälst du ganz einfach hiermit:

    PHP
    $erster_buchstabe = $Vorname[0];

    Super DANKE - das wäre geschafft!:

    Bleibt noch das Rätsel warum in den Content des Panels nix reingeschrieben wird???

    PHP
    $output .= '<div class="AccordionPanelContent">' .($row['nachname']) .($row['vorname']);
    
    
            $output .= "\n</div>";

    Einmal editiert, zuletzt von martinius332 (4. September 2013 um 11:13)

  • verbesserte Version der while-Schleife:

    Achte darauf wie du die Feldnamen schreibst, weil mal schreibst du sie gross, dann wieder klein.

  • Nun ist es FAST geschafft...

    Ich habe etwas rumgebastelt...
    soweit sieht es gut aus, ABER...

    Leider werden die Eizelnen Einträge eines Buchstabens nicht
    Zeile für Zeile in ein Div geschrieben, sonder
    in dieser Art:

    A
    Aal Martin

    A
    Abend Hintz

    A
    Arm Klaus

    B
    Brand Rudi
    ...
    Wo ist mein Fehler???

    Aussehen sollte es natürlich so:
    A
    Aal Martin
    Abend Hintz
    Arm Klaus

    B
    Brand Rudi

    ... eh klar :(

    Hier die aktuelleste Version...:


    :shock:

  • Wenn du dich daran hälst, findest du den Fehler bestimmt selber ;) :

    Richtig debuggen

    1. Man bemerkt, dass ein Skript nicht das tut, was es soll.
    2. Man schreibt an den Anfang des Scriptes die Zeile: error_reporting(-1);
    3. Man verwendet ini_set('display_errors', true); damit die Fehler auch angezeigt werden.
    4. Man versucht, die Stelle die daran Schuld sein kann, schonmal einzugrenzen. Falls dies nicht geht, wird zunächst das komplette Skript als fehlerhaft angesehen.
    5. An markanten Stellen im Skript lässt man sich wichtige Variableninhalte ausgeben und ggf. auch in bedingten Anweisungen eine kurze Ausgabe machen, um zu überprüfen, welche Bedingung ausgeführt wurde. Wichtig bei MySQL Fehlern (...not a valid MySQL result resource...): mysqli_error() verwenden oder Abfrage ausgeben und zb mit phpmyadmin testen.
    6. Schritt 5 wird so lange wiederholt, bis Unstimmigkeiten im Skript auffallen
    7. Damit hat man das Problem (Unstimmigkeit) gefunden und kann versuchen diese zu beheben. Hierzu dienen dann die PHP-Dokumentation und andere Quellen als Ratgeber.
    8. Lässt sich das konkrete Problem trotzdem nicht beheben, kann man in Foren um Rat fragen.
    9. Das Programm läuft und man kann die Debug-Ausgaben wieder entfernen.

  • Wenn du dich daran hälst, findest du den Fehler bestimmt selber ;) :

    Richtig debuggen

    8. Lässt sich das konkrete Problem trotzdem nicht beheben, kann man in Foren um Rat fragen.
    9. Das Programm läuft und man kann die Debug-Ausgaben wieder entfernen.

    JO, genau...
    Das Skript läuft durch - keine Fehlermeldung - kein Error what so ever, BUT
    daten werden falsch bzw. eben nicht wie gewünscht geschrieben.
    Hat natürlich nichts mit den codes an sich zu tun, sondern mit dem konzept der Sache selber...
    UND da hilft leider kein Error Report,
    kann aber sein, dass ein real Insider sofort sieht.. da ist der Hacken.

    Hoffe da lieg ich nicht falsch...:-D

  • Ähm, "Richtig debuggen" beinhaltet insgesamt 9 Punkte, die du alle beachten solltest. Besonders in diesem Falle wäre Punkt 5 wichtig und das bezogen auf $firstletter!

  • verbesserte Version der while-Schleife:

    DANKE,
    hat mir sehr geholfen!!!!

    Ich habe nun soweit alles wie gewünscht... die Daten werden in eine Art Accordeon geschrieben. Großer Anfangsbuchstabe etc.
    Super:
    Hier die gefundene oder sagen wir die Lösung die Funktioniert:

    Mein nächster "Baustein" wäre nun noch, dass die Namen aus bestimmten ordnern einen Link raus nehmen...
    Ich habe in der Datenbank einen Spalte die heißt ordner und eine Spalte die heißt link .
    Nun müsste ich sowas wie <a href=" ../ordner/link"> auslesen.
    Ich hab' schon einiges Versucht... aber ich find keinen Ansatz..


    Bitte im Hilfe :shock:

    DANKE

  • Gelöst: :D

  • Noch eine Frage zur Sortierung:

    $query = "SELECT Unterkunftsname, Unterkunftstyp,Ordner, Detailinfo FROM ferienwohnungen ORDER BY Unterkunftsname";


    Obige Sortierung ist nach A-Z .
    Nun möchte ich aber unter A alle Einträge die in der Spalte PARTNER eine 1 haben zuoberst gereiht nach A-Z wieder sortiert...
    Geht das?

    Erklärung:

    Die Tabellen Spalten:
    Unterkunftstyp - UnterkunftsnamePartner

    Apartment Post 0
    Apartment Almosen 1
    Apartment Bitumen 0
    Apartment Zeppelin 1


    Die Ausgabe müsste nun so Aussehen:

    A
    Almosen Apartment (=Partner mit 1)
    Zeppelin Apartment (=Partner mit 1)
    Bitumen Apartment (=Partner mit 0)
    Post Apartment (=Partner mit 0)

    Kann man so eine Sortierung irgendwie auslesen???:roll: