Avatar billede michaelbn Juniormester
22. december 2005 - 16:44 Der er 9 kommentarer og
1 løsning

Sortere data med en form

Jeg har en adresseliste, hvor det skal være muligt at ændre den måde, adresserne sorteres på. Jeg har brugt følgende kode, og som standard sorteres efter medlemsnr. Det virker fint. Men når man ændrer det - f.eks. til navn - sker der ingenting.


if($order == "") {
$order = "medlemsnr";
}
echo "<CENTER><h1> Oversigt over adresser </h1></CENTER>";
?>

<center><form action="<? echo $php_self ?>">
<select name="order">
    <option value="navn">Sorter efter navn</option>
    <option value="postnr">Sorter efter postnummer</option>
    <option value="medlemsnr" selected>Sorter efter medlemsnummer</option></select>
    <input type="submit" class="button" name="Sorter" value="Sorter">
</form></center>

<?
$resultat = mysql_query(" SELECT * " . " FROM adresser " . "ORDER BY $order");
Avatar billede nizo Nybegynder
22. december 2005 - 17:09 #1
Prøv at definér order! Den er ikke defineret og derfor vil den altid sige den er tom!

Sæt en
$order = $_GET['order'];

øverst..
Avatar billede nizo Nybegynder
22. december 2005 - 17:11 #2
En anden god ting ville være at fortælle SQL stringen om det er DESC eller ASC den skal sortere efter.
Avatar billede michaelbn Juniormester
22. december 2005 - 17:20 #3
Order er defineret til at være medlemsnr. ($order = "medlemsnr";). Meningen er, at som standard sorteres efter medlemsnr., men der skal så kunne vælges andre måder også.
Avatar billede michaelbn Juniormester
22. december 2005 - 17:27 #4
Men nu har jeg i stedet ændret det til:

$order="";
if (isset($_GET['order'])) {
  $order=" ORDER BY {$_GET['order']}";
}
$query = " SELECT * FROM adresser $order";

og nu virker det! Så vil jeg bare gerne finde ud af, hvordan jeg sætter det, der skal sorteres efter som standard, når siden åbnes, og den besøgende ikke har valgt en anden sorteringsform.
Avatar billede nizo Nybegynder
22. december 2005 - 17:28 #5
Derfor skal den da stadig defineres som $_GET['order'] hvis den er tom?! En variabel definerer ikke sig selv, prøv det jeg siger og vend tilbage hvis det ikke virker!

Du siger den ikke sorterer naar du vælger en anden ting med formen, det er klart naar du spørg om den er tom og hvis den er tom skal den defineres! En variabel definerer ikke sig selv, saa derfor skal du sætte $order = $_GET['order']; øverst hvis du vil have det til at virke!
Avatar billede nizo Nybegynder
22. december 2005 - 17:30 #6
Jeg var lige lidt for langsom der, hvad mener du med det? Den vælger da allerede en som standard.
Avatar billede nizo Nybegynder
22. december 2005 - 17:33 #7
Prøv


$order=(!$_GET['order']) ? "" : $_GET['order'];
$query = "SELECT * FROM adresser ORDER BY {$order} ASC";

for at gøre det lidt nemmere..
Avatar billede polle007 Nybegynder
22. december 2005 - 17:37 #8
Jeg ville bygge lidt sikkerhed ind, så man ikke kan liste noget lumsk ind i din sql

$allowed = array("medlemsnr", "navn", "postnr");
$order = isset($_GET['order']) ? $_GET['order'] : $allowed[0];

if(array_search($order, $allowed) === false){
    //echo "forsøg på hacking";
    exit();
}
Avatar billede michaelbn Juniormester
22. december 2005 - 17:43 #9
Jeg har fået det til at virke med:

$order=" ORDER BY medlemsnr";
if (isset($_GET['order'])) {
  $order=" ORDER BY {$_GET['order']}";
}

Når siden åbnes, sorteres der som standard efter medlemsnr., og når man vælger navn eller postnr., sorteres der efter det.
Avatar billede nizo Nybegynder
22. december 2005 - 17:46 #10
ok..
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester