PHP:使用isset验证具有必填文本字段的表单

时间:2012-04-12 14:11:21

标签: php validation isset

我一直在尝试设置一些可以检查HTML表单的内容,以确保在提交表单之前输入的文本字段至少输入了1个字符(到下一页)。

HTML表单在一个页面上,并流向第二页。第二页然后更新文本文件。一切正常,所以我不想改变它。但我需要的是验证器。

我搜索并阅读了大量建议,看过使用ISSET的一些建议,并完成了下面的脚本。

但这不起作用(因为表单总是提交/没有错误消息)。我已经厌倦了许多其他建议(根据我读过的其他教程)。但似乎无论文本字段是否为空,表单仍将始终提交。 (下一页上有一个时间戳,所以我可以告诉提交的内容。

有人能告诉我Iss​​et是否适用于这种情况?如果是这样,我错了。或者如果没有,我可以使用什么来获取文本字段的验证器。我宁愿使用PHP,但如果我需要使用Javascript,那是可能的。

(补充:我认为问题在于,即使出现以下$错误消息,它也永远不会显示,因为页面会通过提交按钮自动重定向。我需要它与事件处理程序类似 - 例如,如果单击按钮提交,请检查错误。如果有错误,请打印出来。如果没有,请提交表单。此代码不会这样做。)

第1页代码。

<?php
if (isset($_POST['submit'])) {
    $error = '';
    if (trim($_POST['topic']) == '') {
        $error = "Please enter a topic<br>");
    }
    if (trim($_POST['outline']) == '') {
        $error = "Please enter an outline<br>";
    }
    if ($error == '') {
        Echo "There are no errors";
    } else {
        echo "$error";
    }
}
?>
<form style="" method="post" action="addtopic2.php">
    Topic:<input name="topic" id="topicbox" maxlength="100" type="text">
    Outline: <textarea input wrap="nowrap" rows="10" cols="120" name="outline">
</textarea><br><input name="submit" value="Submit" type="submit">
</form>

代码

 <?php
 $b = time (); 
 $c = date("g:i:s A D, F jS Y",$b);
 print "Topic and Outline Submitted at $c";

 $t = "Topic:";
 $o = "Outline:";
 $d = "Time Date:";

 $topic = $_POST['topic'];
 $outline = $_POST['outline'];

 $data = stripslashes("$t $topic | $o $outline | $d $c |\n");

 $fh = fopen("users.txt", "a");
 fwrite($fh, $data); 
 fclose($fh); 
 ?>

4 个答案:

答案 0 :(得分:1)

您是否尝试过if((is_array($_POST)) && (!empty($_POST)) {...}

最好使用empty($var)代替$var == ''!empty($var)代替$var != ''

示例:

<?php
    function arTrim (&$item , $keys) { //trims the string and makes it safe
        if (!is_array($item))
            $item = trim(htmlspecialchars($item));
    }

    array_walk($_POST, 'arTrim'); //apply this to each element in the our POST array


    if((is_array($_POST)) && (!empty($_POST)) {
        $error='';
        if((empty($_POST['topic'])) || (empty($_POST['password'])))
            $error='Please enter a topic<br / >';
        if((empty($_POST['outline'])) || (empty($_POST['password'])))
            $error='Please enter an outline<br />'; 
        if(empty($error)) 
            echo '<a href="addtopic2.php">text of the link</a>';
        else
            echo $error;
    }
?>

在键入密钥时不要忘记使用引号:$_POST['password']$_POST['outline']等。

还有一条建议:不要在PHP中使用双引号。最好使用单一的。因为double中的所有文本都将被解析为变量。没有优化。

<br>是错误的变种,请使用<br />。与<img /><link /><meta />等相同的情况

答案 1 :(得分:1)

这应该这样做

<?php

if(isset($_POST['submit'])){

    if($_POST['topic'] == ""){
        $error="Please enter a topic<br>"; 
    }

    if($_POST['outline'] == ""){
        $error="Please enter an outline<br>"; 
    }

    if(isset($error)){
        echo $error;
    }else{
        // Both fields have content in

    }

}


?>
<form style="" method="post" action="addtopic2.php">
Topic:<input name="topic" id="topicbox" maxlength="100" type="text">                
Outline: <textarea input wrap="nowrap" rows="10" cols="120" name="outline">
</textarea><br><input name="submit" value="Submit" type="submit">
</form>

答案 2 :(得分:0)

对于初学者来说,在验证数据时,总是认为客户端验证(如Javascript)一样精确 - 您必须始终对数据执行服务器端验证(PHP)。

PHP的isset()旨在与字符​​串类型变量一起使用:

$password = trim($_POST['password']);
$topic = trim($_POST['topic']);
$outline = trim($_POST['outline']);

if(!isset($password)) {
    //is empty
}

PHP empty()旨在与数组一起使用,不应用于检查字符串类型变量。

来源:Zackstronaut: Careful with PHP Empty()

答案 3 :(得分:0)

Javascript提供更快的响应,如果您使用HTML5,它可以更快:

对于html5,您可以尝试类似:

<input type="text" id="topicbox" name="topic" required="required" data-minlength="6" />

为了在IE上工作,请在标题上使用:

<!--[if lt IE 9]>
        <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
    <![endif]-->

如果您更喜欢javascript,我建议使用jquery插件:jquery.validation