Php 美元邮政的替代方案
我有一个巨大的表单,输入类型为(文本、复选框、隐藏等)。表单输入的内容取自数据库。用户必须进行一些更改,并将数据保存回数据库 现在我正在使用一个函数,它有一个Php 美元邮政的替代方案,php,post,get,Php,Post,Get,我有一个巨大的表单,输入类型为(文本、复选框、隐藏等)。表单输入的内容取自数据库。用户必须进行一些更改,并将数据保存回数据库 现在我正在使用一个函数,它有一个foreach($\u POST as$key=>$value)循环。正如您所知,post方法存在问题: 无法刷新 不能倒退 我想使用$\u GET方法,但变量和值的长度大于2000个字符 关于我能做什么,你有什么建议吗?也许在使用$\u GET时有一些技巧。也许我不知道如何正确地使用它?使用这个模式。帖子本身绝对没有错。您只需正确使用它
foreach($\u POST as$key=>$value)
循环。正如您所知,post方法存在问题:
$\u GET
方法,但变量和值的长度大于2000个字符
关于我能做什么,你有什么建议吗?也许在使用
$\u GET
时有一些技巧。也许我不知道如何正确地使用它?使用这个模式。帖子本身绝对没有错。您只需正确使用它HTTP标准规定,在收到POST请求后,应该进行GET重定向。
所以,像这样简单的代码
header("Location: ".$_SERVER['PHP_SELF']);
exit;
处理完表格后,您的所有“问题”都会得到解决
若要处理post错误,可以使用post/Redirect/GET模式。
然而,它不会在出现错误时重定向,您提到的问题变得可以忽略不计
下面是一个简明的例子:
<?
if ($_SERVER['REQUEST_METHOD']=='POST') {
//processing the form
$err = array();
//performing all validations and raising corresponding errors
if (empty($_POST['name']) $err[] = "Username field is required";
if (empty($_POST['text']) $err[] = "Comments field is required";
if (!$err) {
//if no errors - saving data and redirect
header("Location: ".$_SERVER['PHP_SELF']);
exit;
} else {
// all field values should be escaped according to HTML standard
foreach ($_POST as $key => $val) {
$form[$key] = htmlspecialchars($val);
}
} else {
$form['name'] = $form['comments'] = '';
}
include 'form.tpl.php';
?>
就循环处理而言,PHP中的foreach循环构造会复制您正在处理的数组。如果要使用不同的循环构造(for/while)处理$\u POST,并使用诸如count()、current()、reset()、next()、prev()、end()、each()或key()之类的函数,请使用它
编程PHP:第5章,第页。128-129不使用post,因为GET有大小限制。。根据规范中的使用建议,“GET”基本上只是用于获取(检索)数据,而“POST”可能涉及任何内容,如存储或更新数据、订购产品或发送电子邮件。不要为使用POST而哭泣,好好相处吧。。这是你的friend@Baz1nga它也有不希望的副作用,这就是为什么PRG模式是一种常见的模式。嗯,PRG模式并不能解决你所有的问题。。与你从中获得的一点点好处相比,我觉得这有点过分了。。你见过多少电子商务网站使用这个pattern@Baz1nga-它解决了问题中提到的所有问题(这有点重要!),我已经记不清有多少网站在使用它。我同意。似乎是最好的解决方案。请注意,在这种情况下。注意:许多HTTP/1.1之前的用户代理不了解303状态。当涉及到与此类客户端的互操作性时,可以使用302状态代码,因为大多数用户代理都会对302响应作出反应,如本文针对303所述。在回答的开头,您指的是哪个HTTP版本和响应代码?