Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Tietokannasta haku tietyssä järjestyksessä napilla

E1ss [19.10.2017 16:41:24]

#

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ä.

Grez [19.10.2017 17:32:53]

#

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ä.

E1ss [20.10.2017 11:39:19]

#

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

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta