验证因大于值的字符串而失败> INT

时间:2015-06-27 20:07:07

标签: php validation session

如果'我的验证失败了。声明。我的字符串值为" 24"对于我的变量$_SESSION_PLAN_ID (post data),并尝试将其与$plancompare 9 (not a string/DB data)的值进行比较。 24大于> 9 但我的调试输出echo 'burrp 3';永远不会被命中。

                var_dump($_SESSION['SESS_PLAN_ID']);
                echo "</br>";
                if(!empty($_SESSION['SESS_PLAN_ID'])){
                        echo 'burrrp 1';
                        if($_SESSION['SESS_PLAN_ID'] >= 20 || $plancompare >= 20){
                                echo 'burrrp 2';
                                $_SESSION['SESS_DNSSEC'] = 1;
                        }else if($_SESSION['SESS_PLAN_ID'] > $plancompare){
                                echo 'burrrp 3';
                                echo '<br>';
                                $_SESSION['SESS_PLAN_BUY_CODE'] = $_SESSION['SESS_PLAN_ID'];
                        }
                }
                $_SESSION['SESS_PLAN_ID'] = $plancompare;
                var_dump($_SESSION['SESS_PLAN_ID']);
                echo "</br>";
                var_dump($_SESSION['SESS_PLAN_BUY_CODE']);
                echo "</br>";
                var_dump($_SESSION['SESS_DNSSEC']);
                session_write_close();

var_dump()输出:

string(2) "24"
burrrp 1burrrp 2int(9)
int(0)
int(1) 

如何验证字符串24是否大于int 9?

2 个答案:

答案 0 :(得分:0)

如下所示更改条件,您需要在类似的数据类型之间进行压缩: -

if((int)$_SESSION['SESS_PLAN_ID'] >= 20 || $plancompare >= 20){
                                echo 'burrrp 2';
                                $_SESSION['SESS_DNSSEC'] = 1;
                        }else if((int)$_SESSION['SESS_PLAN_ID'] > $plancompare){
                                echo 'burrrp 3';
                                echo '<br>';
                                $_SESSION['SESS_PLAN_BUY_CODE'] = $_SESSION['SESS_PLAN_ID'];
                        }

注意: - 将变量值更改为整数然后进行比较。感谢。

答案 1 :(得分:0)

PHP会自动将数字字符串转换为整数进行比较,不需要单独输入它们。您的代码永远不会因为您的第一个条件始终有效而进入第三次打嗝,因为24将始终大于20 - $_SESSION['SESS_PLAN_ID'] >= 20 - 因此永远不会评估else部分。此外,您的第一个if条件为||,意为OR,因此如果第一部分为真,则第二部分是否为真无关紧要。如果两者都必须为真,请使用&&

除非您在调试之间重置会话,否则行$_SESSION['SESS_PLAN_ID'] = $plancompare;可能会产生另一个问题。如果您将它们设置为相同的值,那么$_SESSION['SESS_PLAN_ID'] > $plancompare将始终为false,因为9 > 9 == false