silfverMedlem sedan apr. 20039 709 inlägg
Har pysslat ihop lite kod här till min filmlista. Men jag vill att man själv ska kunna välja hur man ska sortera filmerna. I den röda texten så ser ni hur jag vill att man ska göra. Så i stället för att skapa tre olika filer för att sortera listade jag ut att det måste gå att lösa på ett smidigare sätt. Genom att bara ändra lite i koden här. Eller hur?
<table cellspacing="0" cellpadding="0" style="border: none; width: 100%;">
<tr>
<td><strong>[red]<a href="?sort_by=title">Filmtitel</a></strong>[/red]</td>
<td><strong>[red]<a href="?sort_by=year">År</a></strong>[/red]</td>
<td><strong>[red]<a href="?sort_by=vote">Betyg</a></strong>[/red]</td>
</tr><?php
require "connect.php";
$S_FILMER = mysql_query("SELECT * FROM filmer ORDER BY title ASC") or die(mysql_error());
while($row = mysql_fetch_array($S_FILMER)) {
print '
<tr>
<td><a href="http://www.imdb.com/title/'.$row['imdb'].'/">'.$row['title'].'</a></td>
<td>'.$row['year'].'</td>
<td>'.$row['vote'].'/10</td>
</tr>';
}
?>
</table>
Hoppas någon vet vad jag dillar om och har lust att hjälpa mig. :)
Och just det. Var lite osäker på om den platsade bättre i SQL-forumet... Aja, det får en moderator avgöra. :)
OlleBoopMedlem sedan feb. 20001 432 inlägg
$order_by = $_GET['sort_by'];
$S_FILMER = mysql_query("SELECT * FROM filmer ORDER BY $order_by ASC") or die(mysql_error());
Border väl funka?
silfverMedlem sedan apr. 20039 709 inlägg
OlleBoop skrev:
$order_by = $_GET['sort_by'];
$S_FILMER = mysql_query("SELECT * FROM filmer ORDER BY $order_by ASC") or die(mysql_error());
Border väl funka?
Det funkade bra. Men nu kom jag på en sak till. Som jag egentligen borde fattat tidigare.
När man sorterar efter till exempel årtal, då storterar man ju i stigande ordning (ORDER BY year ASC). Kan man inte göra så att om man klickar på samma länk en andra gång så sorterar man efter fallande? Förstår du hur jag tänker? :)
OlleBoopMedlem sedan feb. 20001 432 inlägg
Jo, det är bara att haka på ett argument till på url:n.
<a href="?sort_by=title&valfrittnamnpåvariabeln=DESC">
$order_by = $_GET['sort_by'] . " " . $_GET['valfrittnamnpåvariabeln'];
$S_FILMER = mysql_query("SELECT * FROM filmer ORDER BY $order_by") or die(mysql_error());
Sen får du skiva ut ASC el DESC i länken beroende på vad som redan står i url:n, ex är valfrittnamnpåvariabeln=DESC så sätter du ASC i länken.
Sen bör du kolla vad som skickas med i url:n, inte bara stoppa in den i SQL-satsen direkt.
RocketMedlem sedan feb. 2000353 inlägg
Så här kan du göra.
(Otestad kod och helt utan felhantering)
<?php
$orderByIndex = $_GET['sort_by'];
$orderBy = array(
"title ASC",
"title DESC",
"year ASC",
"year DESC",
"vote ASC",
"vote DESC"
);
?>
<table cellspacing="0" cellpadding="0" style="border: none; width: 100%;">
<tr>
<td><strong><a href="?sort_by=<?= ($sort_by == 1) ? 0 : 1 ?>">Filmtitel</a></strong></td>
<td><strong><a href="?sort_by=<?= ($sort_by == 3) ? 2 : 3 ?>">År</a></strong></td>
<td><strong><a href="?sort_by=<?= ($sort_by == 5) ? 4 : 5 ?>">Betyg</a></strong></td>
</tr>
<?php
require "connect.php";
$S_FILMER = mysql_query("SELECT * FROM filmer ORDER BY $orderBy[$orderByIndex]") or die(mysql_error());
while ($row = mysql_fetch_array($S_FILMER)) {
print '
<tr>
<td><a href="http://www.imdb.com/title/'.$row['imdb'].'/">'.$row['title'].'</a></td>
<td>'.$row['year'].'</td>
<td>'.$row['vote'].'/10</td>
</tr>';
}
?>
</table>
OlleBoopMedlem sedan feb. 20001 432 inlägg
silfverMedlem sedan apr. 20039 709 inlägg
Rocket, jag får ett felmeddelande på din kod:
You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
RocketMedlem sedan feb. 2000353 inlägg
Jag sa ju att koden var otestad ;)
Du får ändra den första delen av koden till det här:
$orderBy = array(
"title ASC",
"title DESC",
"year ASC",
"year DESC",
"vote ASC",
"vote DESC"
);
$orderByIndex = isset($_GET['sort_by']) ? $_GET['sort_by'] : 0;
if ($orderByIndex<0 || $orderByIndex>(count($orderBy)-1)) {
$orderByIndex = 0;
}
silfverMedlem sedan apr. 20039 709 inlägg
Läckert! Nu funkar det prima.
silfverMedlem sedan apr. 20039 709 inlägg
Kom på en sak till.
Om man till exempel skriver ?sort_by=hej så får man ett väldigt tråkigt felmeddelande. Kan man på något sätt skriva så att om någon pillar i taggarna där uppe så går den till default-värdet? Hoppas det inte innebär en massa krångel. :) :p
RocketMedlem sedan feb. 2000353 inlägg
Jo då, det går också att fixa utan en massa krångel. Ändra if-satsen till:
if (!is_numeric($orderByIndex) || $orderByIndex<0 || $orderByIndex>(count($orderBy)-1)) {
$orderByIndex = 0;
}
silfverMedlem sedan apr. 20039 709 inlägg
Underbart! :birp
*fira med att köpa kebab* :P