【问题标题】:Keep text in text field after submit提交后在文本字段中保留文本
【发布时间】:2014-10-29 04:45:02
【问题描述】:

我正在构建一个表单,我希望保留所有插入的值,以防表单提交失败。这是我的代码:

<?php
$error = "";
$name = "";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
   $name = $_POST["name"];

   // Verify $_POST['name'] greater than 4 chars
   if ( strlen($name) < 4 ){
        $error= 'Name too short!';
    }
}
?>

<html>
<head>
</head>
<body>
    <form method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" name="myForm" id="idForm">
       <input type="text" placeholder="Name" id="name" name="name" value=""/>
       <input type="submit" value="submit"/>
    </form>
        <?php 
            echo "<h2>Input:</h2>"; 
            echo $name;
            if($error) {
                // No Update AND refresh page with $name in text field
                echo "<br/>" . $error; 
            } else {
                // Update name in DB
            }
       ?>
</body>
</html>

我希望名称字段在提交后保留插入的输入文本。我尝试在输入值中使用 php 代码,但不起作用。有什么想法吗?

【问题讨论】:

    标签: php html textfield


    【解决方案1】:
    <?php
    $error = "";
    $name = isset($_POST["name"])?$_POST["name"]:""; //Added condition
    
    if ($_SERVER["REQUEST_METHOD"] == "POST") {
       $name = $_POST["name"];
    
       // Verify $_POST['name'] greater than 4 chars
       if ( strlen($name) < 4 ){
            $error= 'Name too short!';
        }
    }
    ?>
    
    <html>
    <head>
    </head>
    <body>
        <form method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" name="myForm" id="idForm">
           <input type="text" placeholder="Name" id="name" name="name" value="<?php echo $name; ?>"/>
           <input type="submit" value="submit"/>
        </form>
            <?php 
                echo "<h2>Input:</h2>"; 
                echo $name;
                if($error) {
                    // No Update AND refresh page with $name in text field
                    echo "<br/>" . $error; 
                } else {
                    // Update name in DB
                }
           ?>
    </body>
    </html>
    

    【讨论】:

      【解决方案2】:

      如果您想保留所有值/输入以供进一步使用,您可以使用 php 会话值来实现。

      此外 - 你应该使用 $_SERVER['SCRIPT_NAME'] 而不是 $_SERVER['PHP_SELF']

      火星

      【讨论】:

        【解决方案3】:

        您可以在输入的 value 属性中回显 $_POST['name']。 确保检查 POST 值以避免 XSS。 我还提出了更新数据库功能,因为如果名称超过 4 个字符,则无需向用户显示表单!

         <?php
        $error = "";
        $name = "";
        if ($_SERVER["REQUEST_METHOD"] == "POST") {
           if (isset($_POST['name'])){ //change name content only if the post value is set!
               $name = filter_input (INPUT_POST, 'name', FILTER_SANITIZE_STRING); //filter value
           }
           // Verify $_POST['name'] greater than 4 chars
           if ( strlen($name) < 4 ){
                $error= 'Name too short!';
            } else {
                // Update name in DB
                // Redirect
            }
        }
        ?>
        
        <html>
        <head>
        </head>
        <body>
            <form method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" name="myForm" id="idForm">
               <input type="text" placeholder="Name" id="name" name="name" value="<?php echo $name; ?>"/>
               <input type="submit" value="submit"/>
            </form>
                <?php 
                    echo "<h2>Input:</h2>"; 
                    echo $name;
                    if($error) {
                        // No Update AND refresh page with $name in text field
                        echo "<br/>" . $error; 
                    };
               ?>
        </body>
        </html>
        

        【讨论】:

          【解决方案4】:

          解决了。这是我一直在寻找的解决方案。 我在输入的值标签中添加了以下内容:

          <?php if (isset($_POST['name'])) echo $_POST['name']; ?>
          

          因此输入字段看起来像:

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

          感谢您的回复,帮助了我。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-01-18
            • 2014-12-29
            • 2014-03-14
            • 2022-12-23
            • 1970-01-01
            • 1970-01-01
            • 2016-05-20
            相关资源
            最近更新 更多