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関数を調べてください....最初の引数は完全な文字列で、2 番目の引数はキー文字列です

ここでも小さなを見つけることができます。

于 2013-02-19T14:53:23.340 に答える
2

へのあなたの議論strposは間違った方法です:マニュアルに記載されているようにstrpos ( string $haystack , mixed $needle ). あなたのコード$_submitでは、 haystack で針を探しています'save'

そうif(strpos($_submit, 'save') !== FALSE)

[もちろん、'save'に対してテストするときは'save'、どちらの方法でも機能しますが、それがおそらくあなたを混乱させます。]

于 2013-02-19T14:53:46.887 に答える
1

複数の if 条件ではなく、switch を使用することをお勧めします。

$_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 に答える