在Yahoo或Google以及许多网站中,当您填写表单时,如果您的表单有任何错误,它会被重定向到同一页面。 请注意,表单中的数据保持不变。我的意思是文本字段中的数据保持不变。 我试过
答案 0 :(得分:2)
你需要自己做。页面发布后,您将可以访问用户通过$ POST ['...']输入的所有表单值。然后,您可以使用此数据重新填充表单字段。
答案 1 :(得分:1)
这不是自动完成的。他们从post / get获取值,然后将用户键入的值分配给模板。你看到的是从处理用户值的脚本生成的html。
答案 2 :(得分:1)
如果您将表单和表单数据处理放在同一个脚本中,则可以轻松打印出已在表单中输入的数据,例如:
$valid = false;
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if (isset($_POST['name']) && $_POST['name'] == 'Hugo') {
$valid = true;
} else {
echo '<p>Seriously, you have to enter "Hugo"!</p>';
}
// more data processing
if ($valid) {
echo '<p>Everything’s fine!</p>';
}
}
if (!$valid) {
echo '<form action="" method="post">';
echo '<p>Please enter "Hugo": <input type="text" name="name" value="', (isset($_POST['name']) ? htmlspecialchars($_POST['name']) : ''), '"></p>';
echo '<p><input type="submit"></p>';
echo '</form>';
}
嗯,这不是一个很好的例子,但这就是它的工作原理。
答案 3 :(得分:1)
许多框架都会为您完成这项工作,所以不要浪费您的时间手动执行此操作
答案 4 :(得分:1)
以下是我用于非常简单网站的修改版本,我不希望/需要整个框架来完成工作。
function input($name, $options = array()) {
if(!isset($options['type'])) $options['type'] = 'text';
$options['name'] = $name;
if(isset($_POST[$name]) && $options['type'] != 'password') {
$options['value'] = htmlspecialchars($_POST[$name]);
}
$opts = array();
foreach($options as $key => $value) {
$opts[] = $key . '="' . $value . '"';
}
return '<input ' . implode(' ', $opts) . '/>';
}
(<select
&gt;和<textarea>
等我有一些相似的功能,等等)
当您构建字段时,您可以执行以下操作:
First Name: <?=input('first_name')?>
Last Name: <?=input('last_name')?>
Password: <?=input('password', array('type' => 'password'))?>
如果您在与表单本身相同的页面中处理表单,则会在出现任何错误时自动填写表单。但是,大多数框架都会为您完成所有这些(并且比上面的代码更好),我个人建议CakePHP
或CodeIgniter
。
答案 5 :(得分:0)
您必须检查同一文件中的数据,如果它是正确的,那么您将重定向到正确的位置。然后你可以使用用户发布的$ _POST或$ _GET信息,他可以修复错误。
答案 6 :(得分:0)
您可以使用两种方法(它们不是互斥的):
value
属性。例如:您发送一个字段name
,您在PHP中获得$ _POST ['name'](假设您使用了method='post'
。如果您发回数据并修改该字段,则添加{{1}你应该得到你的数据。答案 7 :(得分:0)
如果您正在使用模板或框架系统(我已将Smarty引擎合并到我的几个项目中),您通常可以调整模板,以便它们在检测到{{1}时自动使用值填充字段设置与其字段对应的值。
至于密码,据我所知(我可能是错的):这是一种惯例,可以最大限度地缩短密码通过网络发送的时间,从而缩小了可能嗅探到的人的窗口。拿起文字。将密码字段留空是完美的做法。