首先,我知道这是一个重复的问题,在这里经常被问到,但是我已经仔细研究了这些答案,但仍然无法弄清楚我的代码有什么问题。我对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提供什么,验证检查都会回复失败声明。这是非常简单的代码,所以我确信这是明显的,但我想我只需要另外一双眼睛快速浏览一下。 :)
感谢您的帮助!
答案 0 :(得分:6)
if ( $validProgram = 1 )
将值1
分配给$validProgram
。1
。此赋值返回if ( $validProgram == 1 )
,因此语句始终通过。
尝试foreach
来测试是否相等。
无论如何,查看整个块,看起来您将大量此内容压缩为单in_array
项检查,完全删除$validProgram
循环和$selectedProgram = prepString( $selectedProgram );
if(in_array($selectedProgram, $validProgramCodes))
{
echo "success!";
}
else
{
echo "failure!";
}
变量:< / p>
{{1}}
答案 1 :(得分:2)
你有:
if ( $validProgram = 1 )
应该是:
if ( $validProgram == 1 )
否则,您总是将{1}分配给$validProgram
,这将返回TRUE
'。
答案 2 :(得分: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