Avatar billede fatal85 Nybegynder
01. juli 2010 - 22:05 Der er 13 kommentarer og
1 løsning

Sortere mysql tabel

Har brug for en måde sortere mysql data i en tabel, på flere forskellige måder. Har selvfølgelig kigget på order by i select kommandoen, men problemet er at jeg gerne vil have brugeren til selv at bestemme hvilken parameter der skal sorteres efter. Altså sådan at brugeren kan trykke på navnet af kolonnen øverst i tabellen, og hvor der derefter vil blive sorteret efter denne kolonne. Skal jeg lave et script for hver af parameterene hvor de er ORDERED BY forskelligt, eller kan det ordnes på en smartere måde?

Derudover kunne det også være smart at kunne sortere efter hvad der står inde i en celle. Altså hvis der en kolonne der hedder "sted", og der i en række står "Tyskland" i cellen, så lade det være muligt at trykke på "Tyskland", og kun lade rækker der har "tyskland" som sted der bliver vist. Vil dette være muligt?

Som sagt så har jeg overvejet at lave et script for hver at parameterene der skal sorteres efter, men umiddelbart virker det ret omstændigt, og jeg leder derfor en smartere måde det kan gøres på.
Har svært at vurdere sværheden af disse spørgsmål, men har sat den til 30 point til hver del.
Avatar billede majbom Novice
01. juli 2010 - 22:27 #1
<a href="din_side.php?order=name">Sorter efter navn</a>


og på siden der viser data:

$res = mysql_query("SELECT * FROM din_tabel ORDER BY ".$_GET['order']) or die(mysql_error())


(husk at vaske din $_GET['order'] :) )
Avatar billede fatal85 Nybegynder
01. juli 2010 - 22:55 #2
Det havde jeg slet ikke tænkt på. Takker.

Har du en ide til hvordan man vil kunne lave anden del?
Avatar billede fatal85 Nybegynder
01. juli 2010 - 22:58 #3
hvad betyder det at vaske $_GET['order']?
Avatar billede ggxdg Nybegynder
01. juli 2010 - 23:04 #4
Jeg er heller ikke helt sikker på hvad det betyder, men jeg kunne forestille mig at det betyder at man skal undgå "injection", hvor folk smider tegn i din $_GET variabel, for så at hive mere data ud af din database...
Avatar billede majbom Novice
01. juli 2010 - 23:09 #5
ja, at vaske dine inputs er at rense dem for uønskede tegn, jeg vil anbefale dig at bruge mysqli og prepared statements når du arbejder med brugerinput mod din db.

du kunne lave "tyskland" til et link som variablen "location" (som indeholder "tyskland") med som parameter (ligesom mit forrige eksempel med "order" variablen. på visningssiden skal du så have noget a la:

...SELECT * FROM din_tabel WHERE sted='".$_GET['sted']."' ORDER BY ".$_GET['order']) or die...
Avatar billede repox Seniormester
01. juli 2010 - 23:18 #6
#3
At vaske data betyder at sikre dig at dit brugerinput ikke er skadeligt - som #4 nævner; at undgå SQL injection (google det).

Det nemmeste er at lave en:
$order = mysql_real_escape_string($_GET["order"]);
$res = mysql_query("SELECT * FROM din_tabel ORDER BY ".$order);


Anden del af dit spørgsmål er lidt mere komplekst - men essensen er den samme; du skal bare lave links på det du gerne vil lave om til specifikke søgninger. f.eks:
<a href="side.php?field=city&spec=Tyskland">Tyskland</a>


Og som før:
$res = mysql_query("SELECT * FROM din_tabel WHERE ".$field." = '".$spec."');
Avatar billede fatal85 Nybegynder
02. juli 2010 - 17:48 #7
Men kan jeg ikke kun lave en enkelt select, eller hvordan skal det ordnes? Undskyld hvis det giver sig selv, men er virkelig nybegynder til php.
Avatar billede majbom Novice
02. juli 2010 - 18:50 #8
ja du kan nøjes med en "select", du skal jo bare bruge variabler de steder, hvor brugere skal have mulighed for at have indflydelse på resultatet... som vi har vist med både "order" og "sted" :)
Avatar billede fatal85 Nybegynder
02. juli 2010 - 20:16 #9
aaah, tror jeg er ved at forstå det nu. Men vil jeg så ikke være nød til at have en vis komplet liste link, der "tømmer" sted f.eks.?

Splazz vil du oprette et svar? Giver dig pointene for begge spørgsmålene da du egentlig var først. Håber det er ok, med jer andre, specielt repox.
Avatar billede fatal85 Nybegynder
02. juli 2010 - 20:22 #10
Lige et hurtigt spørgsmål til. Hvis $_get(sted) er blevet defineret som noget, og "order" er urørt, og man derefter udelukkende definere "order" som noget, vil "sted" så stadig indeholde det oprindelige man lagde ind i den?
Avatar billede majbom Novice
02. juli 2010 - 21:06 #11
du kan jo gøre sådan her:

if(isset($_GET['order'])){
  $order = $_GET['order'];
}else{
  $order = "DESC";
}


så hvis order ikke er sat, bliver den sat til "DESC"...

du kan også gemme den i en session, så du har den sø længe brugeren er aktiv, og den derved er ens fra søgning til søgning

http://dk.php.net/manual/en/features.sessions.php
Avatar billede fatal85 Nybegynder
06. juli 2010 - 20:12 #12
Splazz skal vi lukke den her? :)
Avatar billede majbom Novice
06. juli 2010 - 20:43 #13
det kan vi godt :)
Avatar billede majbom Novice
06. juli 2010 - 22:06 #14
tfp! :)
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