0

まず、これはここでかなり頻繁に尋ねられる重複した質問であることを知っていますが、これらの回答を熟読しましたが、コードの何が問題なのかまだわかりません。私は PHP にかなり慣れていませんが、これは非常に簡単で初心者でも達成できると 99% 確信しています。

コードは次のとおりです。

    $validProgram = 0;
$validProgramCodes = array('ITFZ', 'ITFC', 'ITFP', 'ITFE', 'ITFL', 'ITFS',
                           'ITFF', 'ITFM', 'ITFT', 'IEME', 'ISMK', 'IPKT');

if ( isset( $_GET[ 'category' ] ) && isset( $_GET[ 'subcategory' ] )
    && $_GET[ 'category' ] != '' && $_GET[ 'subcategory' ] != '' )
{
    $selectedSchool = $_GET[ 'category' ];
    $selectedProgram = $_GET[ 'subcategory' ];
    $selectedSchool = prepString( $selectedSchool );
    $selectedProgram = prepString( $selectedProgram );

    foreach ( $validProgramCodes as $temp )
    {
        if ( $temp == $selectedProgram )
        {
            $validProgram ++;
        }
    }

    if ( $validProgram == 1 )
    {
        echo "success!";
    }
    else if ( $validProgram !== 1)
    {
        echo "failure!";
    } 
}

}

さて...何らかの理由で、$selectedProgram に何が提供されても、検証チェックは失敗ステートメントをエコーアウトします。これは非常に単純なコードなので、明らかに明白なことだと思いますが、ざっと見てみるにはもう 1 組の目が必要だと思います。:)

助けてくれてありがとう!

4

3 に答える 3

6

if ( $validProgram = 1 ) に値1割り当て$validProgramます。この代入は を返す1ため、ステートメントは常にパスします。

if ( $validProgram == 1 )等しいかどうかをテストしてみてください。

in_arrayとにかく、ブロック全体を見ると、これの多くを 1 つのチェックに圧縮して、foreachループと$validProgram変数を完全に削除しているように見えます。

$selectedProgram = prepString( $selectedProgram );

if(in_array($selectedProgram, $validProgramCodes))
{
    echo "success!";
}
else
{
    echo "failure!";
}
于 2012-07-24T18:29:46.770 に答える
2

あなたが持っている:

if ( $validProgram = 1 ) 

そのはず:

if ( $validProgram == 1 ) 

そうしないと、常に に 1 が代入され$validProgram、' が返されTRUEます。

于 2012-07-24T18:30:40.740 に答える
0

を使う方法もありRegExpます。

$codeIsValid = preg_match('/^('.implode('|', $validProgramCodes).')$/i', $programCodeToCheck);

if ($codeIsValid)
  echo 'Valid';
else
  echo 'Not Valid';

注: 大文字と小文字を区別しない一致が可能です!

または、以前に提案されたように使用しますが、コード (有効なコードと照合する) を 1 つのケースにin_array()導きます。

$programCodeToCheck = strtoupper($programCodeToCheck); // leading string to the case that validCodes are
$codeIsValid = in_array($selectedProgram, $validProgramCodes); // testing array for possible match
于 2012-07-24T20:04:14.980 に答える