我正在编写的PHP脚本中发生了一件奇怪的事情。我有一个相当大的表单,有很多字段、复选框、单选按钮等。
在处理脚本中,有很多重复的代码,我检查字段是否已设置,如果已设置,则它会输出基于该字段的句子。
我用来处理字段的代码是:
if(isset($_POST['testresults'])) { // test results Info
$testresults = $_POST['testresults'];
echo $clientInitials . " test results are " . $testresults . ". ";
}
现在,出于某种原因,在40多个与此相同的块中(只有不同的变量和句子输出),有两个块即使在字段为空/未设置时也会执行。作为测试,我将相同的代码块复制到一个新的PHP文件中,它具有相同的行为,但这是一个块的精确副本,除了字段/变量名之外,它可以正常工作。我从表格中删去了字段名,以确保没有拼写错误或其他什么。作为另一个测试,如果我将行更改为if(!isset($_POST['testresults']),那么它会像应该的那样跳过该块。因此,它的反应就好像该字段中有数据一样,即使没有(它也会对其他1个块这样做)。字段名/变量也没有在脚本中的其他地方使用,我通过对文件进行搜索来验证这一点。
表单字段为:
<input type="text" name="testresults" value="">
我已经尝试过使用和不使用"value"参数,但没有任何更改。所有其他正确工作的都有value="。
我试过清除浏览器缓存,但没有什么区别,仍然会有这种奇怪的行为。
所以我想我只是想知道使用isset()是否有限制,或者我遗漏了什么?
isset()
只会检查是否设置了值,而不会检查值是否为空,这就是为什么它更常用于检查表单是否实际提交,或者检查$_GET变量。您应该使用的函数是empty()
,或者在您的情况下是!empty()
,如下所示:
if(!empty($_POST['testresults'])) { // test results Info
$testresults = $_POST['testresults'];
echo $clientInitials . " test results are " . $testresults . ". ";
}