1

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

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

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

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

有人能告诉我 Isset 在这种情况下是否可以工作吗?如果是这样,我哪里出错了。或者,如果没有,我可以使用什么来获取文本字段的验证器。我宁愿为此使用 PHP,但如果我需要使用 Javascript,这是可能的。

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

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

第 2 页代码

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

4 回答 4

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 中使用双引号。最好用单机。因为双精度中的所有文本都将被解析为变量。未优化。

<br>是错误的变体,使用<br />. <img />,<link />等情况相同<meta />

于 2012-04-12T14:16:09.817 回答
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>
于 2012-04-12T14:31:35.883 回答
0

对于初学者,在验证数据时,请始终将客户端验证(如 Javascript)视为一种精妙的方法——您必须始终对数据执行服务器端验证 (PHP)。

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

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

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

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

资料来源:Zackstronaut:小心使用 PHP Empty()

于 2012-04-12T14:30:56.053 回答
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

于 2012-04-12T14:34:19.263 回答