【问题标题】:Fill the form for the user php填写用户 php 的表单
【发布时间】:2012-12-06 09:14:19
【问题描述】:

当用户提交一个使用 if 语句验证的表单时,像这样

if (strlen($_POST['password']) < 5)
{
    $data['errors'][] = 'Too short';
}
elseif ($_POST['password'] != $_POST['confirm_password'])
{
    $data['errors'][] = 'doesnt match';
}

验证完成后,我们会检查是否有任何错误

if (!$data['errors'])

如果不是,我们继续将数据填充到数据库中

但是如果有错误,用户需要重新填写整个表单,我不希望这样,如果合法,我需要渲染一些数据

if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL))
{
    $data['errors'][] = 'E-mail not valid';
}

像这里一样,如果密码验证失败但电子邮件验证正常,我想退回表单中已经有价值的电子邮件。我是否需要在每个验证检查上添加一个 else 语句,例如 } else { $data['postback']['email']; } 或者我可以用另一种更简单的方式做到这一点吗?

我该怎么做?

【问题讨论】:

  • 最好的做法(在我看来)是通过 Ajax 提交表单,并从 PHP 文件返回错误,然后用 JavaScript 渲染和显示。
  • 将每个字段的值存储到 $_SESSION,然后将这些值设置为 input 的值部分。所以它看起来像&lt;input type='text' value='&lt;?php echo $_SESSION['email']; ?&gt;' /&gt; 或类似的东西

标签: php


【解决方案1】:

对于要检查的字段,您可以只使用 AJAX 或 Javascript/JQuery,因此其余字段的值将保持不变。

使用这种方法,您可以保留用户输入,因为您不需要将页面提交到服务器。它也使服务器更好,因为它不必处理额外的请求。

例如:您有登录名和密码字段。您需要验证数据库中是否已存在登录名,并检查密码字段是否匹配。
您还可以有一些不需要验证的名为 randomText 的文本输入。

因此,对于登录字段,您使用 AJAX:当 onBlur 事件发生时,您将数据发送到服务器,服务器检查此登录是否存在于数据库中并发送回答案。根据您的回答,您使用 javascript/jQuery 向用户显示错误。如果页面验证出现错误,请务必禁用页面提交。
对于密码验证,您只需使用 Javascript 并检查字段值是否匹配,如果不匹配 - 您再次编写错误。
当您执行所有这些检查时,randomText 字段保持不变,因为您没有将页面提交到服务器。

【讨论】:

    【解决方案2】:

    您必须将每个值放回呈现的 HTML 输入元素中。如果您过滤任何值,并且希望在 HTML 中使用过滤后的值,则必须使用 filter_var 函数的返回值。

    <?php
    $filtered = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL);
    

    HTML:

    <input type="text" value="<?php echo $filtered ?>" />
    

    例如。如果您使用支持某种形式呈现的模板系统或框架,例如 Zend Framework 或 Symfony,它会变得容易一些。

    【讨论】:

    • 我想你误会了,我只是想返回验证数据的数据(确实通过了 if 语句),如果出现其他问题,比如你没有匹配密码但输入了电子邮件我想将电子邮件返回到表单:) 我可以添加一个 else 语句并放置一个新的 $data 变量,但我想知道是否有更流畅的方法
    【解决方案3】:
    <input type="text" name="email" value="<?php if(isset($_POST['email'])){echo $_POST['email']; } ?>" />
    

    【讨论】:

      【解决方案4】:

      做这样的事情

      <input value="<?= $_POST['email']; ?>" type="text" name="email" />
      

      【讨论】:

      • 请不要为用户重新填写密码字段。您将通过 Internet 以纯文本形式发送用户使用的密码。
      【解决方案5】:

      通过在验证中添加 else 语句解决了问题,如果验证成功,我会将数据返回到呈现布局如果验证中的其他内容失败。

      if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL))
      {
          $data['errors'][] = 'E-mail not valid';
      }
      else
      {
          $data['post']['email'] = $_POST['email'];
      }
      

      然后我只需传回 $data 数组,其中包含 post.email 变量并将其输出到屏幕上。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-11-17
        • 1970-01-01
        • 1970-01-01
        • 2010-09-09
        • 2021-10-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多