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 提供什么,验证检查都会回显失败声明。这是非常简单的代码,所以我确信它非常明显,但我想我只需要另一双眼睛快速浏览一下。:)

感谢您的任何帮助!

4

3 回答 3

6

if ( $validProgram = 1 ) 值分配1$validProgram。这个赋值返回1,所以语句总是通过。

尝试if ( $validProgram == 1 )测试是否相等。

无论如何,查看整个块,看起来您将其中的很多内容压缩为一次in_array检查,完全删除了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';

注意:可以进行不区分大小写的匹配!

或如先前建议的使用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 回答