Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Sql: haku useamman hakukentän arvolla

mika_jussi [19.10.2005 13:16:14]

#

Nyt täytyy jälleen kerran kääntyä fiksumpien puoleen, olen tätä kääntänyt ympäri ja nurin, mutta en löydä ratkaisua.

Tapaus: PHP-sivu, jossa täytetään yksi tai useampi hakukenttä. Kolme alasvetovalikkoa ja kaksi vapaatekstikenttää. Kun painetaan "Hae", siirrytään uudelle sivulle, joka toteuttaa skriptin ja hakee hakuehtojen perusteella tietokannasta rivejä.

Ongelma: En löydä tapaa, jolla alasvetovalikoista valitut ehdot toteutuisivat haussa, mikäli valikosta on joku valihtoehto valittu, mutta toisesta valikosta ei ole valittu mitään.

Nyt toimii, jos kaikki (alasveto)kentät täytetään, mutta jos yhden jättää valitsematta, riviä ei löydy tietokannasta, vaikka muut ehdot toteutuisivatkin, eli pitäisi saada tapa, jolla valitsematta jätetty alasvetovalikkovaihtoehto ei tarkoittaisi haussa "NULL:ia", vaan "mikä tahansa".

Tuleeko tuo määritellä hakulomakkeessa
<select name='maa'>
<option>- valitse maa-</option>

vai Select-lauseessa?
$sql="SELECT * FROM henkilot WHERE maa='$maa' and osasto='$osasto' and tehtava='$tehtava' and nimi like '%$nimi%' and sukunimi like '%$sukunimi%' ORDER BY sukunimi, nimi ASC";

Vapaatekstikenttien tyhjäksi jättäminen ei aiheuta ongelmia.

Onko ideoita?

Niko [19.10.2005 13:32:40]

#

teet tarkistuksen tylii esim.
if($maa != ""){
$maas = "maa='$maa'";
}

if($osasto != ""){
$osastos = "osasto='$osasto'";
}

if(isset($maas) && isset($osastoss)){
$where = $maas." AND ".$osastos;
}

geggo [20.10.2005 11:39:52]

#

Tai suoraan tuon sql kyselyyn teet if:t

on kolme pudotusvalikkoa: valikko1, valikko2, valikko3.olettaen että valikot on tuohon tyyliin:

<select name=valikko1>
<option value=1>tieto</option>
<option value=1>tieto1</option>
<option value=1>tieto2</option>
</select>

sekä kyselyssä kolme tietoa mihin veraukset pitää tehä: plaa1, plaa2, plaa3.
Oletuksena on että pudotusvalikkojen arvot on numeraalisia!

<?php
$sql="SELECT * FROM henkilot WHERE plaaa, plaaa";
if (is_numeric($_GET['velikko1'])) $sql .= " AND plaa1 = " . $_GET['valikko1'];
if (is_numeric($_GET['valikko2'])) $sql .= " AND plaa2 = " . $_GET['valikko2'];
if (is_numeric($_GET['valikko3'])) $sql .= " AND plaa3 = " . $_GET['valikko3'];
$sql .= "ja loput sql mutut";

?>

Elikkäs tuossa suoritetaan if-lause jos GET on numeraalinen, jos ei ole valittu mitään jatketaan eteenpäin.
Tuosta muokkaamalla.

mika_jussi [21.10.2005 14:41:39]

#

No niin, nyt sain toimimaan. Ratkaisin sen nyt niin, että laitoin ehdon joka vaihtoehdolle tyyliin

if ($maa=='' and $osasto<>'' and tehtava==''){
$sql="SELECT * FROM henkilot WHERE osasto='$osasto' and nimi like '%$nimi%' and sukunimi like '%$sukunimi%' ORDER BY sukunimi, nimi ASC";
}

Ei varmasti ole "taloudellisin" ratkaisu, mutta nyt en saanut muuta toimimaan. Kiitokset avusta pähkäilyssä.

Vastaus

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

Tietoa sivustosta