我有一段代码给我带来了麻烦 我试图从php类函数中获取订单值:
public function generalSettings(){
$totalprijs = 0;
foreach($_SESSION['items'] as $key => $value){
$products->setProduct($key);
$totalprijs = $totalprijs + ($products->prijs_exBTW * $value);
}
$inclbtw = ($totalprijs * ('1.'.$this->BTWPercnt));
if($totalprijs > $this->franco_vanaf){
$verzendkosten = 0;
}else{
$verzendkosten = $this->verzendkosten;
}
$btw = ($totalprijs + $verzendkosten) * ('0.'.$this->BTWPercnt);
if($totalprijs > $this->franco_vanaf){
$totaalInc = ($totalprijs + $btw);
}else{
$totaalInc = ($totalprijs + $btw + $this->verzendkosten);
}
$return = array(
"subtotaal" => $totalprijs,
"btw" => $btw,
"inclbtw" => $inclbtw,
"verzendkosten" => $verzendkosten,
"totaalInc" => $totaalInc
);
return($return);
}
当我从类中访问此函数时,它可以工作。
当我在我的结帐中调用其他使用此功能的功能时,它可以工作。
但是当我尝试在我的AJAX处理文件中访问它时,它说:
Warning: Invalid argument supplied for foreach()
当我在ajax文件中调用函数时,代码如下:
if($isValid == true){
unset($notneeded);
$notneeded = array("ww1","ww2","huisnr","vhuis","companyvat","companyname","tel","firstname","lastname");
foreach($_POST['gegevens'] as $key => $value){
if(in_array($key,$verplichtArray) && (!in_array($key,$notneeded))){
$fields .= "`".$key."`,";
$values .= "'".$value."',";
}
}
$shoppingcar = new Winkelwagen;
$order = $shoppingcar->generalSettings();
$fields .= '`timestamp`,`klant`,`totaal`,`totaalInc`,`verzendkosten`,`status`,`betaalmethode`';
$values .= "now(),'".$acc->id."','".$order['subtotaal']."','".$order['totaalInc']."','".$order['verzendkosten']."','3','".mysql_real_escape_string($_POST['betaalwijze'])."'";
if(isset($_POST['gegevens']['V'])){
$fields .= ',`V`';
$values .= ",'X'";
}
$message = "INSERT INTO order (".$fields.") VALUES (".$values.")";
}
似乎当我从ajax文件调用该函数时,会话是空的 但是当我从我调用ajax文件的文件中调用该函数时,它工作得很好。
有谁能解释我做错了什么?
修改
我用来按要求调用ajax文件的jquery:
$('#afrekenen').click(function(){
clearInterval(myInterval);
var fields = $('.addressform :input');
$.each(fields, function(field,val){
$(val).removeClass('errorInput');
})
var gegevens = {};
var adresform = $('.addressform').serializeArray();
$.each(adresform, function(index, val){
gegevens[this.name] = this.value;
});
if(!$('input[name=payment]:checked').val()){
var betaalwijze = 0;
}else{
var betaalwijze = $('.betaalwijze').val();
}
var voorwaarden = $('input[name=voorwaarden]:checked').val();
$.ajax({
type: 'post',
url: '/inc/afrekenen.php',
data: {"gegevens":gegevens ,"betaalwijze":betaalwijze,"voorwaarden":voorwaarden},
success: function(data) {
response = jQuery.parseJSON(data)
if(response.isValid == false){
$('#errormsg').html('<div class="alert alert-danger">'+
'<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>'
+response.message+'</div>');
$.each(response.fouteVelden, function(index, object){
$('#'+object+'').addClass('errorInput');
});
}else{
$('#errormsg').html('<div class="alert alert-success">'+
'<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>'
+response.message+'</div>');
}
}
});
});
如果有的话 ob_start(); tag和session_start();标签
当我尝试print_r时,只有以某种方式链接到我的班级的会话返回1,其余的会话仍然存在
我的代码第一部分中的$ _SESSION [&#39;项目&#39;]的foreach是不行的 代码的所有其他部分都工作
修改
一夜好眠似乎解决了冲突...... 不知道错误是什么,也不知道我是如何修复错误但它有效! 感谢您的建议:)
答案 0 :(得分:2)
如果/inc/afrekenen.php与您的班级在同一个域中,则会话共享 和phpsid cookie一起传递你的ajax请求。 在这种情况下,唯一的问题是你的会话没有在/inc/afrekenen.php中启动。
验证会话是在/inc/afrekenen.php中启动的。
答案 1 :(得分:0)
// print $_POST['gegevens'] if it is returning you a json string so
// do this
$postDataGegevens = json_decode($_POST['gegevens']);
// if $postDataGegevens in current format
// then pass in foreach
foreach($postDataGegevens as $key => $value){
// your code here ...
}
答案 2 :(得分:0)
我注意到我的会话保存在
中session_save_path('../tmp');
将此添加到我的ajax文件的顶部,它起到了神奇的作用
感谢您的建议