2011-05-21 51 views
1

我有两个元素在我的表单 - textarea和文件元素的文件上传。 我需要两个中的一个不能为空,才能提交表单。 这是我如何检查:一个空的表单元素的PHP测试不起作用

<?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> 

任何想法,为什么形式变得更加有两个字段为空,并没有错误信息被提交呼应? 谢谢!

回答

3

您正在使用逻辑AND(& &)而不是逻辑OR(||)。

if((empty($_POST['text'])) || (empty($_FILES['uploadedfile']))) 

补充:貌似文件数组是有问题的这种方式来检查。试试这个:

if((empty($_POST['text'])) && ($_FILES['uploadedfile']['size'] < 1)) 
+0

的,如果是有关该错误的,不正确的行为。错误是两个都是空的,所以AND是正确的运算符。 – 2011-05-21 02:42:35

+0

哎呦。那么,他们中的一个明显地返回了错误。 textarea很可能在其中有一些(空的空间)。 – 2011-05-21 02:48:13

+0

或不,基于$ _FILES数组的工作方式。查看更新的答案。 – 2011-05-21 02:52:21

0

您可以随时将其用作测试仪if (empty($_POST["text"])^empty($_FILES['uploadedfile']))它使用xor来测试是否设置为true,但不是两者都不是。

1

我会如下

$test = $_POST['test']; 
if(empty($test, $uploadfile) { 
//Do Something 
    } 
1

底部的链接解释好得多,但它的笑话是改写:

空()不能与字符串中使用如果你的变量被设置为字符串值'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