【问题标题】:PHP form validation, keep field values after refreshPHP表单验证,刷新后保留字段值
【发布时间】:2015-10-26 16:33:00
【问题描述】:

我目前正在为网站制作注册/验证脚本,偶然发现了一个问题。

我正在使用所有 PHP 来验证并使用 if 语句来回显错误数组。

我的问题是:刷新后如何将用户的输入值保留在表单中?我必须学习 AJAX 吗?

  • 注意:我关注的文件是register.php,它将数据发送到同一页面(action = "")。而form_handle.php 是包含在register.php 最顶部/开头的实际验证脚本

form_handle.phpCODE:

    $errors = array();

if( empty($safe_fname) || 
    empty($safe_lname) || 
    empty($safe_email) || 
    empty($safe_email_again) || 
    empty($safe_password) )
        { 
        $errors = '<p>One or more fields left empty'; 
        }
elseif( strlen($safe_password) < 6)
    { 
    $errors = '<p>Password must be atleast 6 charcters long.</p>'; 
    }

elseif($safe_email != $safe_email_again)
    { 
    $errors = '<p>E-mails do not match.</p>'; 
    } 

The form代码:

       <h2>Sign up Today!</h2>
          <form method="post" action="">
                   <span class="p" id="p1"></span><br/> 
          <input name="first_name" id="first" class="register_form cap" type="text" placeholder="First Name" />
              <br/><span class="p" id="p2"></span><br/> 
      <input name="last_name" id="second" class="register_form cap" type="text" placeholder="Last Name" />
          <br/><span class="p" id="p3"></span><br/> 
      <input name="email" id="third" class="register_form" type="text" placeholder="E-mail" />
          <br/><span class="p" id="p4"></span><br/> 
      <input name="email_again" id="fourth" class="register_form" type="text" placeholder="Re-enter E-mail" />
          <br/><span class="p" id="p5"></span><br/> 
      <input name="password" type="password" class="register_form" placeholder="Password" />
          <br/><span class="p" id="p1"></span><br/>   
      <input name="submit" id="fifth" class="register_form" type="submit" value="Create!" />

      </form>
</div>

【问题讨论】:

  • 在您的 HTML 中使用 value="&lt;?php echo $_POST['first_name']; ?&gt;"
  • 记得使用isset,否则表单未提交时会得到未定义的索引
  • 遇到了这个错误。

标签: php html validation


【解决方案1】:

有点晚了,但是从 PHP 7.0.x 开始,您可以使用空合并 (??) 二元运算符。左边的操作数是被计算的表达式,右边的操作数包含在表达式不存在或为 null 时使用的值。这简化了代码阅读并消除了由于表达式复制导致的拼写错误:

<expression> ?? <if-null-value>

相当于:

isset(<expression>) ? <expression> : <if-null-value>

基于此,我建议对问题的回答如下:

<input type='text' name='first_name' value='<?php echo $_POST['first_name'] ?? ''; ?>' />

【讨论】:

    【解决方案2】:

    这样做并避免大量代码和错误的快速方法如下:

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

    【讨论】:

    • 刷新后不返回值
    • 对不起,伙计,我的表格被回应为 HEREDOC。一旦我从 HEREDOC 中取出表格,代码就可以正常工作。
    【解决方案3】:

    你的代码应该是这样的

    <input type='text' name='first_name' value='<?php echo $_POST['first_name']; ?>' />
    

    【讨论】:

    • 可能想添加isset() 这样他就可以避免未定义的索引错误
    • @$_POST['first_name'] 在上述情况下应该比isset() 更好。
    • 这段代码只是回显了 PHP 分隔符和所有 PHP 代码
    【解决方案4】:

    你可以尝试如下-

    <input name="first_name" id="first" class="register_form cap" type="text"
        <?php
        if(isset($_POST['first_name'])) {
            echo "value='".$_POST['first_name']."'";
        } else {
            echo "placeholder='First Name'";
        }
        ?>
    
        />
    

    【讨论】:

      猜你喜欢
      • 2010-11-04
      • 2011-06-29
      • 1970-01-01
      • 1970-01-01
      • 2012-02-09
      • 1970-01-01
      • 2012-05-17
      • 2016-07-20
      • 2013-11-03
      相关资源
      最近更新 更多