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?
teet tarkistuksen tylii esim.
if($maa != ""){
$maas = "maa='$maa'";
}
if($osasto != ""){
$osastos = "osasto='$osasto'";
}
if(isset($maas) && isset($osastoss)){
$where = $maas." AND ".$osastos;
}
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.
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ä.
Aihe on jo aika vanha, joten et voi enää vastata siihen.