+ Antworten
Ergebnis 1 bis 8 von 8

Thema: Variabler Sortierparameter in Datenbanksuche

  1. #1
    TAX
    TAX ist offline
    TP-Junior TAX macht alles soweit korrekt
    Registriert seit
    Mar 2004
    Beiträge
    25

    Variabler Sortierparameter in Datenbanksuche

    Ich habe ein Suchscript gefunden, das ich erweitern wollte. Und zwar soll der Benützer auswählen können, wie die gesuchten Daten sortiert werden sollen inkl. Blätterfunktion.

    Wenn ich in der GET-Routine z.B ORDER BY Idno DESC die Sortierung fix lasse, funktioniert es und zwar bei jedem Blättern.

    Die Query sieht dann so aus:
    SELECT * FROM artikel WHERE Titel LIKE'%stem cells%' ORDER BY Idno DESC LIMIT 0, 20

    Wenn ich aber aus dem Formular die ausgewählte Sortierung hole, dann ist
    die erste Darstellung i.O., aber immer wenn er die GET-Routine durchläuft, gibt es den Fehler:

    Im betreffenden Query fehlt komischerweise der Sortierungsparameter:

    SELECT * FROM artikel WHERE Titel LIKE'%stem cells%' ORDER BY LIMIT 20, 20

    Hier das Script, entscheidend ist hier die Routine ab else if ($_GET)

    PHP-Code:
    <form action="suche.php" method="POST" name="suche">
        <label>
        Suchbegriff:
          <input name="searchstring" type="text" size="25" />
                  <label>
            Sortierung Ausw&auml;hlen:
            <select name="sortieren">
              <option value="Idno DESC" selected>Idno absteigend</option>
              <option value="Jahrgang DESC">Jahrgang absteigend</option>
              <option value="BdVol DESC">BdVol absteigend</option>
              <option value="Ablage DESC">Ablage absteigend</option> 
              <option value="Idno ASC">Idno aufsteigend</option>
              <option value="Jahrgang ASC">Jahrgang aufsteigend</option>
              <option value="BdVol ASC">BdVol aufsteigend</option>
              <option value="Ablage ASC">Ablage aufsteigend</option>  
            </select>
          <input type="submit" value="suchen" />

    ....

    <?php   
        
    if (!empty ($_POST['searchstring']))
        { 
          
    $query 'SELECT 
                      COUNT(*) 
                    FROM 
                      artikel 
                    WHERE 
                      Titel LIKE'
    ."'%".$_POST['searchstring']."%'";
          
    $result mysql_query ($query) or die (mysql_error());
          
    $found mysql_fetch_row ($result);
          
    $num $found[0];
          
          
    $query 'SELECT 
                      * 
                    FROM 
                      artikel 
                    WHERE 
                      Titel LIKE'
    ."'%".$_POST['searchstring']."%'".'
                    ORDER BY '
    .$_POST['sortieren'].
                    LIMIT 0, 20'
    ;
          
    $param '?num='.$num.'&string='.urlencode($_POST['searchstring']);
          echo 
    '<br>'.$query.' Query aus POST-Parameter<br>';
        }
        else if (
    $_GET)
        {
          
    // Suchabfrage per GET-Parameter
          
    $query 'SELECT 
                      * 
                    FROM 
                      artikel 
                    WHERE 
                      Titel LIKE'
    ."'%".urldecode($_GET['string'])."%'".
                    ORDER BY'
    .$_GET['sortieren'].
                    LIMIT 
                      '
    .$_GET['limit'].', 20';
          
    // register_globals-Problem !
          
    $num $_GET['num'];
          
    // Defininition der GET-Parameter (Trefferanzahl, Suchwort)
          
    $param '?num='.$_GET['num'].'&string='.$_GET['string'];
          echo 
    '<br>'.$query.' GET Parameter<br>';
        }
        if (
    $num)
        {
          
    $result mysql_query ($query) or die (mysql_error());
          while (
    $row mysql_fetch_assoc($result))
          {
            echo 
    '<br>'.$row['Titel'].'<br />';
          }
          echo 
    '<br>';
          for (
    $i 1$i <= ceil ($num 20); $i++)
          {
            
    // Von-Wert
            
    $from $i 20 19;
            
    // Bis-Wert
            
    ($i 20 <= $num) ? $to $i 20 $to $num;
            
    // Limit-Wert
            
    $limit $i 20 20;
            
    // Ausgabe der Links inkl. GET-Parameter für Limit
            
    echo '<a href="'.$_SERVER['PHP_SELF'].$param;
            echo 
    '&limit='.$limit.'">'.$from.'-'.$to.'</a> ';
          }
        }
      
    ?>
    Also, darf ich das "ORDER BY'.$_GET['sortieren'].'" gar nicht verwenden, oder habe ich einen Syntaxfehler oder sonst was?
    Vielen Dank für jeden Tipp und herzliche Grüsse von TAX



    PS. Natürlich möchte ich später auch die Suche in den Feldern variieren, aber wenn das gelöst ist, wird das dann auch kein Problem sein.

  2. #2
    TP-Special Mod steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User Avatar von steffenk
    Registriert seit
    Feb 2005
    Ort
    Haan / NRW
    Beiträge
    12.869
    Du musst dann natürlich den sortstring als Parameter in den Blätterlink einbauen. Dann ist es nicht mehr POST sondern GET (Du kannst auch $_REQUEST nutzen)

    Grundsätzlich solltest Du niemals POST oder GET-Parameter direkt in SQL einbauen, das läd geradezu zu Manipulation (und Unfug) ein!


    TYPO3 · MySQLDumper · dislabs
    ·
    manche Mühlen mahlen schneller ...
    "Ich habe Rücken"
    Horst Schlämmer


  3. #3
    TP-Specialist theo bringt sich richtig ein Avatar von theo
    Registriert seit
    Apr 2002
    Ort
    743, evergreen terrace
    Beiträge
    2.346
    da sich ja nicht die abgerufenen daten, sondern nur deren angezeigte reihenfolge aendert, wuerde ich auf weitere anfragen an die db voellig verzichten. das spart zeit, schafft sicherheit und ist, wenn man die ergebnisse des ersten abfrageergebnisses gut strukturiert, sicher auch viel praktischer ...
    tipp: array_multisort
    Geändert von theo (30.07.2008 um 13:44 Uhr) Grund: ich habe gelernt ... danke andreas ;)
    /b{2}|[^(bb)]/

    [Workshop] Nested sets

  4. #4
    TP-Specialist phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts Avatar von phpBuddy
    Registriert seit
    Aug 2004
    Ort
    Kaiserslautern
    Beiträge
    4.678
    Off Topic

    Zitat Zitat von theo Beitrag anzeigen
    Hi theo,

    hier auch ein Tipp:
    Wenn man eine PHP Funktion verlinken möchte, kann man das elegant und zeitsparend mit einem BBCode machen. So wird aus [phpfunction]array_multisort[/phpfunction] dann ein array_multisort

  5. #5
    TP-Specialist theo bringt sich richtig ein Avatar von theo
    Registriert seit
    Apr 2002
    Ort
    743, evergreen terrace
    Beiträge
    2.346
    das ist schon beinahe unheimlich, weil ich das grad in deinem thread gesehen hab und mich schon gefragt habe, wie du das niedliche symbol davor bekommen hast. bin ich wohl selbst schuld, wenn ich mal ne weile nicht hier war ...
    /b{2}|[^(bb)]/

    [Workshop] Nested sets

  6. #6
    TP-Specialist phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts Avatar von phpBuddy
    Registriert seit
    Aug 2004
    Ort
    Kaiserslautern
    Beiträge
    4.678
    Zitat Zitat von theo Beitrag anzeigen
    ... wenn ich mal ne weile nicht hier war ...
    28.09.2007

    Jetzt aber wieder


  7. #7
    TAX
    TAX ist offline
    TP-Junior TAX macht alles soweit korrekt
    Registriert seit
    Mar 2004
    Beiträge
    25
    Vielen Dank vorerst einmal für alle Vorschläge.

    Zitat Zitat von steffenk Beitrag anzeigen
    Du musst dann natürlich den sortstring als Parameter in den Blätterlink einbauen. Dann ist es nicht mehr POST sondern GET (Du kannst auch $_REQUEST nutzen)

    Grundsätzlich solltest Du niemals POST oder GET-Parameter direkt in SQL einbauen, das läd geradezu zu Manipulation (und Unfug) ein!
    Da es eine rein private Anwendung ist, die nur auf meinem localhost läuft, kann ich mir letzteres leisten. Ich würde sonst nämlich gegen jene Urheberrechte verstossen.
    Könntest Du mir auf die Sprünge helfen, wie ich das in den sortstring in den Blätterlink einbauen muss? Ich meine, ich sei meinem Ziel näher, als wenn ich das mit dem array..multisort anwende.

    Herzliche Grüsse von TAX

  8. #8
    TP-Specialist phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts Avatar von phpBuddy
    Registriert seit
    Aug 2004
    Ort
    Kaiserslautern
    Beiträge
    4.678
    Hallo TAX,

    schau Dir doch mal diesen Thread an, vielleicht hilft er dir ja weiter.

+ Antworten

Ähnliche Themen

  1. Variabler Hintergrund
    Von Tom im Forum HTML & CSS
    Antworten: 12
    Letzter Beitrag: 16.08.2007, 13:43
  2. mysql - Datenbanksuche optimieren
    Von dieter99 im Forum Traum-Dynamik
    Antworten: 3
    Letzter Beitrag: 20.04.2006, 16:33
  3. MP3's mit variabler Samplingrate abspielen
    Von norater im Forum Flash & Multimedia
    Antworten: 1
    Letzter Beitrag: 22.12.2005, 18:14
  4. Antworten: 3
    Letzter Beitrag: 15.03.2005, 11:26
  5. variabler name für Variable
    Von reetosh im Forum Traum-Dynamik
    Antworten: 1
    Letzter Beitrag: 08.08.2001, 23:26

Stichworte

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51