【问题标题】:PHP keep form info after submit form failed提交表单失败后PHP保留表单信息
【发布时间】:2011-06-03 10:02:51
【问题描述】:

你好 我正在 mvc 系统视图中构建一个表单,我希望保留所有插入的值,以防表单提交失败。 如何做到这一点:我尝试过(字段示例):

     <label for="user_firstname">Nume</label>
    <input id="user_firstname" type="text" name="user_firstname" value=<?= $_POST['user_firstmane'] ?> >
    <? if (isset($errors['user_firstname'])): ?>
    <span class="error"><?= $errors['user_firstname']; ?></span>
<? endif; ?> 

但当然,它在第一次时不起作用(未完成任何发布操作时)。

最简单的方法是什么?有什么想法吗?

谢谢

【问题讨论】:

  • 这是什么意思? “但当然,第一次它不起作用” ....第一次向用户显示表单时,该值不存在,因为他还没有提交任何东西。还是有一些php错误?
  • 1) 为什么说“第一次不行?” 2)你拼错了 $_POST['user_firstmane'],当然应该是 $_POST['user_firstname'],3)(小 OT)在我看来,要更像“MVC”,你不应该直接使用 $_POST 变量但取自“控制器”的值(例如,具有“firstName”属性的“用户”对象)会是更好的选择。

标签: php forms submit


【解决方案1】:

只需在 javascript 中循环遍历 DOM 并将 PHP $_POST 数据放入 input.value 中

<script type='text/javascript'>

<?php
    echo "var jsArray = new Array();";
    foreach ($_POST as $key=>$value){
        echo "jsArray['$key'] = '$value';";  //turn it into a javascript array
    }
?>


        // Grab all elements that have tagname input
        var inputArr = document.getElementsByTagName("input");

        // Loop through those elements and fill in data
        for (var i = 0; i < inputArr.length; i++){
            inputArr[i].value = jsArray[inputArr[i].name];

        }

</script>

【讨论】:

    【解决方案2】:

    我建议如下:

    <label for="user_firstname">Nume</label>
        <input id="user_firstname" type="text" name="user_firstname" value=<?(isset($_POST['user_firstname']) ? $_POST['user_firstname'] : ""; ?>>
        <? if (isset($errors['user_firstname'])): ?>
        <span class="error"><?= $errors['user_firstname']; ?></span>
    <? endif; ?> 
    

    您在 $_POST["user_firstmane"] 中也有错字,应该是 $_POST["user_firstname"] :)

    【讨论】:

    • 值得一提的是,为了实现这一点,您不能在提交失败时执行 POST/Redirect/GET 模式。
    【解决方案3】:
    value="<?php echo isset($_POST['user_firstname'])? $_POST['user_firstname'] : "" ?>"
    

    【讨论】:

    • 你应该把“”改成“”吗?
    【解决方案4】:

    您的意思是当表单提交失败时您想保留表单的值?您可以使用 $_SESSION 将值存储在检查页面中。例如:

    检查.php

    <?php
       session_start();
       if (strlen($_POST['user_firstname']) < 5) { //for example
           $_SESSION['user_firstname'] = $_POST['user_firstname'];
       }
    ?>
    

    以您当前的形式。将value=&lt;?= $_POST['user_firstmane'] ?&gt; 更改为value="&lt;?=$_SESSION['user_firstname']?&gt;",所以:

    <label for="user_firstname">Nume</label>
        <input id="user_firstname" type="text" name="user_firstname" value="<?=$_SESSION['user_firstname']?>" />
        <? if (isset($errors['user_firstname'])): ?>
        <span class="error"><?= $errors['user_firstname']; ?></span>
    <? endif; ?> 
    

    【讨论】:

      【解决方案5】:
      <input id="FirstName" name="FirstName" placeholder="First name" title="First Name" required="" tabindex="1" type="text" value="<?php if(isset($_POST['FirstName'])){ echo htmlentities($_POST['FirstName']);}?>"/>
      

      此代码在提交表单失败后更容易保留表单信息。

      【讨论】:

        猜你喜欢
        • 2021-11-28
        • 2011-07-27
        • 1970-01-01
        • 2019-08-24
        • 2023-03-26
        • 1970-01-01
        • 1970-01-01
        • 2017-10-25
        • 1970-01-01
        相关资源
        最近更新 更多