php strpos没有正确评估?

时间:2013-02-19 14:46:18

标签: php codeigniter

所以我在这篇文章中遇到了类似的问题:PHP strpos not working,但并不完全。

这是我的情况(来自CodeIgniter应用程序):

$_submit = strtolower($this->input->post('form-submit'));

if(strpos('save', $_submit) !== FALSE){
    // we have to save our post data to the db
}
if(strpos('next'), $_submit) !== FALSE){
    // we have to get the next record from the db
}

问题是,尽管表单提交包含一个或两个值,但这些都不会触发。表单提交接收的值是:'save','save-next'和'skip-next'(我已经通过查看帖子数据来确认)。现在对于真正的头部刮擦器,我也在相同的代码块中有这一行:

if ($_submit === 'add-comment'){
    //do something
}

这完全没问题。所以===按预期工作,但是!==不是吗?

3 个答案:

答案 0 :(得分:4)

你给strpos函数错误的参数.......

$submit = strtolower($this->input->post('form-submit'));

if(strpos($submit,'save') !== FALSE){
    // we have to save our post data to the db
}
if(strpos($submit,'next') !== FALSE){
    // we have to get the next record from the db
}

请查看php.net手册中的strpos函数....第一个参数是完整字符串,第二个是密钥字符串

您也可以在这里找到一个小example

答案 1 :(得分:2)

你对strpos的论证是错误的:因为the manual statesstrpos ( string $haystack , mixed $needle )。在您的代码中,您正在寻找大海捞针$_submit中的针'save'

所以if(strpos($_submit, 'save') !== FALSE)

[当然,在针对'save'测试'save'时,无论哪种方式都可行,这可能让您感到困惑。]

答案 2 :(得分:1)

如果条件允许,我建议使用switch而不是multiple。

$_submit = strtolower($this->input->post('form-submit'));

switch($_submit) {
    case 'save':
    case 'save-comment': // example for different spelling but same action...
         // we have to save our post data to the db
    break;
    case 'next':
         // we have to get the next record from the db
    break;
    case 'add-comment':
         // we have to save our post data to the db
    break;
    default:
        die('Unknown parameter value');
    break;
}