2010-10-25 82 views
1

我的腳本不應該讓HTML表單被提交,除非用戶將一些數據輸入到textarea控件中。但是,表單無論如何都會被提交,並且不會顯示用戶的消息。 任何人都可以看到我做錯了什麼?Textarea驗證

這裏是我的HTML:

<textarea name="description" id="description" rows = "4" cols = "25"> 
    <?php echo $description?> 
    </textarea> 

對於PHP,這也不:

if ($_POST['description'] == "") { 
      $errors .= 'Please enter a description of your invention.<br/><br/>'; 
     } 

或本:

if (empty($_POST['description'])) { 
      $errors .= 'Please enter a description of your invention.<br/><br/>'; 
     } 

工作。

+0

發佈完整的腳本與相關部分 – 2010-10-25 16:21:22

回答

8

這是因爲文本區不是空的!請注意,您在<之前放置了一個選項卡?php echo $ description? >,這意味着至少文本區域將始終包含一個選項卡。

更改您的驗證代碼是這樣的:

if (trim($_POST['description']) == "") { 
+0

實際上,您的文本區域可能包含換行符,選項卡和另一個新行。 – mellowsoon 2010-10-25 16:25:04

+2

是的,要麼完全刪除空白,要麼將其修剪到數據庫中,否則每次編輯描述時都會獲得越來越多的前導/尾隨空白。 (注意你也需要'htmlspecialchars()'來覆蓋'$ description',以避免HTML注入導致潛在的XSS安全問題。) – bobince 2010-10-25 16:34:14

+0

@bobince關於提及使用htmlspecialchars的好消息。 – mellowsoon 2010-10-25 16:39:29

0

在您的形式提出:

<form onsubmit = "return checkSubmit()"> 

然後,在JavaScript的地方:

function checkSubmit(){ 
    if (form good) 
    return true; 
    else 
    return false; 
} 
+0

危險,永遠不要相信客戶端驗證! – joni 2010-10-25 16:24:30

+0

在哪裏你可以用適當的代碼替換'form good',順便說一句。 – 2010-10-25 16:24:31

0

你有<textarea>標籤之間的一些空白。您是否嘗試過輸出$_POST['description']以查看是否回傳?額外的新線路可能會搞砸了。您可以嘗試添加最小長度。