Olen tekemässä nettisivua jossa on lista elokuvista ja ideana olisi että siinä voisi laittaa suodattimia esim. julkaisuvuosi ja järjestää aakkosjärjestykseen ja arvion mukaan. Tässä on tekemäni php koodi joka hakee kaikki tiedot tietokannasta.
$con=mysqli_connect("localhost","root","","icoinfo"); // Check connection if (mysqli_connect_errno()) { echo "Failed to connect to MySQL: " . mysqli_connect_error(); } $order = $_GET['order']; $result; if($order == 'nameAsc'){ $result = mysqli_query($con,"SELECT * FROM icos ORDER BY ASC"); } else if($order == 'nameDesc') { $result = mysqli_query($con,"SELECT * FROM icos ORDER BY DESC"); }else{ $result = mysqli_query($con,"SELECT * FROM icos"); } echo "<table border='1' style = 'width:80%' bgcolor = '#000000' align = 'center'> <tr> <th>Name</th> <th>Good</th> <th>Bad</th> <th>Comments</th> <th>Published</th> <th>End</th> </tr>"; while($row = mysqli_fetch_array($result)) { echo "<tr>"; echo "<td><a href='/$row[0]/'>" . $row[0] . "</a></td>"; echo "<td>" . $row[1] . "</td>"; echo "<td>" . $row[2] . "</td>"; echo "<td>" . $row[3] . "</td>"; echo "<td>" . $row[4] . "</td>"; echo "<td>" . $row[5] . "</td>"; echo "</tr>"; } echo "</table>"; mysqli_close($con);
Nyt siinä on toiminto että kun elokuvan nimeä klikkaa se vie elokuvan sivulle mutta miten saisin lisättyä tuohon sen että kun käyttäjä klikaa vaikka published kohtaa niin kaikki tiedot järjestetään vanhimmasta uusimpaan ja toisella klikkauksella uusimmasta vanhimpaan. Osaan tehdä sen kyllä php:llä mutta en tiedä miten kerron php:lle että nyt pitää olla järjestetty tällätavalla. Siis periaatteessa pitäisi tietää onko klikattu published kohtaa. Jos viitsitte niin toivoisin että laitatte koodin myös koska olen aika aloittelija nettisivuohjelmoinnissa niin en välttämättä muuten ymmärrä.
Itse en tykkää siitä että kenttien nimiä ripotellaan moneen paikkaan koodissa, jos sille ei ole mitään erityistä tarvetta. Samoin tuollainen if elseif elseif rakenne (joita siis tulisi tyylilläsi 13 kertaa jos halutaan voida järjestää 6 saraketta eri suuntiin) vaikuttaa ihan järjettömältä.
Itse tekisin tähän tyyliin (nakuttelin vaan tähän enkä ole testannut)
<? $con=mysqli_connect("localhost","root","","icoinfo"); // Check connection if (mysqli_connect_errno()) { echo "Failed to connect to MySQL: " . mysqli_connect_error(); } $headers = array('Name','Good','Bad','Comments','Published','End'); $fields = array('name','good','bad','comments','published','end'); $orderby = ''; if (isset($_GET['order']) && strlen($_GET['order'])>3) { $direction = substr($_GET['order'],-3) == 'Asc' ? 'Asc' : 'Desc'; $field = substr($_GET['order'], 0, strlen($_GET['order'])-strlen($direction)); if (in_array($field,$fields, true)) { $orderby = " $field $direction"; } } $result = mysqli_query($con,"SELECT ". implode(',',$fields) ." FROM icos$orderby"); echo "<table border='1' style = 'width:80%' bgcolor = '#000000' align = 'center'> <tr>"; foreach ($headers as $header) { echo "<th>$header</th>"; } echo "</tr>"; while($row = mysqli_fetch_array($result)) { echo "<tr>"; echo "<td><a href='/$row[0]/'>" . $row[0] . "</a></td>"; for ($i=1; $i<sizeof($fields); $i++) { echo "<td>" . htmlentities($row[$i]) . "</td>"; } echo "</tr>"; } echo "</table>"; mysqli_close($con);
En juurikaan koodaa PHP:llä, joten koodi ei välttämättä ole kovin esimerkillistä.
Miksi tämä ei toimi
http://localhost/movies/?order="nameAsc"
Se tulostaa vain tietokannan mutta ei järjestä sitä.
Sama desc in kanssa
Lisäys: Nyt sainkin kunton. Kiitos avusta grez
Aihe on jo aika vanha, joten et voi enää vastata siihen.