Sortierung von Datensätze

  • Sortierung von Datensätze

    Hallo Leute,

    nach langem googeln muss ich mein Problem doch im Forum schildern.
    Ich habe eine TXT-Datenbank mit folgendem Inhalt:

    id1;;anrede1;;name1;;email1;;datum1;;
    id2;;anrede2;;name2;;email2;;datum2;;
    id3;;anrede3;;name3;;email3;;datum3;;
    usw...

    und frage diese DB volgendermasen ab:

    Quellcode

    1. <table width="100%" border="0" cellpadding="2" cellspacing="2">
    2. <tr>
    3. <td bgcolor="#CCCCCC">&nbsp;<form name="FormUserId" method="post" action="newsletter_admin_user.php">
    4. <a class="Link" href="javascript:document.FormUserId.submit();"><strong>User-ID</strong></a>
    5. <input type="hidden" name="sort_user_id" value="1"></form></td>
    6. <td bgcolor="#CCCCCC">&nbsp;<form name="FormSuffix" method="post" action="newsletter_admin_user.php">
    7. <a class="Link" href="javascript:document.FormSuffix.submit();"><strong>Anrede</strong></a>
    8. <input type="hidden" name="sort_suffix" value="1"></form></td>
    9. <td bgcolor="#CCCCCC">&nbsp;<form name="FormName" method="post" action="newsletter_admin_user.php">
    10. <a class="Link" href="javascript:document.FormName.submit();"><strong>Name</strong></a>
    11. <input type="hidden" name="sort_name" value="1"></form></td>
    12. <td bgcolor="#CCCCCC">&nbsp;<form name="FormEmail" method="post" action="newsletter_admin_user.php">
    13. <a class="Link" href="javascript:document.FormEmail.submit();"><strong>Email-Adresse</strong></a>
    14. <input type="hidden" name="sort_email" value="1"></form></td>
    15. <td bgcolor="#CCCCCC">&nbsp;<form name="FormDatum" method="post" action="newsletter_admin_user.php">
    16. <a class="Link" href="javascript:document.FormDatum.submit();"><strong>Registrierungsdatum</strong></a>
    17. <input type="hidden" name="sort_datum" value="1"></form></td>
    18. <td bgcolor="#CCCCCC">&nbsp;<strong>L&ouml;schen</strong></td>
    19. </tr>
    20. <?php
    21. if ($sort_user_id == "1")
    22. { asort(???); }
    23. elseif ($sort_suffix == "1")
    24. { asort(???); }
    25. elseif ($sort_name == "1")
    26. { asort(???); }
    27. elseif ($sort_email == "1")
    28. { asort(???); }
    29. elseif ($sort_datum == "1")
    30. { asort(???); }
    31. else
    32. { asort(???); }
    33. $db_emails = file("test.txt");
    34. while (list ($line_num, $line) = each ($db_emails))
    35. {
    36. $datensatz_emails = explode(";;",$line);
    37. ?>
    38. <tr onMouseOver="this.style.backgroundColor='#E9E9E9';" onMouseOut="this.style.backgroundColor='';">
    39. <td>&nbsp;<?php echo $datensatz_emails[0]; ?></td>
    40. <td>&nbsp;<?php echo $datensatz_emails[1]; ?></td>
    41. <td>&nbsp;<?php echo $datensatz_emails[2]; ?></td>
    42. <td>&nbsp;<?php echo $datensatz_emails[3]; ?></td>
    43. <td>&nbsp;<?php echo $datensatz_emails[4]; ?></td>
    44. </tr>
    45. <?php
    46. }
    47. ?>
    48. </table>
    Alles anzeigen


    Wie kann ich die Datensätze mit den jeweiligen Forms, also nach den jeweiligen Spalten sortieren? Ich habe die Datensätze auch schon in ein Arry gesetzt, aber ich habe es nicht zum laufen bekommen. Könnt ihr mir bitte helfen?

    Gruß KMD
  • Also...du sortierst die Einträge aus der Textdatei/Datenbank nach Schlüssel, wodurch die Einträge zu identifizieren/sortieren sind...

    ich hab einfach mal schlüssel wie user_id, suffix usw. benutzt...
    dann fragst du ab, in welcher Reihenfolge er sortieren soll...
    habe dein Tabellenkopf demnach etwas angepasst...

    Quellcode

    1. <input type="hidden" name="sort" value="user_id">
    2. usw...mit den anderen Hidden Feldern

    Jetzt Lesen wir alle Daten erst einmal aus und sortieren die in die Schlüssel ein:

    Quellcode

    1. $db_emails = file("test.txt");
    2. while(list($line_num, $line) = each($db_emails))
    3. {
    4. $datenex[$line_num] = explode(";;",$line);
    5. $daten['user_id'][$line_num] = $datenex[$line_num]['0'];
    6. $daten['suffix'][$line_num] = $datenex[$line_num]['1'];
    7. $daten['name'][$line_num] = $datenex[$line_num]['2'];
    8. $daten['email'][$line_num] = $datenex[$line_num]['3'];
    9. $daten['datum'][$line_num] = $datenex[$line_num]['4'];
    10. }

    Jetzt Sortieren wir diese...dafür auch die veränderten Hidden Felder, die jetzt per $_POST['sort'] abgefragt werden :)

    Quellcode

    1. asort($daten[$_POST['sort']],SORT_STRING);

    Anschließend generieren wir deine Ausgabe in einen schönen HTML Code:

    Quellcode

    1. while(list($key,$value) = each($daten[$_POST['sort']])) {
    2. print("<tr onMouseOver=\"this.style.backgroundColor='#E9E9E9';\" onMouseOut=\"this.style.backgroundColor='';\">");
    3. print("<td>&nbsp;".$daten['user_id'][$key]."</td>");
    4. print("<td>&nbsp;".$daten['suffix'][$key]."</td>");
    5. print("<td>&nbsp;".$daten['name'][$key]."</td>");
    6. print("<td>&nbsp;".$daten['email'][$key]."</td>");
    7. print("<td>&nbsp;".$daten['datum'][$key]."</td>");
    8. print("</tr>");
    9. }

    So sollte es funktionieren...

    hier nochmal der gesamte Quellcode:

    Quellcode

    1. <html>
    2. <body>
    3. <table width="100%" border="0" cellpadding="2" cellspacing="2">
    4. <tr>
    5. <td bgcolor="#CCCCCC">&nbsp;<form name="FormUserId" method="post" action="newsletter_admin_user.php">
    6. <a class="Link" href="javascript:document.FormUserId.submit();"><strong>User-ID</strong></a>
    7. <input type="hidden" name="sort" value="user_id"></form></td>
    8. <td bgcolor="#CCCCCC">&nbsp;<form name="FormSuffix" method="post" action="newsletter_admin_user.php">
    9. <a class="Link" href="javascript:document.FormSuffix.submit();"><strong>Anrede</strong></a>
    10. <input type="hidden" name="sort" value="suffix"></form></td>
    11. <td bgcolor="#CCCCCC">&nbsp;<form name="FormName" method="post" action="newsletter_admin_user.php">
    12. <a class="Link" href="javascript:document.FormName.submit();"><strong>Name</strong></a>
    13. <input type="hidden" name="sort" value="name"></form></td>
    14. <td bgcolor="#CCCCCC">&nbsp;<form name="FormEmail" method="post" action="newsletter_admin_user.php">
    15. <a class="Link" href="javascript:document.FormEmail.submit();"><strong>Email-Adresse</strong></a>
    16. <input type="hidden" name="sort" value="email"></form></td>
    17. <td bgcolor="#CCCCCC">&nbsp;<form name="FormDatum" method="post" action="newsletter_admin_user.php">
    18. <a class="Link" href="javascript:document.FormDatum.submit();"><strong>Registrierungsdatum</strong></a>
    19. <input type="hidden" name="sort" value="datum"></form></td>
    20. <td bgcolor="#CCCCCC">&nbsp;<strong>L&ouml;schen</strong></td>
    21. </tr>
    22. <?php
    23. $db_emails = file("test.txt");
    24. while(list($line_num, $line) = each($db_emails))
    25. {
    26. $datenex[$line_num] = explode(";;",$line);
    27. $daten['user_id'][$line_num] = $datenex[$line_num]['0'];
    28. $daten['suffix'][$line_num] = $datenex[$line_num]['1'];
    29. $daten['name'][$line_num] = $datenex[$line_num]['2'];
    30. $daten['email'][$line_num] = $datenex[$line_num]['3'];
    31. $daten['datum'][$line_num] = $datenex[$line_num]['4'];
    32. }
    33. asort($daten[$_POST['sort']],SORT_STRING);
    34. while(list($key,$value) = each($daten[$_POST['sort']])) {
    35. print("<tr onMouseOver=\"this.style.backgroundColor='#E9E9E9';\" onMouseOut=\"this.style.backgroundColor='';\">");
    36. print("<td>&nbsp;".$daten['user_id'][$key]."</td>");
    37. print("<td>&nbsp;".$daten['suffix'][$key]."</td>");
    38. print("<td>&nbsp;".$daten['name'][$key]."</td>");
    39. print("<td>&nbsp;".$daten['email'][$key]."</td>");
    40. print("<td>&nbsp;".$daten['datum'][$key]."</td>");
    41. print("</tr>");
    42. }
    43. ?>
    44. </table>
    45. </body>
    46. </html>
    Alles anzeigen

    zum Testen hab ich die Test.txt mal verändert:

    Quellcode

    1. id1;;herr;;name1;;email1;;datum1;;
    2. id2;;frau;;name2;;email2;;datum2;;
    3. id3;;herr;;name3;;email3;;datum3;;


    Viel Spaß damit...
    gruß FZicklam, iSoftDesign
    Lerne nicht Programmiersprachen, lerne Programmieren...

    :D Alles andere ist Syntax :D

    [Blockierte Grafik: http://www.xing.com/img/buttons/10_en_btn.gif]
  • ändere noch bitte folgende Zeilen:
    ab 33 folgendes Einfügen

    Quellcode

    1. if($_POST['sort'] == '' || !isset($_POST['sort'])) $sort = 'user_id';
    2. else $sort = $_POST['sort'];


    und danach die nächsten 2 Zeilen ändern in

    Quellcode

    1. asort($daten[$sort],SORT_STRING);
    2. while(list($key,$value) = each($daten[$sort])) {


    zu 1:
    Bei mir sortiert er es so...
    siehe http://www.isoftdesign.de/test/newsletter_admin_user.php

    Zu 2:
    schau dir mal die funktion array_multisort an
    http://de.php.net/manual/de/function.array-multisort.php

    damit sollte es funktionieren...versuch es erst mal und wenn es nicht klappt, meldest du dich nochmal
    Lerne nicht Programmiersprachen, lerne Programmieren...

    :D Alles andere ist Syntax :D

    [Blockierte Grafik: http://www.xing.com/img/buttons/10_en_btn.gif]
  • Hallo eLKane,

    kannst du mir nochmal helfen?
    Ich bekomme die Funktion array_multisort nicht gebacken! :oops:

    Gibt es eigentlich auch die umgekehrte Version von natcasesort(). So das man aufsteigend sortieren kann?
    Fragen über Fragen...
    Ich habe mir schon alle arten der Sort-Funktion durchgelesen, aber nichts gefunden was auch Groß und Klein-Schreibung ignoriert.

    Gruß KMD