Get variabelen met array vergelijken (Opgelost)
Aquila - 16/06/2008 16:01 (laatste wijziging 16/06/2008 16:55)
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.
$search_query = "SELECT id WHERE cat1 = a OR cat1 = b AND cat2 = a OR cat2= c AND cat3 = a";
$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:
search.php?cat1=a&cat1=b&cat2=a&cat2=c&cat3=a
search. php?cat1= a& cat1= b& cat2= a& cat2= c& cat3= a
Dus samengevat
search.php?cat1=a&cat1=b&cat2=a&cat2=c&cat3=a
search. php?cat1= a& cat1= b& cat2= a& cat2= c& cat3= a
Moet worden:
$search_query = "SELECT id WHERE cat1 = a OR cat1 = b AND cat2 = a OR cat2= c AND cat3 = a";
$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
maigel - 16/06/2008 16:04
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
Rik - 16/06/2008 16:04 (laatste wijziging 16/06/2008 16:07)
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:
$array = explode('&', $_SERVER['QUERY_STRING']);
foreach ($array as $key => $value) {
$array[$key] = end(explode('=', $value));
}
$array = explode ( '&' , $_SERVER [ 'QUERY_STRING' ] ) ; foreach ( $array as $key => $value ) {
}
marten - 16/06/2008 16:07
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.
Aquila - 16/06/2008 16:09
Nieuw lid
Ik wil een manier vinden om zo'n array te krijgen
Array {
[een] => 1,
[twee] => 1,
[twee] => 3,
[vijf] => 1
}
[ een] => 1 ,
[ twee] => 1 ,
[ twee] => 3 ,
[ vijf] => 1
}
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?
Aquila - 16/06/2008 16:44
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.
$search_query = "SELECT id WHERE cat1 = a OR cat1 = b AND cat2 = a OR cat2= c AND cat3 = a";
$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:
search.php?cat1=a&cat1=b&cat2=a&cat2=c&cat3=a
search. php?cat1= a& cat1= b& cat2= a& cat2= c& cat3= a
Dus samengevat
search.php?cat1=a&cat1=b&cat2=a&cat2=c&cat3=a
search. php?cat1= a& cat1= b& cat2= a& cat2= c& cat3= a
Moet worden:
]$search_query = "SELECT id WHERE cat1 = a OR cat1 = b AND cat2 = a OR cat2= c AND cat3 = a";
] $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?
Martijn - 16/06/2008 17:12 (laatste wijziging 16/06/2008 17:14)
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..
$tekst[1]='';
$tekst[2]='';
$tekst[3]='';
if(isset($_GET['cat1'])){
$cat1=explode(",",$_GET['cat1']);
$i=0;
foreach($cat1 as $key=>$value){
if($i!=0){$tekst[1].=" OR ";}
$tekst[1].="cat1 = ".$value;
$i++;
}
}
if(isset($_GET['cat2'])){
$cat2=explode(",",$_GET['cat2']);
$i=0;
foreach($cat2 as $key=>$value){
if($i!=0){$tekst[2].=" OR ";}
$tekst[2].="cat2 = ".$value;
$i++;
}
}
if(isset($_GET['cat3'])){
$cat3=explode(",",$_GET['cat3']);
$i=0;
foreach($cat3 as $key=>$value){
if($i!=0){$tekst[3].=" OR ";}
$tekst[3].="cat3 = ".$value;
$i++;
}
}
$totaaltekst='';
$i2=0;
foreach($tekst as $key=>$value){
if($i2!=0){$totaaltekst.= " AND ";}
$totaaltekst.=$value;
$i2++;
}
if($totaaltekst==''){echo"Geen info";}
else{
mysql_query("SELECT id FROM tabelnaam WHERE "$totaaltekst) or die(mysql_error());
}
$tekst [ 1 ] = '' ;
$tekst [ 2 ] = '' ;
$tekst [ 3 ] = '' ;
if ( isset ( $_GET [ 'cat1' ] ) ) { $i = 0 ;
foreach ( $cat1 as $key => $value ) {
if ( $i != 0 ) { $tekst [ 1 ] .= " OR " ; }
$tekst [ 1 ] .= "cat1 = " . $value ;
$i ++;
}
}
if ( isset ( $_GET [ 'cat2' ] ) ) { $i = 0 ;
foreach ( $cat2 as $key => $value ) {
if ( $i != 0 ) { $tekst [ 2 ] .= " OR " ; }
$tekst [ 2 ] .= "cat2 = " . $value ;
$i ++;
}
}
if ( isset ( $_GET [ 'cat3' ] ) ) { $i = 0 ;
foreach ( $cat3 as $key => $value ) {
if ( $i != 0 ) { $tekst [ 3 ] .= " OR " ; }
$tekst [ 3 ] .= "cat3 = " . $value ;
$i ++;
}
}
$totaaltekst = '' ;
$i2 = 0 ;
foreach ( $tekst as $key => $value ) {
if ( $i2 != 0 ) { $totaaltekst .= " AND " ; }
$totaaltekst .= $value ;
$i2 ++;
}
if ( $totaaltekst == '' ) { echo "Geen info" ; } else {
}
edit: wow, dat werd best wat code
edit2: weet ook niet of het werkt, dit was zo even uit mn hoofd
Aquila - 16/06/2008 17:15
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 ?
Martijn - 16/06/2008 17:16 (laatste wijziging 16/06/2008 17:16)
Crew PHP
$cat1=implode(",",$arrayMetSelects);
$cat1 = implode ( "," , $arrayMetSelects ) ;
Aquila - 16/06/2008 17:19
Nieuw lid
Oké, hartstikke bedankt DeviourSoul. Je hebt me echt enorm geholpen. Nog even wat aanpassen en klaar. Bedankt!
Wim - 16/06/2008 17:24
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
$j = 0;
$cats = array('1', '2', '3');
foreach ($cats as $cat)
{
$j++;
if(isset($_GET['cat'.$cat]))
{
$cat1=explode(",",$_GET['cat'.$cat]);
$i=0;
foreach($cat1 as $key=>$value)
{
if($i!=0)
{
$tekst[$j].=" OR ";
}
$tekst[$j] .= "cat" . $cat . " = " . $value;
$i++;
}
}
}
unset($totaaltekst, $k);
foreach($tekst as $key=>$value){
if ($k!=0)
{
$totaaltekst .= " AND ";
}
$totaaltekst .= $value;
$k++;
}
if(empty($totaaltekst))
{
echo ("Geen info");
}
else
{
mysql_query("SELECT id FROM tabelnaam WHERE "$totaaltekst) or die(mysql_error());
}
$j = 0 ;
$cats = array ( '1' , '2' , '3' ) ;
foreach ( $cats as $cat )
{
$j ++;
if ( isset ( $_GET [ 'cat' . $cat ] ) ) {
$cat1 = explode ( "," , $_GET [ 'cat' . $cat ] ) ; $i = 0 ;
foreach ( $cat1 as $key => $value )
{
if ( $i != 0 )
{
$tekst [ $j ] .= " OR " ;
}
$tekst [ $j ] .= "cat" . $cat . " = " . $value ;
$i ++;
}
}
}
foreach ( $tekst as $key => $value ) {
if ( $k != 0 )
{
$totaaltekst .= " AND " ;
}
$totaaltekst .= $value ;
$k ++;
}
{
}
else
{
}
Die is wat opgevrolijkt en wat dynamischer ;)
Gesponsorde links
Dit onderwerp is gesloten .