be.comp.internet.design
[Top] [All Lists]

Re: php/mysql: zoeken op verschillende velden?

Subject: Re: php/mysql: zoeken op verschillende velden?
From: Bernard Grymonpon
Date: Sat, 7 Jan 2006 08:06:24 +0000 UTC
Newsgroups: be.comp.internet.design
Jeffrey Drooghenbroodt <jeffrey.drooghenbroodt@xxxxxxxxxxxxx> wrote:
> vf wrote:

>> Het probleem is denk ik vooral dat ik dus niet op voorhand weet
>> welke velden ingevuld zijn en welke niet. Daarbij zijn de gegevens
>> verspreid over meerdere tabellen.
>> 
>> Hoe moet ik daarvoor de juiste SQL-query schrijven? Aangezien het
>> om 20 velden gaat en meerdere tabellen, zal het wel te controleren
>> zijn door h??l veel "if" en "else" te gebruiken en telkens een
>> bijhorende query te schrijven, maar ik hoop dat er een
>> eenvoudigere/elegantere oplossing is... 

> Het eerste wat in me opkomt (wellicht niet de meest elegante 
> oplossing): je query een beetje uitbreiden, en telkens 2 mogelijkheden 
> voorzien: een match, en een lege input...

> En dan krijg je iets als:

> ... WHERE (`veld1` = '$veld1' OR '$veld1' = '') AND (`veld2` =  ...

> Niet getest, en nogmaals: het zal wel eleganter kunnen, maar in 
> principe zou je hiermee verder moeten kunnen...

Het kan dus wel iets eleganter. Hieronder wat halve code, niet getest,
maar het idee is er:

$veldnamen = array('veldnaamA', 'veldnaamB', 'veldnaamC');

foreach($veldnamen as $veldnaam){
  $veldinvoer = controleerenkuisinvoerop($_POST[$veldnaam]);

  if(!empty($veldinvoer)){
    $selectie[] = '(' . $veldnaam . ' = \'' . $veldinvoer . '\')'; 
  }
}

$query = 'SELECT watjenodighebt FROM vanwaarhetmoetkomen WHERE ' . implode(' 
AND ', $selectie);

Merk op dat je $veldnamen iets beter en intelligenter kan maken, en
daar bvb ook de selector instoppen ('=', 'LIKE', ...), en als er
numeriek of string-wise moet vergeleken worden (single quotes nodig of
niet?), en de naam van het veld in je db als dit niet gelijk is aan de
veldnaam.

En kuis je invoer op voor je die verder verwerkt!

Vriendelijke groeten,
Bernard Grymonpon

-- 
Openminds bvba                www.openminds.be
Tweebruggenstraat 16  -  9000 Gent  -  Belgium

<Prev in Thread] Current Thread [Next in Thread>