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版本和响应代码?