当用户使用if语句提交表单时,如此
if (strlen($_POST['password']) < 5)
{
$data['errors'][] = 'Too short';
}
elseif ($_POST['password'] != $_POST['confirm_password'])
{
$data['errors'][] = 'doesnt match';
}
验证完成后,我们检查是否有任何错误
if (!$data['errors'])
如果不是,我们继续将数据填入数据库
但是如果有错误,USERS需要重新填写整个表单,我不希望这样,我需要渲染一些数据,如果它是合法的
if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL))
{
$data['errors'][] = 'E-mail not valid';
}
就像这里一样,如果密码验证失败但电子邮件验证没问题,我想要回复已经在表单中评估过的电子邮件。我是否需要在每个验证检查上添加一个else语句,如} else {$ data ['postback'] ['email'];或者我可以用另一种更简单的方式做到这一点吗?
我该怎么做?
答案 0 :(得分:0)
您可以对要检查的字段使用AJAX或Javascript / JQuery,因此休息字段的值保持不变。
使用此方法,您可以保留用户输入,因为您不需要向服务器提交页面。它还使服务器更好,因为它不必处理额外的请求。
例如:您有登录名和密码字段。您需要验证数据库中是否已存在登录,还要检查密码字段是否匹配 您还可以使用一些名为randomText的文本输入,而不需要验证。
因此,对于登录字段,您使用AJAX:当发生onBlur事件时,您将数据发送到服务器,服务器检查此登录是否存在于数据库中并发送回答。根据您的答案,您使用javascript / jQuery向用户显示错误。如果页面验证中存在错误,请务必禁用页面提交 对于密码验证,您只需使用Javascript并检查字段值是否匹配,如果不匹配 - 您再次写入错误 当您执行所有这些检查时,randomText字段保持不变,因为您不向服务器提交页面。
答案 1 :(得分:-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,它会变得容易一些。
答案 2 :(得分:-1)
做这样的事情
<input value="<?= $_POST['email']; ?>" type="text" name="email" />
答案 3 :(得分:-1)
<input type="text" name="email" value="<?php if(isset($_POST['email'])){echo $_POST['email']; } ?>" />
答案 4 :(得分:-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变量并在屏幕上输出。