Vraag & Antwoord

Webprogrammeren & scripting

Tabel Sorteren

12 antwoorden
  • Ik heb een probleempje met php. In mijn sqlite database (bijna exact hetzelfde als mysql) heb ik wat waardes. Deze print ik in een tabel. Nou wil ik deze tabel sorteren. Ik heb waardes als id, titel en jaar Ze sorteren zichzelf als ik aangeef: $sql= "SELECT * FROM film ORDER BY naam ASC;"; Dat is mooi en werk goed, maar ik wil dat ik dit op commando kan doen. Dus als ik bij de tabelheader bijvoorbeeld op jaar titel klik, dat hij op titel sorteert en bij speelduur op speelduur enzovoorts. Kan iemand mij helpen? Alvast bedankt! Groeten, Bas van Vliet
  • Je kunt de kolom ("naam") in je sql statement vervangen door een variabele. Aan de koppen in de tabel een link toevoegen, met daarin weer die variabele (wel checken!).
  • Ik ben er niet helemaal uitgekomen. Misschien is het handiger als ik de code even opgeef. Ik hoop dat je even de tijd wilt nemen om het te bestuderen. Alvast bedankt :D <?php // variabelen initialiseren //============================= $db= sqlite_open("media.sdb"); $sql= "SELECT * FROM film ORDER BY $naam=naam ASC;"; $result = sqlite_query($db, $sql); // ============================ include("inc_logged_in.php"); ?> <html> <head> <title>Filmoverzicht</title> </head> <body> <!-- eerst de kolomkoppen voor de tabel in plain HTML schrijven --> <table border="1" width="80%" align="center"> <tr> <td colspan="8"><h2 align="center">Films</h2></td> </tr> <tr> <th>ID</th> <th>Titel</th> <th>Speelduur</th> <th>IMDB</th> <th>Categorie</th> <th>Type</th> </tr> <!-- Vanaf hier de PHP while()-lus. Elke lusdoorgang schrijft een tabelrij naar het scherm --> <?php while ($rij = sqlite_fetch_array($result)){ echo ("<tr><td>". $rij['id'] . " </td> " . "<td>" . $rij['naam'] . " <i> ( " . $rij['jaar'] . " )</i></td> " . "<td align=center>" . $rij['tijd'] . " <i>min</i></td> " . "<td align=center>" . $rij['waarde'] . " </td> " . "<td align=center>" . $rij['categorie'] . " </td> ". "<td align=center>" . $rij['type'] . " </td>". "</tr>\n "); } ?> <!-- Einde van de lus, tabel afsluiten --> </table> <hr> <!-- Eventueel rest van de pagina --> <center><a href="film_database.php">Terug naar de film index</a></center> </body> </html>
  • Ik bedoelde meer zoiets: $kolom = $_GET['sortering'] $sql = "SELECT * FROM film ORDER BY $kolom ASC" En dan die $kolom uit de url vissen, bijvoorbeeld: <a href="script.php?sortering=naam ">naam</a> Let op: dit moet nog beveiligd worden (sql injectie)!
  • Voor beveiliging kan je bv zoiets doen: [code:1:104a828805] switch(strtolower($_GET['sortby'])) { case 'titel': $sql = "SELECT * FROM film ORDER BY titel ASC"; break; case 'id': $sql = "SELECT * FROM film ORDER BY id ASC"; break; default: $sql = "SELECT * FROM film ORDER BY titel ASC"; break; }[/code:1:104a828805] Het is maar een voorbeeld, maar op deze manier is het veilger dan de code van gerben (let wel dat hij je ook waarschuwd hiervoor :wink: ). En uiteraard register_globals UIT
  • [quote:97d7c1dfd9="cyberde"]Voor beveiliging kan je bv zoiets doen: ...[/quote:97d7c1dfd9] Of je accepteert alleen integers (dat maakt de controle wat simpeler), iets als onderstaande werkt namelijk ook: SELECT a, b, c FROM d ORDER BY 2
  • Het wil maar niet vlotten :roll: :( Ik krijg de volgende melding: Notice: Undefined variable: kolom in c:\wamp\www\Media2\film_overzicht.php on line 5 Notice: Undefined index: sortering in c:\wamp\www\Media2\film_overzicht.php on line 6 Warning: sqlite_query() [function.sqlite-query]: no such column: ASC in c:\wamp\www\Media2\film_overzicht.php on line 7 Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at c:\wamp\www\Media2\film_overzicht.php:5) in c:\wamp\www\Media2\inc_logged_in.php on line 1 Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at c:\wamp\www\Media2\film_overzicht.php:5) in c:\wamp\www\Media2\inc_logged_in.php on line 1 Warning: sqlite_fetch_array() expects parameter 1 to be resource, boolean given in c:\wamp\www\Media2\film_overzicht.php on line 33 met deze code: <?php // variabelen initialiseren //============================= $db= sqlite_open("media.sdb"); $sql = "SELECT * FROM film ORDER BY $kolom ASC"; $kolom= $_GET['sortering']; $result = sqlite_query($db, $sql); // ============================ include("inc_logged_in.php"); ?> <html> <head> <title>Filmoverzicht</title> </head> <body> <!-- eerst de kolomkoppen voor de tabel in plain HTML schrijven --> <table border="1" width="80%" align="center"> <tr> <td colspan="8"><h2 align="center">Films</h2></td> </tr> <tr> <th><a href="film_overzicht.php?sortering=id">ID</a></th> <th><a href="film_overzicht.php?sortering=naam">Titel</a></th> <th><a href="film_overzicht.php?sortering=tijd">Speelduur</a></th> <th>IMDB</th> <th>Categorie</th> <th>Type</th> </tr> <!-- Vanaf hier de PHP while()-lus. Elke lusdoorgang schrijft een tabelrij naar het scherm --> <?php while ($rij = sqlite_fetch_array($result)){ echo ("<tr><td>". $rij['id'] . " </td> " . "<td>" . $rij['naam'] . " <i> ( " . $rij['jaar'] . " )</i></td> " . "<td align=center>" . $rij['tijd'] . " <i>min</i></td> " . "<td align=center>" . $rij['waarde'] . " </td> " . "<td align=center>" . $rij['categorie'] . " </td> ". "<td align=center>" . $rij['type'] . " </td>". "</tr>\n "); } ?> <!-- Einde van de lus, tabel afsluiten --> </table> <hr> <!-- Eventueel rest van de pagina --> <center><a href="film_database.php">Terug naar de film index</a></center> </body> </html>
  • Als je deze 2 regels nu eens omdraait. [code:1:09280c5dea] $sql = "SELECT * FROM film ORDER BY $kolom ASC"; $kolom= $_GET['sortering']; [/code:1:09280c5dea] Daarnaast zal je ook een defaultwaarde moeten toekennen aan $kolom voor het geval er geen sortering met de querystring meekomt (of wanneer een niet geldige waarde wordt meegegeven).
  • $kolom = $kolom or "naam" of: $kolom ||= "naam"
  • <?php // variabelen initialiseren //============================= $db= sqlite_open("media.sdb"); $sql = "SELECT * FROM film ORDER BY $kolom ASC"; $kolom = $_GET['sortering']; $kolom = $kolom or "naam"; $result = sqlite_query($db, $sql); // ============================ include("inc_logged_in.php"); ?> Dit levert ook weer allerhande problemen op :cry: Kunnen jullie nog een poging wagen? Ik dank alvast voor de (al gegeven) inzet!
  • Variabelen definiëren VOOR je ze gaat gebruiken. Nogmaals: hier is sql injectie mogelijk! <?php // variabelen initialiseren //============================= $db= sqlite_open("media.sdb"); [b:1917b1c5d8]$kolom = $_GET['sortering'] or "naam";[/b:1917b1c5d8] $sql = "SELECT * FROM film ORDER BY $kolom ASC"; $result = sqlite_query($db, $sql); // ============================ include("inc_logged_in.php"); ?>
  • Geweldig!!! Hij werkt!!! Bedankt voor jullie hulp en moeite!! :D

Beantwoord deze vraag

Weet jij het antwoord op deze vraag? Registreer of meld je aan met je account

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.