learnMedlem sedan jan. 20051 143 inlägg
Jag har en tabell fylld med data hämtad från en mysql-databas. Nu vill jag att besökaren själv skall kunna välja i vilken ordning posterna skall sorteras efter genom att klicka på kolumnens rubrik.
Så här ser det ut nu:
<?
// Hämta personer
?>
<table>
<tr>
<td>Förnamn</td><td>Efternamn</td><td>Ålder</td>
</tr>
<?
$sql = mysql_query("
SELECT fNamn, eNamn, alder
FROM personer
ORDER BY fName
");
while ($r = mysql_fetch_array($sql)) {
?>
<tr>
<td><?=$r['fNamn']?></td><td><?=$r['eNamn']?></td><td><?=$r['alder']?></td>
</tr>
<?
}
?>
</table>
Rubrikerna är alltså i detta fall "Förnamn", "Efternamn" och "Ålder". Klickar besökaren på "Efternamn" så skall alltså posterna sorteras efter personens efternamn A-Ö, klickar han/hon sedan på samma rubrik igen så sorteras de enligt Ö-A.
"Aktuell" kolumn skall markeras med en bild framför rubriken. Vid A-Ö skall "bild.gif" visas och Ö-A "bild2.gif".
Jag kan inte komma på hur jag skall göra och skulle därför vara oerhört tacksam ifall ngn av er kan hjälpa mig! Tack! :)
learnMedlem sedan jan. 20051 143 inlägg
Någon som ngt förslag på hur jag kan göra?
The_HulkMedlem sedan juni 20031 937 inlägg
Här är en början.
<?
// Hämta personer
$order = isset($_GET['order']) ? $_GET['order'] : "fNamn";
$orderad = isset($_GET['order']) ? $_GET['orderad'] : "asc";
if($order != "fNamn" || $order != "eNamn" || "$order != "alder")
{
$order = "fNamn";
}
if($orderad != "asc" || $orderad != "desc")
{
$orderad = "asc";
}
?>
<table>
<tr>
<td><a href="?order=fNamn&orderad=<?=($orderad=="asc"?"desc":"asc"?>">Förnamn</a></td><td><a href"?order=eNamn&orderad=<?=($orderad=="asc"?"desc":"asc"?>">Efternamn</a></td><td><a href"?order=alder&orderad=<?=($orderad=="asc"?"desc":"asc"?>">Ålder</a></td>
</tr>
<?
$sql = mysql_query("
SELECT fNamn, eNamn, alder
FROM personer
ORDER BY $order $orderad
");
while ($r = mysql_fetch_array($sql)) {
?>
<tr>
<td><?=$r['fNamn']?></td><td><?=$r['eNamn']?></td><td><?=$r['alder']?></td>
</tr>
<?
}
?>
</table>
SjodahlMedlem sedan maj 20033 137 inlägg
Vad gör denna raden igentligen?
tror aldrig jag har fått in det där med ett "?" och ":"
$sort = isset($_GET['sort']) ? $_GET['sort'] : "fNamn";
The_HulkMedlem sedan juni 20031 937 inlägg
Vet faktiskt inte vad det kallas.
om det som står mellan = och ? är sant tilldelas varaiblen $sort det som står mellan ? och : är det falskt får variablen $sort värdet mellan : och ;
variablen $sort får värdet av $_GET['sort'] om isset($_GET['sort']) är sant och "fNamn" om det är falskt.
$variabel = (boolskt värde) ? (värder om det är sant) : (värde om det är falskt);
Lite kompaktare sätt att skriva if-satsen
if(isset($_GET['sort']))
{
$sort = $_GET['sort'];
}
else
{
$sort = "fNamn";
}
hoppas att någon av förklaringarna kan hjälpa.
SjodahlMedlem sedan maj 20033 137 inlägg
aha då är jag med... tack!
SjodahlMedlem sedan maj 20033 137 inlägg
aha då är jag med... tack!
learnMedlem sedan jan. 20051 143 inlägg
Tack för ditt tips The_Hulk. Det var dock ett antal fel i din kod, slarvfel förmodar jag. Här kommer en korrigerad version av din kod:
<?
$order = isset($_GET['order']) ? $_GET['order'] : "fNamn";
$orderad = isset($_GET['order']) ? $_GET['orderad'] : "asc";
if ($order != "fName" && $order != "lName" && $order != "born")
{
$order = "fName";
}
if ($orderad != "asc" && $orderad != "desc")
{
$orderad = "asc";
}
?>
<table>
<tr>
<td><a href="?order=fName&orderad=<?=$orderad=="asc"?"desc":"asc"?>">Förnamn</a></td>
<td><a href="?order=lName&orderad=<?=$orderad=="asc"?"desc":"asc"?>">Efternamn</a></td>
<td><a href="?order=born&orderad=<?=$orderad=="asc"?"desc":"asc"?>">Ålder</a></td>
</tr>
<?
$sql = mysql_query("
SELECT fName, lName, born
FROM person
ORDER BY $order $orderad
") or die(mysql_error());
while ($r = mysql_fetch_array($sql)) {
?>
<tr>
<td><?=$r['fName']?></td><td><?=$r['lName']?></td><td><?=$r['born']?></td>
</tr>
<?
}
?>
</table>
Passade även på att ändra till den faktiska databas-queryn. Detta fungerar ju bra, förutom att den ändrar desc/asc-ordningen när jag klickar på en ny kolumn-rubrik...det ska den ju inte göra, endast om jag klickar på samma rubrik två gånger.
Dessutom:
learn skrev:
"Aktuell" kolumn skall markeras med en bild framför rubriken. Vid A-Ö skall "bild.gif" visas och Ö-A "bild2.gif".
The_HulkMedlem sedan juni 20031 937 inlägg
Tänkte att om du fick hjälp en bit kanske du kunde göra resten själv.
Felen berodde nog på slarv, testade inte koden utan skrev det bara rakt ner i WF.
har inte testat detta heller men hoppas att det ska fungera.
<?
sesstion_start();
$order = isset($_GET['order']) ? $_GET['order'] : "fNamn";
$orderad = isset($_GET['order']) ? $_GET['orderad'] : "asc";
if ($order != "fName" && $order != "lName" && $order != "born")
{
$order = "fName";
}
if ($orderad != "asc" && $orderad != "desc")
{
$orderad = "asc";
}
$fNamnBild = "";
$eNamnBild = "";
$alderBild = "";
$fNamnOrderAD = "";
$eNamnOrderAD = "";
$alderOrderAD = "";
if($_SESSION['order'] == "fNamn" && $order == "fNamn")
{
$fNamnOrderAD = ($orderad == "asc" ? "desc" : "asc") : "asc";
$fNamnBild = $fNamnOrderAD == "asc" ? "bild.gif" : "bild2.gif";
}
if($_SESSION['order'] == "fNamn" && $order == "eNamn")
{
$eNamnOrderAD = ($orderad == "asc" ? "desc" : "asc") : "asc";
$eNamnBild = $eNamnOrderAD == "asc" ? "bild.gif" : "bild2.gif";
}
if($_SESSION['order'] == "fNamn" && $order == "alder")
{
$alderOrderAD = ($orderad == "asc" ? "desc" : "asc") : "asc";
$alderBild = $alderOrderAD == "asc" ? "bild.gif" : "bild2.gif";
}
?>
<table>
<tr>
<td><a href="?order=fName&orderad=<?=$fNamnOrderAD?>"><?=$fNamnBild!=""?"<img src='" . $fNamnBild . "' />":""?>Förnamn</a></td>
<td><a href="?order=lName&orderad=<?=$eNamnOrderAD?>"><?=$eNamnBild!=""?"<img src='" . $eNamnNild . "' />":""?>Efternamn</a></td>
<td><a href="?order=born&orderad=<?=$alderOrderAD?>"><?=$alderBild!=""?"<img src='" . $alderBild . "' />":""?>Ålder</a></td>
</tr>
<?
$_SESSION['order'] = $order;
$sql = mysql_query("
SELECT fName, lName, born
FROM person
ORDER BY $order $orderad
") or die(mysql_error());
while ($r = mysql_fetch_array($sql)) {
?>
<tr>
<td><?=$r['fName']?></td><td><?=$r['lName']?></td><td><?=$r['born']?></td>
</tr>
<?
}
?>
</table>