Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Tietokannasta haku (PHP)

Bishop [25.06.2008 14:47:15]

#

Elikäs tarkoituksena on tehdä puhelinvertailu. Jossa voi hakea eri merkkejä/malleja ja muilla tiedoilla (todella alkuvaiheissa vielä). Ja nytten tuli ongelma saan tehtyä haun ainoastaan yhdellä merkillä esim. Nokia mutta kun laitan listaan kaks merkkiä esim. Nokia HTC niin se tulostaa vaan ton Nokian. Joten miten saan sen ottaan muutkin merkit mukaan laskuihin, ettei vaan yhtä?


(haku.php)

		<form action="tulostus.php" method="POST">
		<input name="merkki[]" type="checkbox" id="lg" value="lg" >
		<label for="lg">LG</label>
		<input name="merkki[]" type="checkbox" id="motorola" value="motorola" >
		<label for="motorola">Motorola</label>
		<input name="merkki[]" type="checkbox" id="nokia" value="nokia" >
		<label for="nokia">Nokia</label>
		<input name="merkki[]" type="checkbox" id="htc" value="htc" >
		<label for="htc">Qtek/HTC</label>
		<input name="merkki[]" type="checkbox" id="samsung" value="samsung" >
		<label for="samsung">Samsung</label>
		<input name="merkki[]" type="checkbox" id="sony" value="sony" >
		<label for="sony">Sony Ericsson</label>
		<input name="merkki[]" type="checkbox" id="siemens" value="siemens" >
		<label for="siemens">BenQ-Siemens</label></td>
		<input type="submit" value="Hae!" />
		</form>

(tulostus.php)

		<?php

		$host="localhost";
		$user="testi";
		$password="testi1";

//muodostetaan yhteys tietokantapalvelimeen
$yhteys = mysql_connect() or die("Yhdistäminen ei onnistunut!");

//valitaan tietokanta "puhelimet"
mysql_select_db("puhelimet", $yhteys) or die("Tietokantaa ei löytynyt!");


	$merkki = $_POST["merkki"];

   $Merkki0 = $merkki[0];
   $Merkki1 = $merkki[1];



echo "<html><body>";



//haetaan kaikki tavarat
$kysely = ("SELECT * FROM puhelimet WHERE merkki = '".$Merkki0."'");
//suoritetaan kysely
$haku = mysql_query($kysely, $yhteys) or die("Virhe kyselyssä!");

echo "<table border>";
echo "<tr><td><b>merkki</b></td> <td><b>malli</b></td> <td><b>mitat</b></td>
<td><b>muoto</b></td> <td><b>paino</b></td></tr>";
//käydään tavarat läpi
for ($i = 0; $i < mysql_num_rows($haku); $i++) {
   //haetaan nimi, hinta ja määrä muuttujiin
   $merkki = mysql_result($haku, $i, "merkki");
   $malli = mysql_result($haku, $i, "malli");
   $mitat = mysql_result($haku, $i, "mitat");
   $muoto = mysql_result($haku, $i, "muoto");
   $paino = mysql_result($haku, $i, "paino");
   //tulostetaan taulukon rivi
   echo "<tr><td>$merkki</td><td>$malli </td><td>$mitat</td> <td>$muoto</td> <td>$paino g</td></tr>";
}
echo "</table>";

echo "</body></html>";




//suoritetaan kysely
$haku = mysql_query($kysely, $yhteys) or die("Virhe kyselyssä!");



//suljetaan yhteys
mysql_close($yhteys);
?>

Mod. lisäsi kooditagit

GimPeltzi [25.06.2008 16:56:41]

#

lainaus:

$kysely = ("SELECT * FROM puhelimet WHERE merkki = '".$Merkki0."'");

Kyselet tietokannasta vain ensimmäisen merkin mukaan. Käytät muuttujaa $Merkki0, mutta jätät $Merkki1:n huomiotta kyselyssäsi.

Bishop [26.06.2008 09:29:13]

#

No niinpä tietenkin olenpas taas sokee.... Perk...

edit.
Yritin laittaa tohon $Merkki1 niin se sanoo vaan että virhe kyselyssä joten mitenkä se pitäs siihen sitten laittaa? Yritin laittaa sen näin
$kysely = ("SELECT * FROM puhelimet WHERE merkki = '".$Merkki0."', '".$Merkki1."' ");

GimPeltzi [26.06.2008 18:33:38]

#

Laita ehdoksi, että merkki on merkki0 TAI merkki1
...WHERE merkki = merkki0 OR merkki = merkki1;

Huomaa toki, että sinun on selvitettävä kaikki hakusanat huolimatta siitä, montako niitä tulee.

Bishop [27.06.2008 00:49:00]

#

Kiitos jälleenkerran...


Mitenkäs laitan noi sitten aakkos järjestykseen kun nytten teen hakuja niin ne tulee siihen järjestykseen missä olen tehnyt ne.

Ja sitten olis vielä yks kysymys, että jos ei valitakkaan mitään puhelin merkkiä niin sittten hakee niillä kaikilla? Jos olen oikein ymmärtänyt, niin pitäisi tehdä while-silmukalla, mutta en ole vielä ymmärtänyt sen logiikkaa niin voisiko joku valaista (jos se tehdään while:lellä).

GimPeltzi [28.06.2008 08:52:59]

#

Suosittelen sinua lukemaan jotakin SQL -aiheista kirjaa tai -opasta. Jos tiedustelet jokaista toimintoa täällä, siinä tulee menemään sekä sinun että auttajan aikaa turhaan.
Ohjelmointiputkan Oppaat -osion Käytännön PHP -oppaan Tietokannat -osio on hyvä paikka aloittaa.

Tietokannan tulosten järjestely tapahtuu ORDER BY -määrityksen avulla. Sitä voi täsmentää ASC ja DESC -määritteillä. Esim:
...ORDER BY merkki DESC;

Toista kysymystä en nyt ihan ymmärtänyt. Eli tarkoitus olisi tehdä niin, että jos yhtään merkkiä ei valita, näytetään kaikki tuotteet?
Tällöin jätä hakuehto (WHERE) kyselystä pois, niin tietokannasta tulee kaikki rivit.

Vastaus

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

Tietoa sivustosta