为用户php填写表单

为用户php填写表单,php,Php,当用户提交表单时,使用if语句对其进行验证,如下所示 if (strlen($_POST['password']) < 5) { $data['errors'][] = 'Too short'; } elseif ($_POST['password'] != $_POST['confirm_password']) { $data['errors'][] = 'doesnt match'; } <input value="<?= $_POST['email'];

当用户提交表单时,使用if语句对其进行验证,如下所示

if (strlen($_POST['password']) < 5)
{
    $data['errors'][] = 'Too short';
}
elseif ($_POST['password'] != $_POST['confirm_password'])
{
    $data['errors'][] = 'doesnt match';
}
<input value="<?= $_POST['email']; ?>" type="text" name="email" />
如果不是,我们继续把数据填入数据库

但是如果有错误,用户需要重新填充整个表单,我不希望这样,如果合法的话,我需要返回一些数据

if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL))
{
    $data['errors'][] = 'E-mail not valid';
}
像这里一样,如果密码验证失败,但是电子邮件验证没有问题,我想返回表单中已经有值的电子邮件。我是否需要像}else{$data['postback']['email'];}那样在每个验证检查上都放一个else语句,或者我可以用另一种更简单的方法来做


我该怎么做呢?

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

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

比如说。如果您使用支持某种形式的表单呈现(如Zend framework或Symfony)的模板系统或框架,它将变得更加容易。

执行类似操作

if (strlen($_POST['password']) < 5)
{
    $data['errors'][] = 'Too short';
}
elseif ($_POST['password'] != $_POST['confirm_password'])
{
    $data['errors'][] = 'doesnt match';
}
<input value="<?= $_POST['email']; ?>" type="text" name="email" />

您可以对正在检查的字段使用AJAX或Javascript/JQuery,以便rest字段的值保持不变

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

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

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

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

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

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

我想您理解错了,我只想返回已验证数据的数据,如果出现其他错误,这些数据确实通过了if语句,例如,如果您无法匹配密码,但键入电子邮件,我想将电子邮件返回到表单:我可以添加一个else语句并放置一个新的$data变量,但我想知道是否有更平滑的方法请不要为用户重新填充密码字段。您将通过internet以明文形式发送用户使用的密码。我认为最好的做法是通过Ajax提交表单,并从PHP文件返回错误,然后用JavaScript呈现和显示。将每个字段的值存储到$\u会话,然后将这些值设置为输入的值部分。所以看起来像
if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL))
{
    $data['errors'][] = 'E-mail not valid';
}
else
{
    $data['post']['email'] = $_POST['email'];
}