使用Post / Redirect / Get但是当页面被重定向时,我仍然需要刷新

时间:2012-02-21 19:53:47

标签: php post

我有一个简单的Post / Redirect / Get功能,所以当用户将产品添加到他们的购物车时,在他们之后刷新页面时它不会添加另一个产品。

这是我的代码:

    <?php
include("wfcart.php"); ?>
<?php session_start(); ?>
<?php $cart =& $_SESSION['cart'];
if(!is_object($cart)) $cart = new wfCart(); 

    $user_id = get_current_user_id();

    $query = mysql_query("SELECT SUM(value) FROM wp_scloyalty WHERE userid = '$user_id'");
    $totalpoints = mysql_result($query, 0);   

    $purchasevalue=array(); ?>

    <?php $sqlprize="SELECT prizeid FROM wp_scloyalty_orders WHERE  userid = '$user_id'";

    $resultprize=mysql_query($sqlprize); ?>

    <?php while($rows=mysql_fetch_array($resultprize)){  

            query_posts('post_type=prizes&showposts=-1&p='.$rows['prizeid'].''); while (have_posts()) : the_post(); 
            $my_meta = get_post_meta($post->ID,'_my_meta',TRUE);

            $purchasevalue[] = $my_meta['pointsvalue'];

            endwhile; 
            wp_reset_query();  
    }

    $calctotalnew = $totalpoints - array_sum($purchasevalue);



    if($_POST['purchase']) {

            foreach($cart->get_contents() as $item) {

                $sql="INSERT INTO wp_scloyalty_orders VALUES (".$user_id.", ".$item['id'].")";
                $result=mysql_query($sql);

            }

            $cart->empty_cart();

            unset($_SESSION['cart']);           

    }       

    $err = array();
    if($_POST['add']) {
        query_posts('post_type=prizes&showposts=-1&p='.$product_id.''); while (have_posts()) : the_post(); 
        $my_meta = get_post_meta($post->ID,'_my_meta',TRUE);

        if($calctotalnew > $my_meta['pointsvalue']){
            $cart->add_item(get_the_id(), 1, $my_meta['pointsvalue'], get_the_title());

        }else{  
            //echo 'You do not have sufficient points to redeem this product...';
            $err[] = "You do not have sufficient points to redeem this product..."; 
        }

        endwhile; 
        wp_reset_query();  

        if (!$err) {  
            // if no errors - saving data 
            // and then redirect:
            header("Location: ".$_SERVER['PHP_SELF']."/my-account");
            exit;
        }  else {
            // all field values should be escaped according to HTML standard
            foreach ($_POST as $key => $val) {
                $form[$key] = htmlspecialchars($val);
            }   
        }   

    }// else {
    //      $form['add'] = $form['add'] = '';  
    //}


?>

所以我的问题是,当我从购物车确认购买时,页面上有一个部分显示用户剩余资金。为了查看新余额,他们必须在购买后刷新页面。

我只是想知道我在这里做错了什么......可能与标题有关:位置的事情?我注意到事情确实取决于不同$ _POST的IF语句的顺序,但似乎不能使它在购买时自动更新余额:/

谢谢!很抱歉btw有大量的代码,只是不知道什么是重要的。

1 个答案:

答案 0 :(得分:0)

不确定这是不是答案,但我在网上找到了这个:

  

“header()用于发送特定的原始HTTP / 1.1规范   头。必须在发送任何实际输出之前调用header()   以下示例将不起作用:“

现在我知道这在Linux网络服务器上托管的网站上给我带来了问题。在Windows托管的服务器上,我看起来有更多的重定向代码的余地(它在HTML中的位置并不那么挑剔)。

如果可以,请在基于Windows的服务器上尝试代码。如果它仍有问题,则可能不是标题。

此外,尝试重定向到您正在使用的php页面(例如example.php)而不是$ _SERVER ['PHP_SELF']。这可能也会导致问题,因为代码正试图做一些额外的步骤,可能会把事情搞砸。