2011-04-12 35 views
0

我正在使用下面的代碼以HTML $ _POST vars [type:text]代表最小价格&,清理並去除「$」和「 ,「,將它們提交到$ _SESSION,然後將它們用於針對類型爲」Float「的列中的數據的MySQL查詢。的代碼如下...PHP不分析1000,10000,100000等**修復**

//The locale I'm using 
setlocale(LC_ALL, 'en_US.UTF8'); 

//The minimum price is handled 
//Sanitized POST var to SESSION var 
$_SESSION['minprice'] = filter_var($_POST['minprice'], FILTER_SANITIZE_STRIPPED); 
// Strip currency symbol and commas 
$_SESSION['minprice'] = str_replace(array(',','$'),array('',''),$_SESSION['minprice']); 
//SESSION var to local float var for SQL query 
$minprice = floatval($_SESSION['minprice']); 

//The same is done for the maximum price 
//Sanitized POST var to SESSION var 
$_SESSION['maxprice'] = filter_var($_POST['maxprice'], FILTER_SANITIZE_STRIPPED); 
// Strip currency symbol and commas 
$_SESSION['maxprice'] = str_replace(array(',','$'),array('',''),$_SESSION['maxprice']); 
//SESSION var to local float var for SQL query 
$maxprice = floatval($_SESSION['maxprice']); 

//The SQL query 
$sql = 'SELECT * FROM tablename WHERE '; 
$sql .= "zip like '$searchzip%' "; //Ignore this 
$sql .= "&& sellprice >= '$minprice' "; 
$sql .= "&& sellprice <= '$maxprice' "; 
$sql .= "ORDER BY id DESC"; 

$ minprice和$ maxprice進行比較,以從MySQL表中的值,並將結果相應的處理,基本上$ minprice < = $ sellprice < = $ maxprice。

對於變量$ sellprice = 12.01,下面的搜索查詢會從MySQL數據庫返回行:

下返回的行奇妙。
($ minprice,$ maxprice)
0,13
0.00,13.00
$ 0.00,$ 13.00
$ 10.00 $ 12.02
$ 0.00,$ 12111
$ 0.00,$八二七一一

下面將不返回行,不知道爲什麼。
($ minprice,$ maxprice)
0,100
0,1000 - 1000000超越
0,1000 - 1000000,超越
0,111 //我以爲那只是用0或逗號的問題被解析不正確
$ 0.00 $ 113 - $ 111111及以後
10,11112 //注意12111個返回行上述

我必須在這裏失去了一些東西,可能是一些基本的和愚蠢的。我非常感謝人們願意給予的任何幫助,謝謝。

如果你想看看網站本身的網址是http://listing.dyndns.org,這沒什麼特別的,但它是我的初學者項目。

編輯0:目前只有一個商品列表,請在99208郵政編碼中進行搜索。

EDIT1:所用的表達 '選擇從表名id其中sellprice> = 0 & & sellprice < = 111111.11;'並且它返回所有正確的行,所以我知道數據庫中的數據是正確的。必須是我的PHP。

Edit2:看起來只有數字在第一個逗號或十進制之前的數字正在對數據庫中的內容進行評估。我很迷茫。

修正:閱讀關於在FLOAT列而不是DECIMAL列中創建故事貨幣值時發生的不良情況的精彩文章。將列類型更改爲DECIMAL(9,2)並使用(int)顯式強制轉換PHP變量。現在這些值可以完美存儲,並且對數據庫值進行比較操作的效果很好。希望這對某人有用。

回答

0

setlocale在php 5.3下不推薦,並且在返回false時不起作用!