重新填充形式:PHP 或 Javascript



我有一个表单,该表单提交给运行某些验证的第三方服务。出错时,它会重定向到与表单相同的页面,但会附加一个包含原始表单值的查询字符串以及错误消息。

由于此查询字符串,浏览器将其视为"新页面",并且表单为空。

我尝试了一种使用 PHP 的方法(请参阅代码审查问题),该方法归结为:"单独获取每个字段的 GET 值,然后将其设置为表单上的值。它有点工作,但是:

  • 单选按钮很难处理
  • 我没有完整的 PHP 功能。我在WordPress中使用了一个PHP页面插件,该插件可以运行某些PHP,但是在定义函数然后重用它时感到窒息

推荐的方法是什么(PHP或JavaScript...而且我在网站上也有jQuery)用于重新填充此表单?

Javascript,因为PHP强制在服务器上增加额外的负载。但是验证用户输入应该在客户端(JS)和(服务器端)PHP中完成。

除非你动态地组合你的字段,否则使用 PHP 动态地重新填充它们并不容易。如果是,您可以执行以下操作:

.PHP

$fields = [
    'username' => ['type' => 'text', 'value' => $_GET['username']],
    'setting1' => ['type' => 'radio', 'value' => $_GET['radio']]
];
foreach( $fields as $name => $input ) {
    echo "<input type='{$input['type']}' name='{$name}' value='{$input['value']}'>";
}

如果没有,你可以像这样使用 PHP 和 JavaScript 的组合。我正在使用jQuery来简化事情。

PHP 和 JavaScript

$fields = $_GET;
echo '<script type="text/javascript">
var errors = { ';
foreach( $fields as $name => $value ) {
    echo $name . " : '{$value}',n";
}
echo '};
$.each(errors, function(name, value) {
    $("input[name="+name+"]").val(value);
});
</script>';

这是未经测试的,我知道至少有一个错误(错误数组中额外的逗号),但应该是一个很好的起点。第二种方法的目标是使用 PHP 组装一个数组,然后 JavaScript 可以使用该数组并执行一个循环将这些值分配给每个输入字段。但同样 - 选择框和单选按钮等的逻辑会很复杂。您不仅要分配val,还必须设置checked属性等。

不幸的是,我不知道

是否有任何库或jQuery插件已经这样做了。

这是用于检查单选按钮的 jquery 代码:

     $("form :radio:checked").before("CHECKED"); //selects only checked buttons

这是阻止表单提交并重新填充字段的代码:

function prepareEventhandlers() {
document.getElementById("formname").onsubmit = function() {
if (document.getElementById("email").value == "") { // e.g. if no email was given
    document.getElementById("errormessage").innerHTML = "it didnt work!";
    return false;
} else {
    document.getElementById("errormessage").innerHTML = "";
    return true;
}
};
}

window.onload = function () {
prepareEventhandlers();
}

祝你好运!

最新更新