1

当用户提交表单时,使用 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']; 或者我可以用另一种更简单的方式做到这一点吗?

我怎样才能做到这一点?

4

5 回答 5

0

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

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

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

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

于 2012-12-06T09:43:30.950 回答
-1

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

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

HTML:

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

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

于 2012-12-06T09:22:32.147 回答
-1

做这样的事情

<input value="<?= $_POST['email']; ?>" type="text" name="email" />
于 2012-12-06T09:25:57.280 回答
-1
<input type="text" name="email" value="<?php if(isset($_POST['email'])){echo $_POST['email']; } ?>" />
于 2012-12-06T09:26:54.223 回答
-1

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

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

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

于 2012-12-08T08:34:57.023 回答