防止浏览器错误再次转到上一页

时间:2013-01-19 14:00:57

标签: php mysql post-redirect-get

希望有人帮我解决这个问题。我有一个表单可以为用户选择所需的类别。我使用此表单的复选框让他们选择类别。在他们选择类别时,我在SESSION上保存所选类别,然后在该类别页面重定向到下一页。

这个过程是这样的......

if ( $totalCategory >= 1 && $totalCategory <= 10 ) {

    $_SESSION['category'] = $_POST['category']; 

    $url = BASE_URI . 'select_subject.php'; // Define the URL:      
            header("Location: $url");
            exit(); // Quit the script. 
}

我的问题是当页面重定向到下一页(select_subject.php)时,用户可能需要使用浏览器上的后退按钮再次返回类别页面以更改其选定的类别。但是当它发生时,它不会再次进入类别页面,并且浏览器会显示类似这样的错误......

  

文档已过期,此文档已不再可用。

注意:但是当我单击页面重新加载按钮页面时显示正确。

在这种情况下,我需要帮助某人避免这种情况,我需要再次显示类别页面,并正确显示以前选择的类别..

更新代码:

<?php

if ( isset($_GET['submitted_category'])) {

    if ( isset ( $_GET['category']) && is_array( $_GET['category'])) {

        $_SESSION['selectedcatcount'] = count( $_GET['category']);
        $totalCategory = count( $_GET['category']);

        if ( $totalCategory >= 1 && $totalCategory <= 10 ) {

            $_SESSION['category'] = $_GET['category'];              
            $url = BASE_URI . 'select_subject.php'; // Define the URL:      
                    header("Location: $url");
                    exit(); // Quit the script.         
        } else {        
            echo '<div class="error">
                    <img src="images/error.png" />
                    <p style="margin:2px 0 0;">Please select atleast 1, not more than 10 categories.</p>
                  </div>';          }           
    } else {                
        echo '<div class="error">
                <img src="images/error.png" />
                <p style="margin:2px 0 0;">This can not be empty. Please select atleast one category.</p>
              </div>';  
    }
}   

$q = 'SELECT * FROM category ORDER BY category_id';
$r = mysqli_query( $dbc, $q);

$c = 0;
$i = 0;

echo '<form action="" method="get" accept-charset="utf-8">';
echo '<table><tr>'; 

    while($row = mysqli_fetch_array( $r, MYSQLI_ASSOC  )){

        // if remainder is zero after 2 iterations (for 2 columns) and when $c > 0, end row and start a new row:  
        if( ($c % 2) == 0 && $c != 0){
            echo "</tr><tr>";
        }
        echo '<td width="50%">
                <input type="checkbox" name="category[]"  value="' . $row['category_id'] . '" />' . $row['category_name'] . 
             '</td>';
    $c++; 

    } // while..
        // in case you need to fill a last empty cell:
        if ( ( $i % 2 ) != 0 ){
        // str_repeat() will be handy when you want more than 2 columns
          echo str_repeat( "<td>&nbsp;</td>", ( 2 - ( $i % 2 ) ) );
        }
    echo "</tr></table>";
?>
                        </div>                  
                        <div class="continue">
                            <p>Please click 'Continue' button to proceed to next step</p>
                            <input type="submit" value="Continue" class="continue-btn" />
                            <input type="hidden"   name="submitted_category"   value="TRUE" />
                        </div>
                        </form> 

希望有人帮帮我.. 谢谢..

2 个答案:

答案 0 :(得分:1)

如果您使用$ _GET方法,则不会遇到此问题,请更改您的表单方法以获取并尝试它。

答案 1 :(得分:1)

使用此代码......

if ( $totalCategory >= 1 && $totalCategory <= 10 ) {

    //Replace the following line 
    $_SESSION['category'] = $_POST['category']; 

    //with the line below
    $_SESSION['category'] = $_GET['category'];

    $url = BASE_URI . 'select_subject.php'; // Define the URL:   e fio

        header("Location: $url");
        exit(); // Quit the script. 
}

感谢您分享您的代码,但您忘了告诉我哪个错误正在触发。让我们仔细看看吧。您是否正确地声明了输入意味着

 <input type="checkbox" name="category[]" value="....">
 <input type="checkbox" name="category[]" value="....">
 <input type="checkbox" name="category[]" value="....">

然后提交

 <input type="submit" name="submitted_category" value="Submit Categories">

,在您重定向之前,按下提交按钮后,您的网址应该如下所示。

 select-category.php?category[]=2&category[]=3&category[]=7..........

还有很多取决于你得到的错误。