【问题标题】:How can I keep a value in a text input after a submit occurs?提交后如何在文本输入中保留值?
【发布时间】:2011-01-18 18:36:18
【问题描述】:

我想验证表单以确保用户输入姓名和姓氏。

如果用户只输入他的姓氏,则表单应再次显示姓氏字段旁边的错误消息,但名称值应该仍然在那里。

我不知道该怎么做,呵呵。我只是一个新手 PHP 程序员。

这是我目前所拥有的:

<html>
<head>
</head>

<body>
    <form action="formprueba.php" method="get">
        <dl>
            <dt>Last Name:</dt>
            <dd><input type="text" value="" name="name" />
                <?php if((isset($_GET['name'])) && ($_GET['name'] == "")){
                    echo "Please write a correct name.";
                }
                ?>
            </dd>                

            <dt>Last Name:</dt>
            <dd><input type="text" value="" name="lastname" />
                <?php if((isset($_GET['lastname'])) && ($_GET['lastname'] == "")){
                    echo "Please write a correct last name.";
                }
                ?>
            </dd>

            <br />                
            <dt>
                <input type="submit" value="enviar" />
            </dt>
            <input type="hidden" name="enviado" value="j"/>
        </dl>
    </form>
</body>

另外,我敢肯定这个验证很糟糕,如果你有几分钟的时间,如果有人能告诉我一个更有效的验证方法(不使用第三方插件),我会真的毕业了。

谢谢。

【问题讨论】:

    标签: php validation forms


    【解决方案1】:

    将您需要的变量放入输入标签的“值”字段中,如下所示:

    <input type="text" value="<?php echo htmlspecialchars($_GET['lastname']); ?>" name="lastname" />
    

    重要的是至少引用某人可能输入的 HTML 字符(通过 htmlspecialchars)。

    【讨论】:

    • 为了在 $_GET 未设置时处理未定义的索引通知,我通常在脚本顶部的某处执行此操作 $lastname = isset($_GET['lastname'])?$_GET['lastname ']:'';
    【解决方案2】:

    如果用户只写了他的最后一个 名称,表格应再次显示 姓氏旁边的错误消息 字段,但名称值仍应 在那里。

    只需从$_GET(您正在使用的表单方法)获取它们的值

    <input type="text" value="" name="lastname" value="<?php echo $_GET['lastname'];?>" />
    

    等等……

    出于安全原因,您必须还使用htmlspecialchars 函数。

    More Information Here.

    【讨论】:

    • 必须不能。未能在数据离开系统之前对其进行清理将使网站面临 XSS 攻击。
    【解决方案3】:

    如果你正在做类似的事情

    <input type="text" value="" name="lastname" value="<?php echo $_GET['lastname'];?>" />
    

    永远不要忘记检查/转义您显示的值,例如实体()。 否则,您将面临完全微不足道的 javascript 注入攻击!

    【讨论】:

      【解决方案4】:

      只是一个小笔记,我必须学习艰难的方法:显示错误消息并敦促用户按下后退按钮(或使用 javascript 执行相同操作)通常保留值输入字段。

      这似乎完全是特定于浏览器的,例如对我来说,它适用于 Safari,但不适用于 Firefox...

      【讨论】:

        【解决方案5】:

        最好在服务器端进行验证。你的方法似乎是正确的。你可以只维护一个标志,它会在页面结束时告诉你是否验证成功。

        例子

        $flag=ture;

        <?php if((isset($_GET['lastname'])) && ($_GET['lastname'] == "")){
               echo "Please write a correct last name.";
               $flag="false";
        }
        ?>
        

        然后在页面底部 如果($标志==真) echo "表单提交";

        关于价值的持久性,其中一个人正确地提到了为您的输入标签添加价值

        value="<?php echo $_GET['lastname'];?>"
        

        希望这会有所帮助。

        【讨论】:

          【解决方案6】:

          您可以使用客户端 javascript - 这样可以节省到服务器的行程。

          但缺点是:您实际上只能进行基本检查,因为用户不能被信任(当然是为了安全措施)。您至少可以在昂贵的服务器之旅之前“标记”无效模式。

          【讨论】:

          • 我现在需要一个仅 PHP 的解决方案。 :P 当我交上这个小作业时,我会调查一下。可以描述一下我需要做什么吗?我不一定想要刚刚交给我的所有代码。
          • 客户端 JS 会节省到服务器的行程,但它需要信任用户。它只能是“对用户好”,不能代替真正的检查。
          【解决方案7】:

          将此添加到您首先声明它的表单中:

          <form onsubmit="event.preventDefault(); validateMyForm();">
          

          【讨论】:

          • 为什么 OP 应该“在此形成”? 好的答案将始终解释所做的事情以及为什么以这种方式完成,不仅适用于 OP,而且适用于 SO 的未来访问者。
          【解决方案8】:

          我认为,如果您可以依赖 Javascript,那么 Javascript 是最好的答案。但是客户端脚本可以被覆盖。所以稍后在服务器上验证您的输入。

          【讨论】:

            猜你喜欢
            • 2016-05-20
            • 1970-01-01
            • 1970-01-01
            • 2012-12-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-08-24
            • 2014-10-29
            相关资源
            最近更新 更多