POST / Redirect抛出一个`Connection was reset`浏览器错误

时间:2015-06-23 09:29:33

标签: javascript php forms .htaccess

我正在为我们的客户建立一页一页的结账。此结帐应包含凭据,发货和付款的所有表格。也应该可以编辑先前输入的值。除了一件事,这一切都很顺利。

我的页面由多个包含:

组成
  • 凭证
  • 装运
  • 付款

在每个包含中,我检查相关数据是否在会话中,如果是,我显示不同的视图。这里没什么特别的。

例如:

<?php
if (is_array($_SESSION['credentials'])) {
    ... show filled in values ...
} else {
    ... show form ...
}
?>

当设置了值时,我还会显示一个编辑按钮。我这样做如下:

<div class="left-column">
    <h1 class="title-left">Step 1 - Credentials</h1>
    <div class="pull-left" style="width: 50%;">
        Name: name<br />
        Address: Address 11<br />
        Postal Code: 12345AA<br />
        Country: Country<br />
    </div>

    <br />
    <div style="clear: both;height: 10px;"></div>
    <center>
        <form method="POST" action="/checkout/credentials/">
            <input type="hidden" name="edit" value="credentials">
            <button class="sexybutton sexysimple sexybestel">Edit</button>
        </form>
    </center>
</div>

其次是:

<div class="left-column">
    <h1 class="title-left">Step 2 - Shipment</h1>
    <i>Select a shipment method</i>
    <form method="POST" action="/checkout/payment/">
        <input type="radio" value="0" name="shipmentmethod"> Collect<br />
        <input type="radio" value="1" name="shipmentmethod"> Deliver<br />
       <input type="submit" value="Go to Step 3" class="sexybutton sexysimple sexybestel pull-right" name="shipment">
    </form>
</div>

在凭据中包括我检查$_POST['edit']。如果已设置,我将再次显示表单,其中客户先前已在输入字段中填入数据。

问题

每当我第一次点击编辑按钮时,它都会抛出Connection was reset浏览器错误。如果我刷新页面,它会要求我再次提交表单。当我这样做时,错误消失了。我似乎无法弄清楚这是从哪里来的。我检查了服务器日志,但没有什么不寻常的。

*注意:* 在发货和付款步骤之间出现同样的问题。

相关htaccess

Options       +FollowSymLinks
RewriteEngine On
RewriteBase /

order allow,deny
allow from all
RewriteCond %{HTTP_HOST} ^tapijttegelhandel\.nl
RewriteRule ^(.*)$ http://www.tapijttegelhandel.nl/$1 [R=permanent,L]
AddDefaultCharset utf-8

RewriteRule ^checkout/               /index.php?mod=checkout&action=show [NC,L,QSA]

的index.php

case 'checkout':
    $action = isset($_GET['action']) ? $_GET['action'] : '';
    switch ($action) {
        case 'completed':
            # ...
            break;

        case 'cancelled':
            # ...
            break;

        case 'credentials':
        case 'shipment':
        case 'payment':
        case 'edit':
        default:
            include $_SERVER['DOCUMENT_ROOT'].'checkout/show.php';
            break;
    }
    break;

进度

  • 我已经转储了会话变量,以查看会话中是否存在异常。 (这里没什么奇怪的)
  • 我为firefox安装了Tamper Data插件来检查POST数据。 (这里也没什么奇怪的)

更新

我在上次检查所有内容时跳过了我的代码。然而,这可能与我的问题有关。

<script type="text/javascript">    
         window.history.forward();
         function noBack() { 
              window.history.forward(); 
         }
    </script>
</head>
<body onload="noBack();" onpageshow="if (event.persisted) noBack();" onunload="">

工作流

/cart GET 200 OK
/checkout/credentials/ GET 304 OK
/checkout/credentials/ POST 304 OK
# edit
/checkout/credentials/ POST - Error 'Connection was reset'
# Refresh
/checkout/credentials/ POST 200 OK

2 个答案:

答案 0 :(得分:3)

“连接已重置”

有时可能意味着php崩溃。如果没有看到确切的文件,就很难猜出是否以及为什么会发生这种情况。

确保检查error_log,输入:php --info | grep错误,看看它被记录到哪个文件(如果你在linux / unix上)。

我猜是一个流浪的假期;声明在某个地方看到这个答案可能的原因:https://stackoverflow.com/a/20036720/988324

你会在错误日志中找到一些这样的痕迹。如果你能提供这个,我可以提供更多帮助。

答案 1 :(得分:1)

action="/checkout/payment/"定义得好吗?我的意思是你可以尝试abosolute url,我在末尾看到一个可疑的斜线/,你也可以在索引上用method="POST"定义表单方法。如果影响

,你应该使用$_POST[] dunno检索所有内容