所以我在这篇文章中遇到了类似的问题: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
}
这完全没问题。所以===按预期工作,但是!==不是吗?
答案 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 states是strpos ( 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;
}