ユーザーが指定した価格範囲内で製品を検索できる検索フォームがあります。ここで、2 つの入力ボックスがあります。1 つは開始範囲用で、もう 1 つは終了範囲用です。
データベース テーブルに 3 つの製品ストアがあります。価格2300.0000
、1200.0000
、1000.5000
それぞれ。
入力された価格範囲内の値を選択するのに問題があります。問題は、次のような値を入力すると
100
開始範囲から1100
終了範囲まで。商品のみではなくと が付い1200.0000
ている商品が表示されてい ます。1000.5000
1000.5000
0
開始範囲から1100
終了範囲または1000.50
終了範囲。商品のみではなくと が付い1200.0000
ている商品が表示されています。1000.5000
1000.5000
1100
開始範囲。2300.0000
と の両方ではなく2300.0000
、の製品のみが表示されています1200.0000
。しかし、開始値が以下の場合500
、3 つの製品すべてが表示されています。
これは私が使用しているコードです。
function db_prepare_input($string)
{
if (is_string($string)) {
return trim(stripslashes($string));
} elseif (is_array($string)) {
reset($string);
while (list($key, $value) = each($string)) {
$string[$key] = db_prepare_input($value);
}
return mysql_real_escape_string($string);
} else {
return mysql_real_escape_string($string);
}
}
$pricefrom_key = db_prepare_input(number_format($_GET['pricefrom'], 4, '.', ''));
$priceto_key = db_prepare_input(number_format($_GET['priceto'], 4, '.', ''));
// Price Range
if (!empty($_GET['pricefrom']) && !empty($_GET['priceto'])) {
$price_range = " having price >= ".$pricefrom_key." and price <= ".$priceto_key;
}
elseif(empty($_GET['pricefrom']) && !empty($_GET['priceto']))
{
$price_range = " having price >= 0 and price <= ".$priceto_key;
}
elseif(!empty($_GET['pricefrom']) && empty($_GET['priceto']))
{
$price_range = " having price >= ".$pricefrom_key;
}
elseif(!empty($_GET['pricefrom']) && !empty($_GET['priceto']))
{
$price_range = "";
}
$catglobal_sql = "select p.blog_id, p.global_category_id, p.products_id, p.products_currency, p.products_type, p.products_name, p.products_description, p.products_quantity, p.products_model, p.products_image, p.products_price, p.products_date_added, p.products_last_modified, p.products_date_available, p.products_weight, p.products_status, p.products_tax_class_id, p.manufacturers_id, p.products_ordered, p.specials_new_products_price, p.specials_date_added, p.specials_last_modified, p.expires_date, p.date_status_change, p.status, p.display_product, case when (p.specials_new_products_price > 0 or p.specials_new_products_price != 0000-00-00 and p.expires_date > Now() and p.status != 0) then p.specials_new_products_price else p.products_price end price from ".TABLE_GLOBAL_PRODUCTS." p INNER JOIN ".TABLE_STORES." s ON s.blog_id = p.blog_id where MATCH (p.products_name,p.products_description) AGAINST ('%".$search_key."%') OR p.products_name like '%".$search_key."%' and s.countries_id = '168' ".$search_cat." and p.display_product = '1' and p.products_status = '1' ".$price_range." order by p.products_date_added DESC, p.products_name";
追加die($catglobal_sql);
してみましたが、結果は、
select p.blog_id, p.global_category_id, p.products_id, p.products_currency, p.products_type, p.products_name, p.products_description, p.products_quantity, p.products_model, p.products_image, p.products_price, p.products_date_added, p.products_last_modified, p.products_date_available, p.products_weight, p.products_status, p.products_tax_class_id, p.manufacturers_id, p.products_ordered, p.specials_new_products_price, p.specials_date_added, p.specials_last_modified, p.expires_date, p.date_status_change, p.status, p.display_product, case when (p.specials_new_products_price > 0 or p.specials_new_products_price != 0000-00-00 and p.expires_date > Now() and p.status != 0) then p.specials_new_products_price else p.products_price end price from wp_global_products_table p INNER JOIN wp_blogs s ON s.blog_id = p.blog_id where MATCH (p.products_name,p.products_description) AGAINST ('%cotton%') OR p.products_name like '%cotton%' and s.countries_id = '168' and p.products_currency = 'php' and p.display_product = '1' and p.products_status = '1' and p.products_type = 'a' having price >= 0 and price <= 1200.0000 order by p.products_date_added DESC, p.products_name
問題に見えるのは??