PHP无法解析1000,10000,100000等**固定**

时间:2011-04-12 04:06:32

标签: floating-point php-5.3

我使用以下代码来获取代表min&的HTML $ _POST vars [type:text]最大价格,清理并剥离“$”和“,”,将它们提交给$ _SESSION,然后将它们用于针对“Float”类型列中的数据的MySQL查询。代码如下......

//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&lt; = $ sellprice&lt; = $ 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,$ 82711

以下不会返回行,不知道原因。 ($ minprice,$ maxprice)
0,100
0,1000 - 1000000及以上
0,1,000 - 1,000,000及以上
0,111 //我认为只是0或者逗号被解析不正确的问题 $ 0.00,$ 111 - $ 111111及以上
10,11112 //注意12111返回

以上的行

我必须在这里遗漏一些东西,可能是一些根本和愚蠢的东西。我非常感谢人们愿意给予的任何帮助,谢谢。

如果您想查看网站本身的网址是http://listing.dyndns.org,这没什么特别的,但这是我的初学者的项目。

编辑0:目前只有一个商家信息,请在99208邮政编码中搜索。

Edit1:使用表达式'select table from tablename where sellprice&gt; = 0&amp;&amp;卖出价&lt; = 111111.11;'它返回所有正确的行,所以我知道数据库中的数据是正常的。一定是我的PHP。

编辑2:看起来只有第一个逗号或小数之前的数字正在根据数据库中的内容进行评估。我迷路了。

修正:在这里阅读一篇很棒的文章,了解在FLOAT专栏而不是DECIMAL专栏中讲述货币价值时出现的不良情况。将列类型更改为DECIMAL(9,2)并使用(int)显式转换PHP变量。现在值完全存储,并且对数据库值进行比较操作非常有效。希望这对某人有用。

1 个答案:

答案 0 :(得分:0)

setlocale在php 5.3下已弃用,并且在返回false时无效!