我的表单上有两个元素 - textarea和文件元素,用于文件上传。 我需要两个中的一个不为空,以便提交表单。 我是这样检查的:
<?php
$text = $_POST['text'];
$uploadedfile = $_FILES['uploadedfile'];
if (isset($_POST['submit'])) {
if((empty($_POST['text'])) && (empty($_FILES['uploadedfile']))) {
$errors .= 'Please either enter your text or attach a file.<br/><br/>';
}
}
if (!$errors) { do some code...
header("Location: http://mysite.com/mysite/submitted.html");
}
else {
echo '<div style="color: red; font-weight: bold; text-align: center"> The form was not sent. Some data is missing:<br />' . $errors . '<br/>
</div>';
}
}
?>
这是我的HTML:
<form id="form" action="quot_form.php" method="post" enctype="multipart/form-data">
<p>
<textarea rows="15" cols="50" name="text"><?php echo $text?></textarea>
</p>
<p class = "upload">
<input type="file" class="file" name="uploadedfile" />
</p>
</form>
知道为什么表单会被提交,即使两个字段都为空并且没有错误消息得到回应? 谢谢!
答案 0 :(得分:3)
您使用逻辑AND(&amp;&amp;)代替逻辑OR(||)。
if((empty($_POST['text'])) || (empty($_FILES['uploadedfile'])))
补充:看起来像文件数组有问题以这种方式检查。试试这个:
if((empty($_POST['text'])) && ($_FILES['uploadedfile']['size'] < 1))
答案 1 :(得分:1)
我会按如下方式重写它
$test = $_POST['test'];
if(empty($test, $uploadfile) {
//Do Something
}
答案 2 :(得分:1)
底部的链接解释得更好,但它的笑话是:
empty()不能与字符串变量一起使用,因为如果你的变量被设置为字符串值'0',则empty()返回true的简单事实。如果字符串字符“0”是字符串变量的可能有效值 - 如果所有非零长度字符串都有效 - 则不能使用empty()。如果使用empty()来检查是否定义了字符串变量,则更加危险。另外值得一提的是,empty()为一个字符串值返回false,该字符串值只是一个空格(或者实际上是任意数量的空格)。
你不能简单地用一个条件来替换empty()的用法,该条件检查字符串变量是否等于null或者字符串长度为零。如果您的字符串变量恰好是未定义的,则empty()将静默返回true,而strlen($ mystring)和$ mystring == null将抛出PHP警告。如果您的变量可能未定义,则必须首先检查变量是否使用isset()定义。之后,您可以检查字符串是否为空。
答案可以在这里找到: http://www.zachstronaut.com/posts/2009/02/09/careful-with-php-empty.html
答案 3 :(得分:0)
你可以随时使用它作为测试者if (empty($_POST["text"]) ^ empty($_FILES['uploadedfile']))
它使用xor,它测试是否设置为true,但不是两者,或两者都没有。