Durch SQL-Abfrage im selben Formular blättern

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

  • Durch SQL-Abfrage im selben Formular blättern

    Hallo zusammen,

    folgendes Problem:

    Ich habe eine MySQL-Datenbank mit u. a. einer Tabelle "Kunden". In dem Script, um die Kunden auszuwerten, habe ich zwei Dropdown-Listen erstellt, welche die Variablen für die SQL Suche bereitstellen, also "sortieren nach Kunden Nr, Name, usw." und "Reihenfolge absteigend, aufsteigend". Diese Variablen werden per $_POST an die SQL Suche übergeben, die Ausgabe erfolgt im selben Formular per $_SERVER['PHP_SELF'] und das funktioniert auch einwandfrei.

    Aber da sich diese Tabelle "Kunden" mit steigender Tendenz füllt, will ich den Inhalt per Blätter-Funktion ausgeben. Wie ich die Links erstellen soll, dafür brauch ich ja nur im Forum suchen.

    Wie kann ich nun die Variablen für die Suche (Dropdown-Listen) so übermitteln, dass eine neue SQL-Abfrage erstellt wird, wenn ich das Formular per POST abschicke, aber gerade durch die Anzeige einer älteren Suche blättere? Und das alles sollte im gleichen Formular per $_SERVER['PHP_SELF'] angezeigt werden.

    Über Lösungen, Links oder auch nur einen Denkanstoß wäre ich sehr dankbar.

    MfG
    RainbowSailorZ

  • #2
    Wie ich die Links erstellen soll, dafür brauch ich ja nur im Forum suchen.
    Gratulation! Wenigstens einer, der das merkt ...

    naja, du musst die parameter eben irgendwie übergeben. das kannst du entweder mit den links machen: seite.php?page=2&sort=name&direction=asc oder mit sessions.

    Kommentar


    • #3
      Hmm, das hab ich schon versucht, die Variablen per $_GET zu übermitteln. Aber das läuft nicht so zufriedenstellend.

      Ich werde mal bisschen was von meinem Script posten:

      Ganz am Anfag steht das Formular in HTML-Form. Danach prüfe ich, ob überhaupt etwas per Submit gesendet wurde und somit im POST-Array steht. Wenn dem nicht so ist, wird bis auf das Formular mit den Dropdown-Listen nichts angezeigt.

      Wenn etwas gesendet wurde, werden folgende Variablen initialisiert:

      PHP-Code:
      $sortieren     $_POST['sortieren'];
                 
      $reihenfolge $_POST['reihenfolge']; 
      Die Abfrage:

      PHP-Code:
      $sql "SELECT
                          kunden_id,
                          concat(name, ', ', vorname) AS Kunde,
                          strasse,
                          plz,
                          ort
                      FROM
                          kunden
                      ORDER BY
                          "
      .$sortieren."
                          "
      .$reihenfolge.";"
      Aber nun ist mir nicht ganz so klar, wie ich den Variablen $sortieren und $reihenfolge mitteile, dass etwas im POST-Array oder im GET-Array steht. Das GET-Array sollte nur berücksichtigt werden, wenn ich durch eine vorhandene SQL-Abfrage blättere. Das POST-Array hingegen, wenn die Abfrage zum ersten Mal erstellt wird bzw. wenn sie neu erstellt wird. Das ist mein Problemchen.

      Kommentar


      • #4
        PHP-Code:
        $sortieren = isset($_POST['sortieren']) ? $_POST['sortieren'] :
                     isset(
        $_GET['sortieren']) ? $_GET['sortieren'] :
                     
        'defaultwert.wenn.post.oder.get.nicht.gewirkt.haben'
        INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


        Kommentar


        • #5
          kennst du isset und empty. damit ist das kein problem!

          Kommentar


          • #6
            Ich habe gerade mal den Code von Abraxax ausprobiert, aber irgendwie bekomme ich damit immer eine "Undefined Index"-Meldung. Ich hab das einfach mal in mehrere If-Abfragen umgeformt. Vielleicht lag der Fehler auch nur daran, dass ich es jetzt auf die schnelle probiert habe.

            Es funktioniert trotzdem nicht so richtig. Es wird zwar, nachdem das Formular abgeschickt wurde, ein Link auf die gleiche Datei mit den richtigen Variabelen erstellt, z. B.:

            PHP-Code:
            kunden_view.php?sortieren=plz&reihenfolge=ASC 
            Eigentlich sollte es ja so gehen aber die Ausgabe bleibt dann bei den Default-Werten (kunden_id, ASC) stehen

            Kommentar


            • #7
              Also ich mache das mit dem Blättern immer so, dass ich einen Offsetwert mit übergebe und den mit dem SQL-Befehl "LIMIT $offset" kombiniere.
              Alle weiteren Bedingungen lassen sich dann aus dem Ergebnis ermitteln.

              P.S.: Spielt Dir vielleicht der Browser einen Streich, weil er die Seite aus dem Cache hervorkramt und die Anfrage gar nicht an den Server schickt?
              Zuletzt geändert von DSB; 18.10.2003, 18:53.

              Kommentar


              • #8
                Alle weiteren Bedingungen lassen sich dann aus dem Ergebnis ermitteln.
                kannst du das mal näher definieren?

                Kommentar


                • #9
                  Original geschrieben von TobiaZ
                  kannst du das mal näher definieren?
                  Ich meinte damit alles, was mit dem Blättern zu tun hat.
                  Also wieviele Seiten angezeigt werden müssen usw...
                  War ein bisschen ungünstig von mir ausgedrückt, da sich das nicht auf die Bedingungen von RainbowSailorZ (Sortierung) bezog.

                  Kommentar


                  • #10
                    Hallo zusammen,

                    da will ich mich mal wieder melden. Bin gestern Abend nicht mehr dazugekommen.

                    Erstmal ein riesen , eure Hilfe war super! Mein Script funktioniert jetzt so, wie ich es wollte. Ich bin davon abgekommen, das Formular erst per POST abzusenden und dann die Links zum Blättern per GET zu erstellen. Das wurde irgendwie doch zuviel Kuddelmuddel, jedenfalls für mich als Anfänger. Jetzt wird alles per GET übermittelt. Und steht ja dadurch im Klartext in der Browserzeile, was mich noch bisschen stört. Deswegen lasse ich die Kriterien für die SQL-Abfrage per str_replace ersetzen. So geht es auch.

                    Ich poste mal das fertige Script. Vielleicht könnt ihr es mal kurz durchschauen und mir sagen, wie man einige Teile zusammenfassen, kürzen kann. Es sieht für mich bisschen groß aus. Ok, schon mal danke im voraus. Und reißt mir nicht den Kopf runter, wenn es ungelegen kommt

                    PHP-Code:
                    <?php

                        
                    /*
                            Header on
                        */
                        
                    include 'inc/config.php';
                        include 
                    'tpl/header.php';
                        include 
                    'tpl/navigation.php';
                        echo 
                    "<div id=\"content\">\n";
                        
                    /*
                            Header off
                        */

                    ?>

                        <h3>Kundendatei</h3>

                        <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="get" class="formular">
                            <label for="sortieren">Sortieren nach</label>
                            <select name="sortieren" id="sortieren">
                                <option value="0" selected="selected">------</option>
                                <option value="1">Kunden Nr.</option>
                                <option value="2">Name</option>
                                <option value="3">Postleitzahl</option>
                                <option value="4">Wohnort</option>
                            </select>
                            <label for="reihenfolge">Reihenfolge</label>
                            <select name="reihenfolge" id="reihenfolge">
                                <option value="0" selected="selected">------</option>
                                <option value="1">absteigend</option>
                                <option value="2">aufsteigend</option>
                            </select>
                            <input type="submit" name="submit" value="Anzeigen" />
                            <input type="reset" name="reset" value="Zur&uuml;cksetzen" />
                        </form>

                    <?php

                        
                    if (!empty($_GET)) {

                            
                    /*
                                Anzahl der Links zum Blättern ermitteln - Start
                            */
                            
                    $anfang 0;
                            
                    $zeilenproseite 15;

                            
                    $sql    "SELECT COUNT(*) AS Anzahl FROM kunden;";
                            
                    $result mysql_query($sql) or die(mysql_error());
                            
                    $anzahl mysql_result($result0);
                            
                    $start  = isset($_GET['seite']) ? (int) $_GET['seite'] : 1;
                            
                    $seiten ceil($anzahl/$zeilenproseite);

                            if(!
                    $seiten) {
                                
                    $seiten 1;
                            }

                            if(
                    $start 1) {
                                
                    $start 1;
                            }

                            if(
                    $start $seiten) {
                                
                    $start $seiten;
                            }

                            
                    $anfang = ($start 1) * $zeilenproseite;
                            
                    /*
                                Anzahl der Links zum Blättern ermitteln - Ende
                            */

                            /*
                                Kriterien für SQL-Abfrage ersetzen - Start
                            */
                            
                    $kritsort = array('1''2''3''4');
                            
                    $kritreih = array('1''2');
                            
                    $replsort = array('kunden_id''Kunde''plz''ort');
                            
                    $replreih = array('DESC''ASC');
                            
                    $endsort  str_replace($kritsort$replsort$_GET['sortieren']);
                            
                    $endreih  str_replace($kritreih$replreih$_GET['reihenfolge']);

                            if (isset(
                    $_GET['sortieren'])) {
                                    
                    $sortieren $endsort;
                                } else {
                                    
                    $sortieren 'kunden_id';
                                }

                            if (isset(
                    $_GET['reihenfolge'])) {
                                    
                    $reihenfolge $endreih;
                                } else {
                                    
                    $reihenfolge 'DESC';
                                }
                            
                    /*
                                Kriterien für SQL-Abfrage ersetzen - Ende
                            */

                            
                    $sql "SELECT
                                        kunden_id,
                                        concat(name, ', ', vorname) AS Kunde,
                                        strasse,
                                        plz,
                                        ort
                                    FROM
                                        kunden
                                    ORDER BY
                                        "
                    .$sortieren."
                                        "
                    .$reihenfolge."
                                    LIMIT
                                        "
                    .$anfang.",
                                        "
                    .$zeilenproseite.";";

                            
                    $result mysql_query($sql) OR die("Fehler: Es wurden keine Auswahlkriterien &uuml;bergeben");

                    ?>

                            <table border="0">
                                <thead>
                                    <tr>
                                        <th>Kunden-Nr.</th>
                                        <th>Kunde</th>
                                        <th>Stra&szlig;e</th>
                                        <th>PLZ</th>
                                        <th>Ort</th>
                                    </tr>
                                </thead>
                                <tbody>

                    <?php

                            
                    while($row mysql_fetch_assoc($result)) {
                                echo 
                    "        <tr>\n";
                                echo 
                    "            <td>".$row['kunden_id']."</td>\n";
                                echo 
                    "            <td>".utf8_encode($row['Kunde'])."</td>\n";
                                echo 
                    "            <td>".utf8_encode($row['strasse'])."</td>\n";
                                echo 
                    "            <td>".$row['plz']."</td>\n";
                                echo 
                    "            <td>".utf8_encode($row['ort'])."</td>\n";
                                echo 
                    "        </tr>\n";
                            }

                    ?>

                                </tbody>
                            </table>

                            <hr />

                    <?php
                            
                    /*
                                Links zum Blättern erzeugen - Start
                            */
                            
                    if($seiten 1) {
                                echo 
                    "<p>\n";
                                for(
                    $i 1$i <= $seiten$i++) {
                                    if(
                    $i == $start) {
                                        echo 
                    " ".$i." \n";
                                    } else {
                                        echo 
                    "<a href=\"".$_SERVER['PHP_SELF']."?sortieren=".$_GET['sortieren']."&amp;reihenfolge=".$_GET['reihenfolge']."&amp;seite=".$i."\">"$i ."</a>\n";
                                    }
                                }
                                echo 
                    "</p>\n";
                            }
                            
                    /*
                                Links zum Blättern erzeugen - Ende
                            */
                        
                    }

                        
                    /*
                            Footer on
                        */
                        
                    echo "</div>\n";
                        include 
                    'tpl/footer.php';
                        
                    /*
                            Footer off
                        */

                    ?>

                    Kommentar

                    Lädt...
                    X