PDA

View Full Version : مشکل با کلاس و کوکی بر روی هاست



mamad_za
دوشنبه 02 فروردین 1395, 05:39 صبح
سلام دوستان من یه سایت نوشتم رو لوکال درست اجرا میشه اما وقتی رو هاست آپلود کردم تو قسمت اضافه کردن کالا به سبد خرید که با کوکی نوشتم ارور میده و اضافه نمی کنه
دوستان اگه میشه راهنمایی کنید ممنون میشم.

ارور:

Warning: Invalid argument supplied for foreach() in /home/srgirani/public_html/basket/product.cl.php on line 16


<?php
class Cart
{

//Add a product order to our COOKIE/JSON based cart.

public function AddProduct($productid, $quantity)
{
$x=0;
//Checks to see if cart already exists.

if (isset($_COOKIE['Cart']))
{
//JSON content is turned back into array.
$cart = json_decode($_COOKIE['Cart']);
foreach ($cart as $order => $product)
{
//Check to see if $products key ($order) matches the $products key we wish to remove.
if($product[0] == $productid)
{

//If result is false add product order to new array.
$record=$order;
$x=1;
}


}
if($x==1){

}else{
$cart[] = array($productid,$quantity);

//Encode cart array back into JSON.

$createcart = json_encode($cart);

setcookie('Cart',$createcart,time()+3600);
}
}
else
{
$cart = array();
$cart[] = array($productid,$quantity);

//Encode cart array back into JSON.

$createcart = json_encode($cart);


setcookie('Cart',$createcart,time()+3600);
}

//Add product id and quantity desired to cart.



}

//Displays our Cart to the page.

public function DisplayCart()
{

if (isset($_COOKIE['Cart']))
{

$cart = $_COOKIE['Cart'];

//JSON content is turned back into array.

$products = json_decode($cart);

//Loop through Cart array to display relevant Cart info.
//print_r($products);
foreach($products as $order => $product)
{
$myarr[]=$product[0];

//echo '<p>';
//echo $order;
//echo $product[0];
//echo $product[1];
//echo '</p>';
}
return $myarr;
}
else
{
echo 'No Products In Cart';
}

}

//Remove product order from Cart.

public function RemoveProduct($orderid)
{

$cart = $_COOKIE['Cart'];

//JSON content is turned back into array.

$products = json_decode($cart);

$newcart = array();

foreach ($products as $order => $product)
{

//Check to see if $products key ($order) matches the $products key we wish to remove.
if($product[0] != $orderid)
{

//If result is false add product order to new array.

$newcart[] = array($product[0], $product[1]);

}

}

//Encode new Cart array into JSON.

$createcart = json_encode($newcart);

setcookie('Cart',$createcart,time()+3600);

}
public function CountCart()
{

if (isset($_COOKIE['Cart']))
{

$cart = $_COOKIE['Cart'];

//JSON content is turned back into array.

$products = json_decode($cart);

//count array.

$count=count($products);
return $count;

}
else
{

return '0';

}

}
}


?>

قمست اجرایی کد:

<?php
if(isset($_POST['addtobasket']) && !empty($_POST['addtobasket'])){
$id=clearxss($_POST['id']);
require_once('basket/product.cl.php');
$cart=new Cart();
$cart-> AddProduct($id,'1');
//echo "yes";

//header("Location: http://www.srgiran.com/index.php?srg=basket");
}

?>

mamad_za
دوشنبه 02 فروردین 1395, 13:56 عصر
من الان یه مقدار تحقیق کردم دیدم که این ارور زمانی رخ میده که اون متغییری که ما تو foreach استفاده کردیم ، از نوع آرایه نباشه و چنتا راه داره واسه حل کردنش اینکه
یکی چک کنیم که آرایه هست یا نه اگه بود اجرا کنه
if (is_array($items)) {
یا اینکه اول متغییرمون (array) بزاریم
اما چنتا چیزی که بوجود میاد اینکه این کد داره رو لوکال من کار می کنه اینطوری باشه که باطل میشه:قهقهه::قهقهه:

بزارید من ساختار این کد رو توضیح بدم شاید یه بنده خدایی بهم کمک کرد
وقتی روو یه محصول رو قسمت اضافه به خرید کلیک میشه میاد چک می کنه اگه وجود داشت که اضافه نمی کنه اگه وجود داشت به آخر آرایه اضافه میکنه
الان من یه حدسی که می زنم موقع ذخیره کوکی یا یه سری اطلاعاتش رو حذف می کنه یا حداقل به صورت آرایه ذخیره نمی کنه

plague
سه شنبه 03 فروردین 1395, 10:40 صبح
یه var_dump بکن محتویات کوکی رو وقتی دیکد میکنی ببین چیه

mamad_za
سه شنبه 03 فروردین 1395, 11:35 صبح
اولین بار که null سری بعد که پر میشه دوباره یه کالای جدید انتخاب می کنم روش نوشته میشه
این سایتشه خودتون هم یه نگاه بندازین echo گرفتم می تونید ارور هم ببینید.
www.srgiran.com

mamad_za
سه شنبه 03 فروردین 1395, 11:44 صبح
اینجا رو یه نگاه بندازید : خیلی جالبه :
this is var dump: string(16) "[[\"40\",\"1\"]]"
this is print_r:[[\"40\",\"1\"]]
this is var dump after decode: NULL

این echo ها رو به ترتیب انجام دادم

plague
سه شنبه 03 فروردین 1395, 17:43 عصر
اینجوری دیکد کن


$products = json_decode($cart , true);

mamad_za
سه شنبه 03 فروردین 1395, 18:13 عصر
ممنونم دوست عزیز مشکل و پیدا کردم مشکل اینجا بود که من رو لوکال رو ورژن 5.6 کار می کردم اما سرور من رو 5.3 ست بود کدهام درست بود باز هم ممنون که وقت گذاشتین