Ankündigung

Einklappen
Keine Ankündigung bisher.

Reihenfolge der Tabellen-Spalten durch User wählbar?

Einklappen

Neue Werbung 2019

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

  • Reihenfolge der Tabellen-Spalten durch User wählbar?

    Hallo

    Ich lasse Datensätze in einer Tabelle darstellen. Der User soll wählen können, welche Felder dargestellt werden sollen. Das habe ich hingekriegt mit einem if().

    Ich möchte aber dem User auch die Möglichkeit geben, die Reihenfolge der Spalten selbst zu wählen, z.B. indem er jedes Feld mit einer Nummer versehen kann, die ich dann als Reihenfolge benutze. Leider habe ich keine Idee, wie ich die Reihenfolge nach diesen Zahlen umstellen könnte.

    Kann mir da irgendjemand mit einem Tipp weiterhelfen?

    Danke.

  • #2
    Ich verstehe die Frage nicht so ganz, du bist doch an garkeine Reihenfolge gebunden.

    PHP-Code:
    <?php
    $manuelleSpaltenreihenfolge 
    = array("spalte3""spalte1""spalte2");
    while (
    $row mysql_fetch_assoc($res)) {
      print 
    $row[$manuelleSpaltenreihenfolge[0]] . "
    "
    ;
      print 
    $row[$manuelleSpaltenreihenfolge[1]] . "
    "
    ;
      print 
    $row[$manuelleSpaltenreihenfolge[2]] . "
    "
    ;
      print 
    "<hr />";
    }
    ?>
    Die Reihenfolge kannst du normal über ein Formular umsetzen. Wie du das machst (validieren nicht vergessen) bleibt deiner Kreativität überlassen oder hängst du tatsächlich daran?

    Kommentar


    • #3
      Danke für deine Antwort, Zergling

      Hier zum besseren Verstöndnis mein Code:
      PHP-Code:
      <?
      echo '<table width="100%" border="1" cellspacing="2" cellpadding="2">';
      echo '<tr>';
      echo '<td>Kurs-Bezeichnung</td>'; //Spaltenüberschrift1
      if($zeig_nr=="j") {echo '<td>Kurs-Nummer</td>';} //Spaltenüberschrift2
      if($zeig_leitung=="j") {echo '<td>Leitung</td>';} //Spaltenüberschrift3
      if($zeig_preis=="j") {echo '<td>Preis</td>';} //Spaltenüberschrift4
      echo '<td>Beginn</td>'; //Spaltenüberschrift5
      echo '<td>Ende</td>'; //Spaltenüberschrift6
      echo '</tr>';
      for($j=0;$j<$datensatzanzahl;$j++)
          {
          echo '<tr>';
          echo '<td>'.mysql_result($ergebnis,$j,"kursbezeichnung").'</td>'; //Spalteninhalt1
          if($zeig_nr=="j") {echo '<td>'.mysql_result($ergebnis,$j,"nr").'</td>';} //Spalteninhalt2
          if($zeig_leitung=="j") {echo '<td>'.mysql_result($ergebnis,$j,"leitung").'</td>';} //Spalteninhalt3
          if($zeig_preis=="j") {echo '<td><div align="right">'.money_format('%2n',mysql_result($ergebnis,$j,"preis")).'</div></td>';} //Spalteninhalt4
          echo '<td>'.date("d.m.Y",mysql_result($ergebnis,$j,"beginn")).'</td>'; //Spalteninhalt5
          echo '<td>'.date("d.m.Y",mysql_result($ergebnis,$j,"ende")).'</td>'; //Spalteninhalt6
          echo '</tr>';
          }
      echo '</table>';
      ?>
      Es wird also eine Tabelle mit bis zu 6 Spalten generiert. Ich könnte nun deinen Tipp übertragen, das würde jedoch bedeuten, dass ich innerhalb der for-Schleife für jeden Datensatz das Array erstellen und auslesen müsste. Würde zum einen wohl etwas viel Aufwand.

      Und zum anderen ist mein Problem damit nicht gelöst, nämlich die Frage, wie ich die Felder in die richtige Reihenfolge bringe. Ich gehe davon aus, dass der User in einem Formular z.B. folgende Variablen bestimmt hat:
      nr_kursbezeichnung=2
      nr_nr=1
      nr_leitung=3
      nr_preis=6
      nr_beginn=4
      nr_ende=5
      Wie ich aufgrund dieser Angaben das Array in richtiger Reihenfolge hinkriegen würde, ist mir nicht klar. Und ob es die richtige Weise ist, in der for-Schleife das problem zu lösen, bezweifle ich.

      Ich hoffe jedoch, dass damit zumindest meine Fragestellung klarer ist.

      RoDa

      Kommentar


      • #4
        Pseudo-HTML-Code:
        Code:
        <form>
        Feld 1:
        <select name="order[]">
          <option>Spalte 1</option>
          <option>Spalte 2</option>
        </select>
        
        
        Feld 2:
        <select name="order[]">
          <option>Spalte 1</option>
          <option>Spalte 2</option>
        </select>
        </form>
        Jetzt musst du doch nurnoch überprüfen, dass kein Feld doppelt ausgewählt wurde - siehe dazu array_unique() im Manual - und dass die übertragenen Werte auch tatsächlich erlaubte Spaltennamen sind (vertraue nie einem User-Input) - zB mit in_array().

        Danach kannst du so vorgehen wie in meinem 1. Posting beschrieben, da du dann einen $_POST['order'] Array hast, der also $manuelleSpaltenreihenfolge entspricht.

        http://de.php.net/array_unique
        http://de.php.net/in_array


        Deinen Code habe ich mir jetzt nicht großartig angeschaut, war mir zu unübersichtlich

        Kommentar


        • #5
          O.K., herzlichen Dank, jetzt weiss ich, wie ichs anpacken muss.

          RoDa

          Kommentar

          Lädt...
          X