login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Meerdere variabelen in $_GET

Offline mbeek - 11/05/2009 18:53 (laatste wijziging 11/05/2009 19:43)
Avatar van mbeekNieuw lid Hallo,

Ik heb volgende code in zoek.php:

Plaatscode: 136444

Lijkt prima te werken! zoek.php?hcat=1&scat=3&mcat=6

Geeft de juiste resultaten!

Alleen zou ik nog één ding willen:

Bijvoorbeeld in twee of meer hcat's (of scat's etc) te gelijk zoeken, dus bijvoorbeeld:

zoek.php?hcat=1,4&scat=3&mcat=6

De query zou dan laat maar zeggen op deze manier moeten:
  1. SELECT id, titel, prijs, foto1, datum FROM advertenties WHERE hcat = '1' AND scat = '3' AND mcat = '6' OR hcat = '4' AND scat = '3' AND mcat = '6' ORDER BY datum DESC


Wat moet ik daarvoor in mijn code/query aanpassen? Iemand een idee?

23 antwoorden

Gesponsorde links
Offline ArieMedia - 11/05/2009 18:55 (laatste wijziging 11/05/2009 18:56)
Avatar van ArieMedia Gouden medaille

PHP ver gevorderde
Codetags pl0x!

Mn hoofd doet nu pijn van al die tekst =(
Offline Bart - 11/05/2009 18:58
Avatar van Bart PHP expert Doe:
$_GET['naam_in_url']
Dus:
  1. $_GET['hcat'] // levert 1,4
  2. $_GET['scat'] // levert 3
  3. $_GET['mcat'] // levert 6
Offline mbeek - 11/05/2009 19:01
Avatar van mbeek Nieuw lid Hallo Quicky,

Juist wat je zegt.

De query wordt zo:

SELECT id, titel, prijs, foto1, datum FROM advertenties WHERE hcat = '11,12' AND scat = '17' AND mcat = '24' ORDER BY datum DESC

Maar dan krijg ik alleen de resultaat van hcat = 11 ..en niet van 12.
Offline Bart - 11/05/2009 19:06 (laatste wijziging 11/05/2009 19:06)
Avatar van Bart PHP expert WHERE hcat = '11' AND hcat = '12' gebruiken, gewoon voor elke conditie een nieuw item in de WHERE clause plaatsen.

Dus query wordt:
  1. SELECT id, titel, prijs, foto1, datum FROM advertenties WHERE hcat = '11' AND hcat '12' AND scat = '17' AND mcat = '24' ORDER BY datum DESC
Offline mbeek - 11/05/2009 19:07
Avatar van mbeek Nieuw lid Ja maar hoe doe ik dat dan?

Als ik &hcat=11,12 invoer doet hij het ook zo in de query.

Offline Bart - 11/05/2009 19:12
Avatar van Bart PHP expert hcat = 11
shcat = 12 (second hcat)
Je zult met meerere vars in je get moeten werken.
Offline mbeek - 11/05/2009 19:14
Avatar van mbeek Nieuw lid Ja dat is een optie,
maar het moet wel werken zo &hcat=11,12

zie:

https://www.kleertjes.com/?page=browse&af[g]=1,2&af[mt]=10,11,12,13&fs[g]=0&fs[mt]=1&fs[sz]=1

Die pagina doet dat ook.
Offline Bart - 11/05/2009 19:17
Avatar van Bart PHP expert Ja, wat je kán doen, maar is heel veel werk, je hcat exploden (php.net: explode) en dan kijken welke cats er worden opgevraagd.
Offline mbeek - 11/05/2009 19:19
Avatar van mbeek Nieuw lid Kun je me daarmee opweg helpen?
Offline Joost - 11/05/2009 19:26
Avatar van Joost PHP expert http://www.plaatscode.be/136445/

Heb hem ook even beveiligd tegen SQL Injecties met mysql_real_escape_string  
Offline Martijn - 11/05/2009 19:44 (laatste wijziging 11/05/2009 19:45)
Avatar van Martijn Crew PHP je kunt dat simpel doen door

explode op komma, en implode met " OR hcat="
Offline mbeek - 11/05/2009 21:19 (laatste wijziging 11/05/2009 21:19)
Avatar van mbeek Nieuw lid Hallo Medieval,

Bedankt voor je tip. Hij maakt nu de query, als ik zoek.php?scat=17&hcat=11,12 doe, zo:

SELECT id, titel, prijs, foto1, datum FROM advertenties WHERE hcat = '11' AND hcat = '12' AND scat = '17'

Opzich explode hij dus goed, maar het zou dit moeten zijn:

SELECT id, titel, prijs, foto1, datum FROM advertenties WHERE hcat = '11' AND scat = '17' OR hcat = '12' AND scat = '17'

Snap je? Hopelijk kan je me daarmee nog helpen!
Offline Joost - 11/05/2009 22:08 (laatste wijziging 11/05/2009 22:09)
Avatar van Joost PHP expert hmmz, even denken he. Wanneer je bijvoorbeeld een jcat hebt, en dit is de link:
zoek.php?scat=17&hcat=11,12&jcat=15,16
Wat moet het dan worden? Meerdere OR's?
Offline mbeek - 11/05/2009 22:19 (laatste wijziging 11/05/2009 22:30)
Avatar van mbeek Nieuw lid Hallo Medieval,

Stel je hebt dit: zoek.php?scat=17&hcat=11,12

Dan wil ik de resultaten zien van zowel hcat = 11 in combinatie met scat = 17 als de resultaten van hcat=12 in combinatie met (i.c.m.) scat = 17.

En inderdaad als er een derde variabele bijkomt bijvoorbeeld:

zoek.php?scat=17&hcat=11,12&mcat=23,24

Dan wil ik de resultaten zien van hcat = 11 i.c.m. scat = 17 i.c.m. mcat=23 (dus WHERE hcat=11 AND scat=17 AND mcat=23) en de resultaten van hcat = 12 i.c.m. scat = 17 i.c.m. mcat=23 en de resultaten van hcat = 11 i.c.m. scat = 17 i.c.m. mcat=24 en de resultaten van hcat = 12 i.c.m. scat = 17 i.c.m. mcat=24

Snap je?

EDIT:
Dit heb ik als code op een andere pagina wat werkt met $_POST en met checkboxen als invoer, dat werkt wel. Hopelijk kan je er wat mee om me te helpen met het bovenstaande probleem.
 
  1. <?php
  2. $query = 'SELECT id, titel, prijs FROM advertenties ';
  3. $queryPart = 'WHERE ( %s ) ORDER BY datum DESC';
  4. $queryWhere = array();
  5.  
  6. if(isset($_POST['hcat'])) {
  7. $hcat = array_map( 'mysql_real_escape_string', $_POST['hcat'] );
  8. $queryWhere[] = '( hcat IN ( '.implode(', ', $hcat) . ' ) )';
  9. }
  10.  
  11.  
  12. if(isset($_POST['scat'])) {
  13. $scat = array_map( 'mysql_real_escape_string', $_POST['scat'] );
  14. $queryWhere[] = '( scat IN ( '.implode(', ', $scat) . ' ) )';
  15. }
  16.  
  17. if(isset($_POST['mcat'])) {
  18. $mcat = array_map( 'mysql_real_escape_string', $_POST['mcat'] );
  19. $queryWhere[] = '( mcat IN ( '.implode(', ', $mcat) . ' ) )';
  20. }
  21.  
  22. if(isset($_POST['mtcat'])) {
  23. $mtcat = array_map( 'mysql_real_escape_string', $_POST['mtcat'] );
  24. $queryWhere[] = '( mtcat IN ( '.implode(', ', $mtcat) . ' ) )';
  25. }
  26.  
  27. if(isset($_POST['stcat'])) {
  28. $stcat = array_map( 'mysql_real_escape_string', $_POST['stcat'] );
  29. $queryWhere[] = '( stcat IN ( '.implode(', ', $stcat) . ' ) )';
  30. }
  31.  
  32. if(isset($_POST['klcat'])) {
  33. $klcat = array_map( 'mysql_real_escape_string', $_POST['klcat'] );
  34. $queryWhere[] = '( klcat IN ( '.implode(', ', $klcat) . ' ) )';
  35. }
  36.  
  37.  
  38. $query .= sprintf($queryPart, implode(' AND ', $queryWhere));
  39.  
  40.  
  41. $result = mysql_query( $query );
  42. ?>


EDIT2: Zo ziet de query op die pagina er dan uit: SELECT id, titel, prijs FROM advertenties WHERE ( ( hcat IN ( 12, 11 ) ) AND ( scat IN ( 17 ) ) ) ORDER BY datum DESC

wimmarien schreef:
Gelieve code-tags te gebruiken!
Offline ArieMedia - 11/05/2009 22:28
Avatar van ArieMedia Gouden medaille

PHP ver gevorderde
Ik zal er zowizo

  1. if() {
  2.  
  3. } elseif() {
  4.  
  5. } elseif() {
  6.  
  7. } else() {
  8.  
  9. }


van maken :-)
Offline Joost - 11/05/2009 22:38 (laatste wijziging 11/05/2009 22:59)
Avatar van Joost PHP expert http://www.plaatscode.be/136454/

Ik denk dat die het klusje wel klaart!  


@hieronder: zie 


EDIT
En deze?
http://www.plaatscode.be/136455/
Paar kleine foutjes uitgehaald.
Offline mbeek - 11/05/2009 22:39 (laatste wijziging 11/05/2009 23:17)
Avatar van mbeek Nieuw lid Medieval! Heel apart! Het werkt gewoon! Wat super zeg!

Nu een opvolgend vraagje.

Ik heb aan de linkerkant van mijn website een menu waar gebruikers op klikken.

Hier het menu gedeelte van de "hcat" items:
  1. <?php
  2. $querytest = "SELECT id, naam FROM categorie WHERE cat = '1'";
  3. $resulttest = mysql_query($querytest);
  4.  
  5. while($row = mysql_fetch_assoc($resulttest)) {
  6. $link = 'http://www.dsf.nl/dfs/design/zoek.php?hcat=' . $row['id'];
  7. if(isset($_GET['hcat'])) {
  8. $link .= ',' . $_GET['hcat'];
  9. }
  10. if(isset($_GET['scat'])) {
  11. $link .= '&amp;scat=' . $_GET['scat'];
  12. }
  13. if(isset($_GET['mcat'])) {
  14. $link .= '&amp;mcat=' . $_GET['mcat'];
  15. }
  16. echo '<a href="' . $link . '">' . $row['naam'] . '</a><br />';
  17. }
  18. ?>


Er staan 3 resultaten:

* Audi (id=11)
* BMW (id=12)
* Mercedes (id=13)

Als je op eentje klikt dan gaat hij dus naar bijvoorbeeld zoek.php?hcat=11 (of nouja er wordt in iedergeval hcat=11 bijgevoegd).

Echter stel de pagina staat al op zoek.php?hcat=11&scat=16

Als ik dan nog een keer op Audi klik (hcat=11 dus) dan doet hij dit:

zoek.php?hcat=11,11&scat=16

Echter hij zou MOETEN doen:

Als hcat=11 er al staat dan moet hij die weghalen. Snap je?

Dus bij de eerste keer klikken op Audi, hcat=11 toevoegen en als je er dan nog een keer opklikt weer weg halen.

Als je dit nog weet op te lossen is mijn probleem opgelost ;)...

Super bedankt!!
Offline Joost - 11/05/2009 23:20 (laatste wijziging 12/05/2009 00:00)
Avatar van Joost PHP expert
  1. <?php
  2. $querytest = "SELECT id, naam FROM categorie WHERE cat = '1'";
  3. $resulttest = mysql_query($querytest);
  4.  
  5. $aCats = array('h', 's', 'm'); // h vooraan
  6.  
  7.  
  8. while($row = mysql_fetch_assoc($resulttest)) {
  9. $link = 'http://www.dsf.nl/dfs/design/zoek.php?';
  10. foreach($aCats AS $id => $sCat){
  11. if(isset($_GET[$sCat.'cat']) || $id == 0){
  12. if(isset($_GET[$sCat.'cat'])){
  13. $aSelectedCats = explode(",", $_GET[$sCat.'cat']);
  14. } else {
  15. $aSelectedCats = array();
  16. }
  17. if($id == 0){ // hcat
  18. if(!in_array($row['id'], $aSelectedCats)){
  19. $aSelectedCats[] = $row['id'];
  20. }
  21. } else {
  22. $link .= "&";
  23. }
  24. $link .= $sCat.'cat=';
  25. $link .= implode(",", $aSelectedCats);
  26. }
  27. }
  28. echo '<a href="' . $link . '">' . $row['naam'] . '</a><br />';
  29. }
  30. ?>


Try again..  

--

Ooh, klein foutje. Gaat leuk zo 

--

Heb hem nu ook werkelijk getest, in plaats van uit de losse hand.  
Offline mbeek - 11/05/2009 23:25 (laatste wijziging 12/05/2009 15:17)
Avatar van mbeek Nieuw lid Hallo Medieval,

Het werkt deels,

Stel ik klik op Audi (hcat=11) wordt netjes hcat=11 toegevoegd en als ik er nog een keer op klik dan blijft hij staan. Alleen zou hij dan weg moeten uit de url.

En als ik eerst hcat=11 klik en daarna 12 dan staat er dus inmiddels hcat=12,11 en DAARNA nog een keer 12 klik staat er: hcat=12,12,11

Dus denk dat we nog iets kleins vergeten...

EDIT: >> Moet hij ook nog als je hcat=11,12 hebt, ook weer hcat=11 eruit filteren? zoja, dan moet de code nog een beetje anders.

Je was me voor...ik wacht even af 

EDIT 2:

Medieval, nou gaat het helemaal niet echt lekker ;). Als ik op Audi klik dan gaat hij naar: zoek.php?hcat=11&&

Als ik DAARNA op BMW klik dan gaat hij naar zoek.php?hcat=12&& terwijl zoek.php?hcat=11,12 zou moeten zijn

EDIT3:

Als ik Audi aan klik (of een andere):

Warning: in_array() [function.in-array]: Wrong datatype for second argument in /home/asd/domains/sad.nl/public_html/sad/design/include/left.php on line 82


en als ik ondanks te foutmelding toch op BMW klik krijg je:

hcat=1211,12

Nog niet helemaal lekker 

EDIT4:

Foutmelding wel, maar: als ik audi aanklik: zoek.php?hcat=11 en als ik daarna bmw aanklik --> hcat=1211,12

:(

EDIT5 (08.55 uur) :

Hee Medieval,

Hij doet nu beter . Als ik alleen Audi aanklik krijg ik netjes hcat=11 en als ik daarna BMW aanklik netjes hcat=11,12 en als ik dan nog een keer BMW aanklik komt er niet nog een keer 12 achter te staan.
Dat is goed, maar nu nog 1 klein stapje verder. Als er dus hcat=11,12 staat en als er dan NOG een keer op BMW (12 dus) wordt geklikt, dan moet die uit de hcat=11,12 weg worden gehaald dus dat er hcat=11 overblijft. Snap je??

Ander voorbeeld er staat bijvoorbeeld hcat=13 (mercedes) en ik klik nog een keer op Merceds dat dan gewoon compleet hcat wordt weggehaald. Snap je?

Dus inprincipe, bij de eerste klik "activeer" je een id en bij de tweede klik "de-activeer" je het weer .

Maar we zijn op de goede weg. Misschien dat je hier nog een oplossing voor weet. Bedankt in ieder geval.

EDIT 6:
Nog even een toevoeging op EDIT 5.

Ik heb voor scat en mcat ook het menu toegevoegd, daarbij heb ik gewoon het id op 1 en op 2 gezet in jouw code. Dat gaat opzich goed.

Echter (af en toe) doet hij iets raars. Stel ik klik eerst op hcat=11 en daarna op een scat of mcat , dan krijg je: zoek.php?&hcat=11scat=16

Niet helemaal goed. Als er dat staat en je kiest nogmaals een scat (of mcat), krijg je: zoek.php?&hcat=11scat=16scat=19

Niet helemaal goed he ;)...

Staat er bijvoorbeeld al: zoek.php?&hcat=11scat=16

en je klikt dan nog op een hcat, dan krijg je: zoek.php?hcat=11scat=16,13 (hier voegt hij zelfs een hcat, 13, achter een scat.) helemaal niet goed dus 

Het rare is dat je als je bijvoorbeeld ALS EERSTE een mcat selecteert: zoek.php?mcat=22 en dan een scat of hcat , dan gaat het (nog) goed: zoek.php?scat=16&mcat=22 en dan OPNIEUW een andere mcat erbij, geeft: zoek.php?&scat=16mcat=22,23

Hoop dat je hiermee iets kunt doen...:)
Offline Joost - 12/05/2009 15:45
Avatar van Joost PHP expert Ik kan er best wat mee, maar, heel eerlijk, ik heb ook geen zin om (voor niks) voor jou scripts te schrijven. Ik ben je met dat punt al behoorlijk tegemoet gekomen. Wanneer je wilt dat iemand het voor je maakt, kan je dat aankaarten via Samenwerken.
Offline mbeek - 12/05/2009 15:47 (laatste wijziging 12/05/2009 23:40)
Avatar van mbeek Nieuw lid Hallo Medieval,

Ik waardeer het zeer zeker wat je al voor me gedaan hebt en we zijn al grotendeels op de goede weg. Volgens mij is het een kwestie van wat kleine aanpassingen.

Hoop dat je me daar in tegemoet wilt komen.

Thanks!

EDIT: Hallo Medieval, hoop dat je er nog even naar wilt kijken!
Offline jaronneke - 13/05/2009 08:30
Avatar van jaronneke MySQL interesse
  1. $var1 = $_POST["zoekveld1"];
  2. $var2 = $_POST["zoekveld2"];
  3.  
  4. AND scat = '".$var1."' OR scat = '".$var2."'


Dit moet als het goed is werken?
Offline mbeek - 13/05/2009 10:35 (laatste wijziging 14/05/2009 10:01)
Avatar van mbeek Nieuw lid Medieval,

Ik heb zelf het een en ander geprobeerd. Ik heb nu al het grootste gedeelte klaar.

  1. <?php
  2. ini_set('display_errors', 1); // 0 = uit, 1 = aan
  3.  
  4. $querytest = "SELECT id, naam FROM categorie WHERE cat = '1'";
  5. $resulttest = mysql_query($querytest);
  6.  
  7. $aCats = array('hcat', 'scat', 'mcat');
  8.  
  9. while($row = mysql_fetch_assoc($resulttest))
  10. {
  11. $link = 'zoek.php';
  12. $sign = '?';
  13. foreach($aCats AS $id => $sCat)
  14. {
  15. $aSelectedCats = (isset($_GET[$sCat])) ? explode(",", $_GET[$sCat]) : array();
  16. $aSelectedCats = ($id == 0 and count($aSelectedCats) == 0) ? array($row['id']) : $aSelectedCats;
  17. if(isset($_GET[$sCat]))
  18. {
  19. if(in_array($row['id'], $aSelectedCats))
  20. {
  21. unset($aSelectedCats[array_search($row['id'], $aSelectedCats)]);
  22. }
  23. else
  24. {
  25. $aSelectedCats[] = $row['id'];
  26. }
  27. }
  28. if(count($aSelectedCats) > 0)
  29. {
  30. $link .= $sign . $sCat . '=' . implode(",", $aSelectedCats);
  31. $sign = '&';
  32. }
  33. }
  34. echo '<a href="' . $link . '">' . $row['naam'] . '</a><br />';
  35. }
  36. ?>


Echter is er nu 1 probleem :

Stel ik heb Audi aangeklikt en zit dan dus op zoek.php?hcat=1 en klik daarna de kleur ROOD aan dan gaat hij naar: zoek.php?hcat=1,12&scat=12
Terwijl hij ZOU MOETEN gaan naar: zoek.php?hcat=1&scat=12

Zoals je ziet voegt hij de 12 momenteel ook nog toe aan de hcat. Dat is dus niet goed. Snap je?

Hopelijk kun je dat verhelpen! Thanks!
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.258s