login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Get variabelen met array vergelijken (Opgelost)

Offline Aquila - 16/06/2008 16:01 (laatste wijziging 16/06/2008 16:55)
Avatar van AquilaNieuw lid Goed, even overnieuw
Wat ik wil is het volgende. Ik wil een search query maken aan de hand van een door de gebruiker ingevuld formulier. Dit formulier bestaat uit checkboxen. Dan wil ik dat als binnen een bepaalde categorie meerdere waardes zijn aangevinkt de search query wordt aangevuld met OR.

Dus, stel ik zeg in categorie 1 dat ik a of b wil moet de search query worden aangevuld met AND cat1 = a OR cat1 = b. Als je dan bij categorie 2 a en c wil en bij categorie 3 alleen a wil moet dit de search query worden.
  1. $search_query = "SELECT id WHERE cat1 = a OR cat1 = b AND cat2 = a OR cat2= c AND cat3 = a";


Dus, de waardes in de $_GET kunnen dubbel zijn, in mijn voorbeeld zou de search query dit zijn:
  1. search.php?cat1=a&cat1=b&cat2=a&cat2=c&cat3=a


Dus samengevat
  1. search.php?cat1=a&cat1=b&cat2=a&cat2=c&cat3=a


Moet worden:
  1. $search_query = "SELECT id WHERE cat1 = a OR cat1 = b AND cat2 = a OR cat2= c AND cat3 = a";


Hoe krijg ik dit voor elkaar?

11 antwoorden

Gesponsorde links
Offline maigel - 16/06/2008 16:04
Avatar van maigel PHP beginner je wilt dus 1,1,3,1 in een array zetten? of wil je kijken in een array dat er 1,1,3 of 1 in voorkomt
Offline Rik - 16/06/2008 16:04 (laatste wijziging 16/06/2008 16:07)
Avatar van Rik Gouden medailleGouden medaille

Crew algemeen
Het ligt er aan hoe je het in de array wilt krijgen. Als je een associatieve array van de query string maakt verdwijnt die eerste twee alsnog.

Edit:
Als je een array wilt krijgen in de vorm zoals maigel zegt kan je dit gebruiken:
  1. $array = explode('&', $_SERVER['QUERY_STRING']);
  2. foreach ($array as $key => $value) {
  3. $array[$key] = end(explode('=', $value));
  4. }
Offline marten - 16/06/2008 16:07
Avatar van marten Beheerder Het is wel heel erg lelijk geprogrammeerd om zo'n link terug te krijgen. Misschien kan je de oplossing beter bij de link zoeken.
Offline Aquila - 16/06/2008 16:09
Avatar van Aquila Nieuw lid Ik wil een manier vinden om zo'n array te krijgen
  1. [een] => 1,
  2. [twee] => 1,
  3. [twee] => 3,
  4. [vijf] => 1
  5. }


Alleen als je gewoon $_GET gebruikt krijg je niet twee keer de twee key. Aangezien de keys allemaal anders moeten zijn. Dus misschien [twee] => 1,3 oid?
Offline Rik - 16/06/2008 16:29
Avatar van Rik Gouden medailleGouden medaille

Crew algemeen
De array die je zelf geeft is niet mogelijk. Je hebt twee keer de key 'twee' zodat de tweede waarde de eerste zal overschrijven.

Dat 1,3 is te maken, maar op deze manier je variabelen afhandelen is zoals Marten zei geen mooie manier.

Misschien kan je wat meer uitleggen wat het doel is van dit script (en wat meer code geven) zodat we even kunnen kijken hoe het netter kan.
Offline Aquila - 16/06/2008 16:44
Avatar van Aquila Nieuw lid Goed, even overnieuw
Wat ik wil is het volgende. Ik wil een search query maken aan de hand van een door de gebruiker ingevuld formulier. Dit formulier bestaat uit checkboxen. Dan wil ik dat als binnen een bepaalde categorie meerdere waardes zijn aangevinkt de search query wordt aangevuld met OR.

Dus, stel ik zeg in categorie 1 dat ik a of b wil moet de search query worden aangevuld met AND cat1 = a OR cat1 = b. Als je dan bij categorie 2 a en c wil en bij categorie 3 alleen a wil moet dit de search query worden.
  1. $search_query = "SELECT id WHERE cat1 = a OR cat1 = b AND cat2 = a OR cat2= c AND cat3 = a";


Dus, de waardes in de $_GET kunnen dubbel zijn, in mijn voorbeeld zou de search query dit zijn:
  1. search.php?cat1=a&cat1=b&cat2=a&cat2=c&cat3=a


Dus samengevat
  1. search.php?cat1=a&cat1=b&cat2=a&cat2=c&cat3=a


Moet worden:
  1. ]$search_query = "SELECT id WHERE cat1 = a OR cat1 = b AND cat2 = a OR cat2= c AND cat3 = a";


Hoe krijg ik dit voor elkaar?
Offline Martijn - 16/06/2008 17:12 (laatste wijziging 16/06/2008 17:14)
Avatar van Martijn Crew PHP kun je niet maken dat je 2 dingen meegeeft in 1 cat op deze manier:

search.php?cat1=a,b

dat is makkelijker..

  1. $tekst[1]='';
  2. $tekst[2]='';
  3. $tekst[3]='';
  4. if(isset($_GET['cat1'])){
  5. $cat1=explode(",",$_GET['cat1']);
  6. $i=0;
  7. foreach($cat1 as $key=>$value){
  8. if($i!=0){$tekst[1].=" OR ";}
  9. $tekst[1].="cat1 = ".$value;
  10. $i++;
  11. }
  12. }
  13. if(isset($_GET['cat2'])){
  14. $cat2=explode(",",$_GET['cat2']);
  15. $i=0;
  16. foreach($cat2 as $key=>$value){
  17. if($i!=0){$tekst[2].=" OR ";}
  18. $tekst[2].="cat2 = ".$value;
  19. $i++;
  20. }
  21. }
  22.  
  23. if(isset($_GET['cat3'])){
  24. $cat3=explode(",",$_GET['cat3']);
  25. $i=0;
  26. foreach($cat3 as $key=>$value){
  27. if($i!=0){$tekst[3].=" OR ";}
  28. $tekst[3].="cat3 = ".$value;
  29. $i++;
  30. }
  31. }
  32. $totaaltekst='';
  33. $i2=0;
  34. foreach($tekst as $key=>$value){
  35. if($i2!=0){$totaaltekst.= " AND ";}
  36. $totaaltekst.=$value;
  37. $i2++;
  38. }
  39.  
  40. if($totaaltekst==''){echo"Geen info";}
  41. else{
  42. mysql_query("SELECT id FROM tabelnaam WHERE "$totaaltekst) or die(mysql_error());
  43. }


edit: wow, dat werd best wat code
edit2: weet ook niet of het werkt, dit was zo even uit mn hoofd
Offline Aquila - 16/06/2008 17:15
Avatar van Aquila Nieuw lid Wo DeviourSoul, bedankt. Ik zal nog even kijken hoe ik dit kan maken als ik de categorieën uit de database haal e.d. Maar nog 1 vraagje. Hoe kan ik zorgen dat mijn checkboxen in het formulier worden verwerkt als cat3 = 1,2 ipv cat3=1&cat3=2 ?
Offline Martijn - 16/06/2008 17:16 (laatste wijziging 16/06/2008 17:16)
Avatar van Martijn Crew PHP
  1. $cat1=implode(",",$arrayMetSelects);
Offline Aquila - 16/06/2008 17:19
Avatar van Aquila Nieuw lid Oké, hartstikke bedankt DeviourSoul. Je hebt me echt enorm geholpen. Nog even wat aanpassen en klaar. Bedankt!
Offline Wim - 16/06/2008 17:24
Avatar van Wim Crew algemeen
DeviourSoul schreef:
kun je niet maken dat je 2 dingen meegeeft in 1 cat op deze manier:

search.php?cat1=a,b

dat is makkelijker..

[..code..]

edit: wow, dat werd best wat code
edit2: weet ook niet of het werkt, dit was zo even uit mn hoofd


  1. $j = 0;
  2. $cats = array('1', '2', '3');
  3.  
  4. foreach ($cats as $cat)
  5. {
  6. $j++;
  7. if(isset($_GET['cat'.$cat]))
  8. {
  9. $cat1=explode(",",$_GET['cat'.$cat]);
  10. $i=0;
  11. foreach($cat1 as $key=>$value)
  12. {
  13. if($i!=0)
  14. {
  15. $tekst[$j].=" OR ";
  16. }
  17. $tekst[$j] .= "cat" . $cat . " = " . $value;
  18. $i++;
  19. }
  20. }
  21. }
  22.  
  23. unset($totaaltekst, $k);
  24.  
  25.  
  26. foreach($tekst as $key=>$value){
  27. if ($k!=0)
  28. {
  29. $totaaltekst .= " AND ";
  30. }
  31.  
  32. $totaaltekst .= $value;
  33. $k++;
  34. }
  35.  
  36. if(empty($totaaltekst))
  37. {
  38. echo ("Geen info");
  39. }
  40. else
  41. {
  42. mysql_query("SELECT id FROM tabelnaam WHERE "$totaaltekst) or die(mysql_error());
  43. }


Die is wat opgevrolijkt en wat dynamischer ;)
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.336s