0

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

由于这个查询字符串,浏览器将其视为“新页面”并且表单为空白。

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

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

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

4

3 回答 3

3

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

于 2012-06-26T16:47:11.930 回答
2

除非您动态组装您的字段,否则使用 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 插件已经这样做了。

于 2012-06-26T20:41:30.960 回答
1

这是用于检查单选按钮的 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();
}

祝你好运!

于 2012-06-26T18:13:00.807 回答