【问题标题】:Use Session as Array of Object.使用 Session 作为对象数组。
【发布时间】:2014-05-09 12:50:23
【问题描述】:

大家好,我是 php 中的新手,我被告知要编写一个购物车系统来添加和删除项目。我为每个类死记了两个类。项目类运行良好,但购物篮类在某些时候不断崩溃.这里是代码:

<?php
class produit
{
private $nom;
private $prix;
private $id;
private $categorie;
private $qty;
public function setProduit($nom,$prix,$id,$cat)
{
    $this->nom=$nom;
    $this->prix=$prix;
    $this->id=$id;
    $this->categorie=$cat;
    $this->qty=1;
}
public function getNom()
{
    return $this->nom;
}
public function getPrix()
{
    return $this->prix;
}
public function getCategorie()
{
    return $this->categorie;
}
public function getID()
{
    return $this->id;
}
public function getQty()
{
    return $this->qty;
}
public function changeQty()
{
    $this->qty+=1;
}
public function getThumb()
{
    try
    {
        require"connectionbd.php";
        $req="select images from bs_produits where id=:i";
        $res=$bdd->prepare($req);
        $res->execute(array('i'=>$this->id));
        $v=$res->fetch(PDO::FETCH_OBJ);
        $v->images=str_replace("../","",$v->images);
        $v->images.="/thumb1.png";
        return $v->images;

    }
    catch(Exception $e)
      {
        die('Erreur : ' . $e->getMessage().' a la ligne '.$e->getLine().' dans le fichier '.$e->getFile());
      }
}
  }
 ?>

以下是购物篮类代码:

<?php
 @session_start();
 include"prduitclass.php";
 class panier
  {
//le panier a un tableau de 10 produits

public function setPanier()
{
    if(!isset($_SESSION['basket']))
        $_SESSION['basket']=array();

}
private function lookforduplicate( $prod)
{
    echo"<script>console.log('".var_dump($prod->getNom())."')</script>";
    $i=0;
    $exit=0;
    if(empty($_SESSION['basket']))
    {
        return $exit;
    }
    else
    {
        foreach($_SESSION['basket'] as $produit)
            {
                if($produit->getID()===$prod->getID())
                {
                    $_SESSION['basket'][$i]->changeQty();
                    $exit=1;
                }
                $i++;
            }
        }
    return $exit;
}
public function addProduit( $prod)
{

    $v=0;
    if(!$this->lookforduplicate($prod))
    {

        array_push($_SESSION['basket'], $prod);
        $v=1;
    }
    else
        $v=0;
    return $v;
}
public function removeProduit( $prod)
{
    $i=0;
    foreach($_SESSION['basket'] as $produit)
    {
        if($produit->getID()===$prod->getID())
        {
            unset($_SESSION['basket'][$i]);
        }
    }
}


 }

 ?>

终于继承了我从 php 得到的错误:

致命错误:panier::lookforduplicate():脚本试图执行方法或访问不完整对象的属性。请确保您尝试操作的对象的类定义“产品”已在 unserialize() 被调用之前加载或提供 __autoload() 函数以在 C:\wamp 中加载类定义\www\bwanshop\panierclass.php 第 27 行

我不知道如何确定我的会话应该是“产品”类型的数组 篮子类中的foreach循环会给我一个错误请帮我解决这个谜题谢谢

【问题讨论】:

  • 错误信息建议在开始会话之前加载类定义(包括“prduitclass.php”;)。
  • 我刚刚检查并在可能出现 addToCart 按钮的所有页面上完成了它,并且您可能已经注意到,在篮子类顶部但仍然没有运气仍然得到相同的错误。如果我是加载类错误请告诉我如何加载(自动加载类?)
  • 我已经完成了它仍然得到相同的错误。var_dump($prod) 正确地显示对象(produit) 意味着它正确加载了类在我的代码中可能会导致什么? _autoload 函数工作正常,但它仍然在我的会话中存储一个未完成的对象
  • @fast 你能检查一下篮子课吗,也许我错过了什么

标签: php arrays session


【解决方案1】:

尝试在开始会话之前放置包含类 def 的行;也许在会话开始时,会话变量被反序列化并需要定义(错误消息听起来很像) - 像这样:

require_once "prduitclass.php";
session_start();

【讨论】:

  • 谢谢你,兄弟,我做错了..我在错误的文件中替换,因为我使用 ajax 发布到调用这些类的文件,我应该自己替换它而不是在篮子类文件我不好再次谢谢你
猜你喜欢
  • 1970-01-01
  • 2018-12-01
  • 2019-06-06
  • 1970-01-01
  • 1970-01-01
  • 2015-05-22
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
相关资源
最近更新 更多