2011-05-21 50 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