2010-10-25 55 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']以查看是否回传?额外的新线路可能会搞砸了。您可以尝试添加最小长度。