0

所以我遇到了与这篇文章类似的问题: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
}

问题是,尽管 form-submit 包含其中一个或两个值,但这些都不会真正触发。form-submit 收到的值是:'save'、'save-next' 和 'skip-next'(我通过查看传入的帖子数据确认了这一点)。现在对于真正的头抓狂,我在同一个代码块中也有这一行:

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

这工作得很好。所以 === 按预期工作,但 !== 不是?

4

3 回答 3

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函数....第一个参数是完整字符串,第二个参数是键字符串

你也可以在这里找到一个小例子

于 2013-02-19T14:53:23.340 回答
2

你的论点是strpos错误的方式:正如手册所述strpos ( string $haystack , mixed $needle )$_submit在您的代码中,您正在大海捞针中寻找针'save'

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

[当然,在针对 进行测试'save''save',任何一种方式都可以,这可能会让您感到困惑。]

于 2013-02-19T14:53:46.887 回答
1

我建议使用 switch 而不是多个 if 条件。

$_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;
} 
于 2013-02-19T14:53:13.470 回答