【问题标题】:PHP Keep entered values after validation errorPHP在验证错误后保留输入的值
【发布时间】:2016-01-21 11:48:54
【问题描述】:

我有一个需要验证的简单表单。
我用empty() 函数做到了这一点。如果验证未通过,则会向用户发出警报。一旦创建此警报,所有输入的值都会消失。

我想保留它们。

这就是我所做的:

<form id="" name="" action="<?php echo get_permalink(); ?>" method="post">
    <table>
        <tr>
            <td>
                Name:<input type="text" id="name" name="name">
            </td>
        </tr>
        <tr>
            <td>
                <input class="submit-button" type="submit" value="Send" name="submit">
            </td>
        </tr>
    </table>
</form>
<?php
    if($_POST["submit"]){
        if (!empty ($_POST["name"])){
          // do something
        }else{
            ?>
            <script type="text/javascript">
                alert('U heeft niet alle velden ingevuld. Graag een volledig ingevuld formulier versturen');
            </script>
            <?php
        }
?>  

【问题讨论】:

    标签: php validation error-handling


    【解决方案1】:

    将输入的值作为默认值传递给输入:

    <input type="text" id="name" name="name" value="<?php echo isset($_POST["name"]) ? $_POST["name"] : ''; ?>">
    

    【讨论】:

    • 是的,它做到了。我明白了。。谢谢!
    • 您还应该在输出值之前清理 $_POST 以防止注入错误代码。即
    【解决方案2】:

    奇怪的是,我碰巧在做类似的事情,并且一直在使用以下内容来确保表单数据在提交表单后可用。它使用会话变量来存储 POST 的结果,并用作表单字段中的值。

    /* Store form values in session var */
    if( $_SERVER['REQUEST_METHOD']=='POST' ){
        foreach( $_POST as $field => $value ) $_SESSION[ 'formfields' ][ $field ]=$value;
    }
    
    /* Function used in html - provides previous value or empty string */
    function fieldvalue( $field=false ){
            return ( $field && !empty( $field ) && isset( $_SESSION[ 'formfields' ] ) && array_key_exists( $field, $_SESSION[ 'formfields' ] ) ) ? $_SESSION[ 'formfields' ][ $field ] : '';
    }
    
    /* example */
    echo "<input type='text' id='username' name='username' value='".fieldvalue('username')."' />";
    

    【讨论】:

    • 这很神奇。谢谢分享!
    【解决方案3】:

    最简单的方法是对每个输入字段都这样做:

    <input type="text" id="name" name="name" value="<?= isset($_POST['name']) ? $_POST['name'] : ''; ?>">
    

    它会检查您是否已经提交过一次表单,如果是,则将值放入文本框中。

    【讨论】:

      【解决方案4】:

      我尝试了最后一个选项,但由于某种原因,它对我来说不起作用。也许我做错了,但我只是在我的联系表单的 html 文件中添加了上面的行。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-13
        • 1970-01-01
        • 2015-10-26
        相关资源
        最近更新 更多