(PHP MYSQL) checkbox waardes gebruiken in query

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Aangezien je hier altijd op je kop krijgt dat je eerst zelf moet gaan zoeken en moet uitproberen heb ik dat ook gedaan :9 maar echter niks concreets gevonden...Heb een poging gedaan om het zelf op te lossen, maar gaat nog niet helemaal goed. Graag jullie hulp...

Ik heb een HTML formulier gebouwd met checkboxes die dynamisch worden opgebouwd (met waardes uit een mysql tabel).

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<table width="100%"><tr valign="top"><form method="post" action="listexpcon.php">
  <tr>
    <td>Add to list:<br><br>
    <?
    $sqltype="SELECT id, name FROM contract_type ORDER BY name ASC"; 
    $resulttype=mysql_query($sqltype); 

    while ($rowtype=mysql_fetch_array($resulttype)) { 
    $idtype=$rowtype["id"];
    $nametype=$rowtype["name"]; 

    echo "<input type=\"checkbox\" name=\"type[]\" value=\"".$idtype."\">$nametype<br>";
    }  
    ?>
    <br><br><input id="knop" type="submit" name="conselection" value="   Show   ">
    </td>
  </tr>
</form></table>


Ik heb de 'name' van de checkboxes op 'type[]' gezet zodat er bij het versturen van het formulier automatisch een array wordt aangemaakt van de aangevinkte checkboxes. Deze waardes wil ik in de WHERE clause gebruiken van een SQL statement. Ik heb dit geprobeerd d.m.v. de SQL query dynamisch op te bouwen.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
foreach($_POST['type'] as $name=>$value ) { 
$type.= "contract.type = ".$value." OR "; 
}
    
$type_sql = substr($type, 0, -4);

$sql = "SELECT contract_party_vemedia.name AS vemname,
contract_party.name AS cpname,
contract_party2.name AS cp2name,
contract_type.name AS tname,
DATE_FORMAT(contract.not_date,'%d.%m.%Y') AS notdate,
DATE_FORMAT(contract.exp_date,'%d.%m.%Y') AS expdate
FROM contract, contract_party, contract_party2,
contract_type, contract_party_vemedia
WHERE contract.party1 = contract_party_vemedia.id AND
contract.party2 = contract_party.id AND
contract.party3 = contract_party2.id AND
contract.type = contract_type.id AND
$type_sql
ORDER BY tname";

$result = mysql_query($sql);
if (!$result){
error('A database error occurred in processing your submission: ' . mysql_error());
}


Dit werkt ook. Als ik in het formulier een contracttype aanvink en het formulier verstuur dan krijg ik een lijst te zien met alleen de contracten van het type dat ik heb aangevinkt. Alleen wanneer ik er twee of meer aanvink gaat er denk ik iets niet goed in mijn SQL query. Ik wil dan gewoon dat ik alle contracten krijg te zien die voldoen aan de aangevinkt criteria, maar het resultaat van de query resulteert in duizenden regels?!

Weet iemand hoe ik dit op kan lossen of hoe ik dit hele vraagstuk beter/efficienter in kan delen? De query is opgebouwd met meerdere OR statements in de WHERE clause. Ik denk dat hier iets niet goed mee gaat?

Ik hoor graag jullie hulp/reacties!

Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Dat komt omdat je een OR in de query krijgt. Hij voert dan een OR uit op alles wat er voor staat, of 1 van de laatste clauses. Als je $type_sql in ( ) haken zet in de query zal dit niet gebeuren. Overigens is het handig om alle clauses aan een array toe te voegen en dan de gehele array te imploden op " OR ", dan is die gehele substr() actie ook overbodig.

[ Voor 5% gewijzigd door Michali op 06-06-2005 17:27 ]

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Onwijs bedankt! Dit is inderdaad precies wat ik zocht! _/-\o_
Zit al de hele dag te klooien...en dan zijn het uiteindelijk twee haakjes })
Nu nog proberen om het allemaal in 1 array te krijgen...

Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Dat is een array zetten is vrij simpe. Wat ik bedoelde is dit:
PHP:
1
2
3
4
5
6
7
8
9
10
$typeClauses = array();
foreach($_POST['type'] as $value ) { 
  $typeClauses[] = "contract.type = ".$value; 
} 

$query = "
  .. sql code ..
  " . implode (" OR ", $typeClauses) . "
  .. sql code ..
";

Dan is die substr niet nodig. Handig truukje die vaak toe te passen is. :)

[ Voor 11% gewijzigd door Michali op 06-06-2005 19:14 ]

Noushka's Magnificent Dream | Unity