Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Formilla haku Mysql:stä

Sivun loppuun

Extreme [19.11.2005 13:49:53]

#

Minulla on Mysql:ssä tietueet:

|Merkki|Malli|Hinta|Vuosimalli|
|xxxxxx|xxxxx|xxxxx|xxxxxxxxxx|

Nyt ongelma on se että en saa haettua kannasta formiin syötetyillä arvoilla. Saan tulostettua vain sen minkä kirjoitan esim malli-kenttään, eli ihan sama mitä siihen kirjoitan. Olen jo pyyhkinyt ziljoonaan kertaan koodin pois, joten jäljellä on tämä ja tästä nyt pitäisi lähteä rakentaan johonkin suuntaan. Olisiko jollaki antaa vinkkiä miten lähtisin tästä eteenpäin?

Tiedän, että tämä varmaan ei ole sinne päinkään:D

Ja formissa on text-fieldid:
-merkki
-malli
-hinta
-vuosimalli

Formin suorituskomento:

<form action="query.php" method="GET" enctype="multipart/form-data" name="form1" target="mainframe">
<?PHP
//query.php
if(isset($_GET['Etsi'])) {
    $link = mysql_connect("localhost", "xxxxxxx", "xxxxxxxx")
	or die("Yhteys epäonnistui");

    mysql_select_db("xxxxxxx") or die("Ei saatu yhteyttä valittuu kantaan");

    $query = "SELECT Merkki, Malli, Vuosimalli, Hinta FROM vaihtoautot";
    $result = mysql_query($query)or die("Haku epäonnistui");

	$tulos=$_GET['$merkki'];
	print ("$tulos");
	}
?>

Eli olen aika hakoteillä vielä, mutta vinkkejä otetaan vastaan :)

Tarkoitus on yksinkertainen, formiin syötetään halutut haku-kriteerit ja sen jälkeen "search"-namikkaa joka näyttää löydetyt tulokset.

LazyJones [19.11.2005 14:10:51]

#

$query = mysql_query($result);

Oliskohan tuossa $result ja $query muuttujat vaihtaneet paikkaa

coaster [19.11.2005 15:56:15]

#

mysql_query($query) -> mysql_query($query,$link)

eli $link sinne mukaan, muistaakseni php-dokkarissa sanottiin, että kuuluu laittaa, muuten ei välttämättä toimi...

Olga [20.11.2005 16:24:15]

#

Varmaan auttaisi asiaa jos tulostaisit yleensäkin nuo kannasta mahdollisesti saadut tiedot :)

while($rivi = mysql_fetch_assoc($result)) {

    print $rivi['Merkki'] . ", " . $rivi['Malli'] . ", " . $rivi['Vuosimalli'] . ", " . $rivi['Hinta'] . "<br />";

} // while

Extreme [22.11.2005 10:30:50]

#

Olga kirjoitti:

Varmaan auttaisi asiaa jos tulostaisit yleensäkin nuo kannasta mahdollisesti saadut tiedot :)

while($rivi = mysql_fetch_assoc($result)) {

    print $rivi['Merkki'] . ", " . $rivi['Malli'] . ", " . $rivi['Vuosimalli'] . ", " . $rivi['Hinta'] . "
";

} // while

No mutta sen teen :D Kiitän ja kumarran !

Extreme [22.11.2005 17:47:33]

#

Nythän se tekee silleen että tulostaa koko kannan.
Millä tavalla saan, että se ottaa huomioon hakukriteerit ja hakee niillä?

Vinkkejä otetaan lisää vastaan.

ajv [22.11.2005 17:55:17]

#

Laitat ne formilta tulevat hakukriteerit sinne SQL-kyselyyn mukaan :) Avain sana on WHERE-lause. Putkan php-oppaasta löytyy esimerkkejä.

Extreme [22.11.2005 18:05:19]

#

ajv kirjoitti:

Laitat ne formilta tulevat hakukriteerit sinne SQL-kyselyyn mukaan :) Avain sana on WHERE-lause. Putkan php-oppaasta löytyy esimerkkejä.

hmm...

<?PHP
$query = "SELECT * FROM vaihtoautot WHERE Merkki,Malli,Vuosimalli,hinta LIKE '%Qmerkki%', '%Qmalli%', '%QVuosimalli%', '%QHinta%'";
?>

Tuollainen kävi mielessä, mutta lienekkö oikein?

Tai sitten...

<?
$query = "SELECT * FROM vaihtoautot WHERE Merkki, Malli, Vuosimalli, Hinta LIKE '%".mysql_escape_string($_GET['QMerkki','QMalli','QVuosimalli','QHinta'])."%'";
?>

Voe mahoton ko meinaa lapin äijälle olla mahoton tehtävä :)

lapm [22.11.2005 18:42:34]

#

Ihan mielenkiinnosta, missä vaiheessa syötät hakuehtoihin ne lomakkeelta saamasi tiedot?

Näytät postittavan ne GET metodilla ja oletettavasti register_globals ei ole päällä tietoturvasyistä?

Itse rustaisin hakulausekkeen jotenkin näin esimerkiksi tilanteessa jossa kaikki hakuehdot on saatu:

$query = "SELECT * FROM vaihtoautot WHERE Merkki={$Merkki}, Malli={$Malli}, Vuosimalli={$Vuosimalli}, Hinta={$Hinta}";

Extreme [22.11.2005 19:19:12]

#

lapm kirjoitti:

Ihan mielenkiinnosta, missä vaiheessa syötät hakuehtoihin ne lomakkeelta saamasi tiedot?

No tämähän tässä juuri minulla on ongelma.
Kun laitan formiin haun kriteerit, pitäisi osata tehdä haku niillä kannasta.

Selaimen osoite tällainen:

query.php?merkki=bmw&malli=520&vuosimalli=1996&search=Etsi

Kuhasta löytynyttä.
Tätä olisi varmaan nyt helppo soveltaa?

<?php

$hakuId     = $_POST['haku_id'];
$kysely   = "SELECT * FROM asiakas WHERE asiakas.as_tunnus LIKE '$hakuId';";
$haku     = mysql_query($kysely, $hae_asiakas) or die(mysql_error());

$row_haku = mysql_fetch_assoc($haku);
$totalRows_haku = mysql_num_rows($haku);
?>

lapm [22.11.2005 20:56:01]

#

Extreme kirjoitti:

Selaimen osoite tällainen:

query.php?merkki=bmw&malli=520&vuosimalli=1996&search=Etsi

Kuhasta löytynyttä.
Tätä olisi varmaan nyt helppo soveltaa?

<?php

$hakuId     = $_POST['haku_id'];
$kysely   = "SELECT * FROM asiakas WHERE asiakas.as_tunnus LIKE '$hakuId';";
$haku     = mysql_query($kysely, $hae_asiakas) or die(mysql_error());

$row_haku = mysql_fetch_assoc($haku);
$totalRows_haku = mysql_num_rows($haku);
?>

Selaimen osoitteen perusteellä käytät GET-metodia, ja php koodisi perusteella POSt-metodia joten ei ihme ettet saa parametrejä lomakkeelta. :)

Muutappa: $hakuId = $_POST['haku_id'];
Muotoon: $hakuId = $_GET['haku_id'];

Ja kokeiles mitä tapahtuu.

Toisaalta sinulla ei osoiterivillä ole muuttujaa haku_id.
merkki,malli,vuosimalli ja search muuttujat sen sijaan löytyisivät.
Jolloin $Muuttuja = $_GET['merkki']; palauttausi Muutujassa merkin saaman arvon.

Extreme [22.11.2005 22:20:12]

#

Käytän GET-metodia. Tuo on vain kuhasta löytynyt esimerkki.

Tän hetken tilanne. Kokeilen ensin vain "merkki" -hakua.

<?PHP
//query.php
    $link = mysql_connect("localhost", "xxxxx", "xxxxx")
	or die("Yhteys epäonnistui");

    mysql_select_db("xxxxx") or die("Ei saatu yhteyttä valittuu kantaan");

    $haku =  $_GET['merkki'];
	$query = "SELECT * FROM vaihtoautot WHERE merkki LIKE '$haku';";
    $result = mysql_query($query,$link)or die("Haku epäonnistui");

	if(mysql_num_rows($result) == 0)

	// Tähän viesti, kun tuloksia ei löydy..
	echo 'Hakusi <b> '.$_GET['merkki'].' </b> ei tuottanut tulosta';

	else {

	// Tähän viesti, kun tuloksia löytyy.
	echo 'Hakusanallasi <b>'.$_GET['merkki'].' </b> löytyi '.mysql_num_rows($result).' tulosta.';

	}

	// Näytetään tulokset.
	while($rivi = mysql_fetch_assoc($result)) {

    print $rivi['Merkki'] . ", " . $rivi['Malli'] . ", " . $rivi['Vuosimalli'] . ", " . $rivi['Hinta'] . ", " .$rivi['Id']. "<br/>";

}
?>

Saan tulostettua lukumäärän kannasta mutta en merkkiä,mallia etc.
Tiedän että tuossa tulostamisessa on jotain pahasti vialla mutta en ole vielä keksinyt että mikä.

Eli jos kirjoitan hakuun bmw, sen pitäisi näyttää kaikki bmw:t kannasta.

lapm [23.11.2005 07:03:38]

#

Extreme kirjoitti:

Käytän GET-metodia. Tuo on vain kuhasta löytynyt esimerkki.

Huoh, siis kysyt missä vika ja annat esimerkkinä ihan eri koodia kuin missä vika on? Voi huoh sentään.

Ei siis ihme ettemme oikein tunnu pääsevän tässä auttamisessasi eteenpäin.

Extreme [23.11.2005 08:49:39]

#

:D Ei herneitä.

Se oli vain esimerkki koodi, ja laitoin sen vain siihen ilmaistakseni että voiko sitä hyödyntää?

Mutta tuossa sun yläpuolella on viimeisin aikaansaannokseni.
Onko sulla tuohon antaa vinkkejä?

Lebe80 [23.11.2005 09:55:35]

#

kirjoita rivi[ oikea solunnimi ], niin alat saamaan niitä oikeita tuloksia. Oikea solunnimi pitää olla just tismalleen samalla tavalla kirjoitettu kuin mySQL-kannaskin.

muuta alin while lause muotoon

$osumat = array();
while($rivi = mysql_fetch_assoc($result)) {
   $osumat[] = $rivi;
}
echo '<pre>';
print_r ($osumat);
echo '</pre>';

Extreme [23.11.2005 10:20:30]

#

Kiitos Lebe80 !

Nyt saan jo kannasta tulostettua.
Tosin joku merkki mulla vielä puuttuu.

Tulostaa tällaisen:

Hakusanallasi bmw löytyi 2 tulosta.
Array
(
    [0] => Array
        (
            [id] => 27
            [merkki] => BMW
            [malli] => 520
            [vuosimalli] => 1996
            [ajomaara] => 135000
            [lisatiedot] =>
            [hinta] => 32 000
            [reknro] => abc-123
            [kuva] =>
        )

    [1] => Array
        (
            [id] => 30
            [merkki] => BMW
            [malli] => M5
            [vuosimalli] => 2005
            [ajomaara] => 40000
            [lisatiedot] => Ei voi paljon enempää vaatia
            [hinta] => 120 000
            [reknro] => ccc-111
            [kuva] =>
        )

)

Extreme [23.11.2005 11:52:40]

#

Ei voinut enäämuokata edellistä viestiä.
Joten, vielä sellainen lisä on suunnitteilla että avaa tulokset linkkeinä. Sitten kun klikkaa linkkiä, avaa sen auton tiedot.
Esim.

Hakusanallasi BMW löytyi 2 tulosta.
BMW 520, 1996, 32000€
BMW M5, 2005, 120000€

lapm [23.11.2005 18:56:47]

#

Extreme kirjoitti:

Kiitos Lebe80 !

Nyt saan jo kannasta tulostettua.
Tosin joku merkki mulla vielä puuttuu.

Tulostaa tällaisen:

Lukaiseppas ihan mielenkiinnosta mitä print_r funktio tarkalleen ottaen tekee. ;) Sehän tulostesi mukaan toimii juuri niinkuin sen pitääkin.

Eli joudut edelleen tulostamaan erikseen ne kentät siellä while lauseessa.


Mitä tulee linkkien lisäämiseen, niin teet vain linkin jolla scriptisi tuostaa halutun auton tiedot.

<?php
print "<a href=\"?show={$Auton_id}\">".$Auton_tiedot."</a>";
?>

Sivun alkuun

Vastaus

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

Tietoa sivustosta