Okay nu doet hij (bijna) alles wat ik wil :D.
Hiermee kann ik of op keyword1 of op keyword2 zoeken.
<?php
if ((!empty ($_GET['keywords']) && xtc_not_null($_GET['keywords'])) && (!empty ($_GET['keywords2']) && xtc_not_null($_GET['keywords2']))) {
$where_str .="((pov.products_options_values_name LIKE '%".$keywords."%' AND pov.products_options_values_id = 3 )";
$where_str .="OR(pov.products_options_values_name LIKE '%".$keywords2."%' AND pov.products_options_values_id = 1 ))";
}
?>
Alleen kan ik geen resultaten verkrijgen waar alleen $keywords EN $keywords2
erin zijn.Verander ik OR in AND vind hij niets,terwijl de waarden er wel in de tabel staan.
Zo verkeerd kan ik toch niet bezig zijn,anders zou hij het met een "OR" niet goed werken.
Ik weet het nu even niet meer,ziet iemand wat ik fout doe?
Of moet ik meer aanvullende informatie plaatsen?
$where_str = " WHERE p.products_status = '1' AND (pd.language_id = '".(int) $_SESSION['languages_id']."'".$subcat_where.$fsk_lock.$manu_check.$group_check.$tax_where.$pfrom_check.$pto_check." AND (pd.products_keywords LIKE ('%".addslashes($keywords)."%') OR pd.products_description LIKE ('%".addslashes($keywords)."%') OR pd.products_short_description LIKE ('%".addslashes($keywords)."%') OR pd.products_name LIKE ('%".addslashes($keywords)."%') OR p.products_model LIKE ('%".addslashes($keywords)."%') OR (pov.products_options_values_name LIKE ('%".addslashes($keywords)."%') AND pov.language_id = '".(int) $_SESSION['languages_id']."'))) GROUP BY p.products_id ORDER BY p.products_id ";
Hij doet het, maar hiermee : ".$subcat_where.$fsk_lock.$manu_check.$group_check.$tax_where.$pfrom_check.$pto_check."
heb ik inderdaad nog problemen.
Dit is ook inderdaad het gedeelte dat ik nog niet zo goed snap.
Op bijvoorbeeld price (.$tax_where.$pfrom_check.$pto_check.) zoeken lukt nu alleen als ik ook een keyword ($keywords) heb ingegeven.
Alleen op price zoeken geeft hij alles aan.
Josh: SELECT heb ik al in een andere variabel , die ik dan met $where_str samen plak.
Klastian: Helpt mij dan jou advies?Hoe schrijf ik dit stuk dan op een goede manier met mijn voorbeeld?
Dit is leesbaar, die teringzooi van jou kan niemand wat mee. Ook jij niet, dat blijkt wel door het feit dat er mee in de knoop zit... Dat is overigens een bekend probleem van spagetti. ;)
<?php
$where_str = " WHERE p.products_status = '1'
AND (pd.language_id = '".(int) $_SESSION['languages_id']."'
".$subcat_where.$fsk_lock.$manu_check.$group_check.$tax_where.$pfrom_check.$pto_check."
AND (pd.products_keywords LIKE ('%".addslashes($keywords)."%')
OR pd.products_description LIKE ('%".addslashes($keywords)."%')
OR pd.products_short_description LIKE ('%".addslashes($keywords)."%')
OR pd.products_name LIKE ('%".addslashes($keywords)."%')
OR p.products_model LIKE ('%".addslashes($keywords)."%')
OR (pov.products_options_values_name LIKE ('%".addslashes($keywords)."%')
OR pov.products_options_values_name LIKE ('%".addslashes($keywords2)."%')
AND pov.language_id = '".(int) $_SESSION['languages_id']."')))
GROUP BY p.products_id ORDER BY p.products_id ";
?>
Okay is het zo beter?Het gaat mij alleen om het WHERE - gedeelte.
Mijn probleem is nog steeds dat hij niet ook op $keywords2 zoekt.
Vervang ik wel alle $keywords met $keywords2 dan doet het tweede invoervakje ($keywords2) het wel ( en het eerste natuurllijk niet).
Ik ben niet erg ervaren in php en mysql, maar ik zie nergens waarom
het niet zou werken!
<?php
$where_str = " WHERE p.products_status = '1'
AND (pd.language_id = '".(int) $_SESSION['languages_id']."'
".$subcat_where.$fsk_lock.$manu_check.$group_check.$tax_where.$pfrom_check.$pto_check."
AND (pd.products_keywords LIKE ('%".addslashes($keywords)."%')
OR pd.products_description LIKE ('%".addslashes($keywords)."%')
OR pd.products_short_description LIKE ('%".addslashes($keywords)."%')
OR pd.products_name LIKE ('%".addslashes($keywords)."%')
OR p.products_model LIKE ('%".addslashes($keywords)."%')
OR (pov.products_options_values_name LIKE ('%".addslashes($keywords)."%')
OR pov.products_options_values_name LIKE ('%".addslashes($keywords2)."%')
AND pov.language_id = '".(int) $_SESSION['languages_id']."')))
GROUP BY p.products_id ORDER BY p.products_id ";
?>
Nee ik heb het niet geschreven,eerst zag het er zo uit:
<?php
//where-string
$where_str = " WHERE p.products_status = '1' "." AND pd.language_id = '".(int) $_SESSION['languages_id']."'".$subcat_where.$fsk_lock.$manu_check.$group_check.$tax_where.$pfrom_check.$pto_check;
//go for keywords... this is the main search process
if (isset ($_GET['keywords']) && xtc_not_null($_GET['keywords'])) {
if (xtc_parse_search_string(stripslashes($_GET['keywords']), $search_keywords)) {
$where_str .= " AND ( ";
for ($i = 0, $n = sizeof($search_keywords); $i < $n; $i ++) {
switch ($search_keywords[$i]) {
case '(' :
case ')' :
case 'and' :
case 'or' :
$where_str .= " ".$search_keywords[$i]." ";
break;
default :
$where_str .= " ( ";
$where_str .= "pd.products_keywords LIKE ('%".addslashes($search_keywords[$i])."%') ";
if (SEARCH_IN_DESC == 'true') {
$where_str .= "OR pd.products_description LIKE ('%".addslashes($search_keywords[$i])."%') ";
$where_str .= "OR pd.products_short_description LIKE ('%".addslashes($search_keywords[$i])."%') ";
}
$where_str .= "OR pd.products_name LIKE ('%".addslashes($search_keywords[$i])."%') ";
$where_str .= "OR p.products_model LIKE ('%".addslashes($search_keywords[$i])."%') ";
if (SEARCH_IN_ATTR == 'true') {
$where_str .= "OR (pov.products_options_values_name LIKE ('%".addslashes($search_keywords[$i])."%') ";
$where_str .= "AND pov.language_id = '".(int) $_SESSION['languages_id']."')";
}
$where_str .= " ) ";
break;
}
}
$where_str .= " ) GROUP BY p.products_id ORDER BY p.products_id ";
}
}
?>
Ik heb hem ingekort om het beter te snappen, zodat ik een tweede zoekword ($keywords2) kan inbouwen.
En ja ik heb nu wel gezien dat hier een haakje te veel is, maar dat helpt nu nog niet.
<?php
AND pd.language_id = '".(int) $_SESSION['languages_id']."'
".$subcat_where.$fsk_lock.$manu_check.$group_check.$tax_where.$pfrom_check.$pto_check."
?>
Op prijs kan IK nu trouwens ook goed zoeken,dus dat zit wel goed.