我有一个简单的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有大量的代码,只是不知道什么是重要的。
答案 0 :(得分:0)
不确定这是不是答案,但我在网上找到了这个:
“header()用于发送特定的原始HTTP / 1.1规范 头。必须在发送任何实际输出之前调用header() 以下示例将不起作用:“
现在我知道这在Linux网络服务器上托管的网站上给我带来了问题。在Windows托管的服务器上,我看起来有更多的重定向代码的余地(它在HTML中的位置并不那么挑剔)。
如果可以,请在基于Windows的服务器上尝试代码。如果它仍有问题,则可能不是标题。
此外,尝试重定向到您正在使用的php页面(例如example.php)而不是$ _SERVER ['PHP_SELF']。这可能也会导致问题,因为代码正试图做一些额外的步骤,可能会把事情搞砸。