- Home
- Categorie
- Coding e Sistemistica
- Coding
- Dubbi e problemi gestione sessioni
-
ma in teoria dentro $_SESSION["carrello"] non ho un elemento di tipo carrello?? io volevo recuperare i dati di QUEL carrello, aggiungerci i prodotti, e aggiornarlo nuovamente alla fine con $_SESSION["carrello"]=$cart ..
ci deve essere qualcosa che non ho capito bene..
-
[php]
$cest = new cart();
$cest= $_SESSION["carrello"];
$cest->printcart();
[/php]
Allora la prima riga puoi tranquillamente toglierla, non ha senso creare un istanza per poi sostituirla subito.
Dall'errore sembra manchi la definizione della classe, cioè tu fai:
[php]
$cest= $_SESSION["carrello"];
[/php]Ma prima di fare questo devi avere:
[php]
class cart
{
.....
}
[/php]
Se manca ottieni quell'errore.
-
Ah ok, non devo creare un istanza della classe per poterci passare il valore (il mio era un approccio molto Java)!!
La classe del carrello non dovrebbe essere nell' include_once("cart.php");
Ora modifico qualcosa e tengo aggiornato il post!
Grazie per l'interessamento
-
Se la definizione della classe è in include_once("cart.php"); prova a spostare l'include in modo venga incluso prima di session_start.
EDIT: Altrimenti puoi serializzare l'oggetto prima di salvarlo nella sessione.
-
Penso di aver individuato la fonte di problema! Se seguo l'iter normale di vendita quindi:
Pagina con dettagli --> Form per la quantita --> Cesta riassuntiva
mi da la tabella che mi deve stampare. Ho messo un messaggio di stampa del carrello (print_r($_SESSION["carrello"]) prima della stampa dei prodotti se il carrello risultava con alcuni oggetti. Il risultato è:cart Object ( [id] => Array ( [0] => PR00 ) => Array ( [0] => 3 ) => Array ( [0] => 0 ) [precio] => Array ( [0] => 1200 ) )
Se subito dopo riclicco sul bottone che mi dovrebbe riportare alla stessa pagina html (la solita cesta) ottengo come risultato:
__PHP_Incomplete_Class Object ( [__PHP_Incomplete_Class_Name] => cart [id] => Array ( [0] => PR00 ) => Array ( [0] => ) => Array ( [0] => 0 ) [precio] => Array ( [0] => 1200 ) )
e un bel messaggio d'errore
Fatal error: main() [function.main]: The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "cart" of the object you are trying to operate on was loaded before unserialize() gets called or provide a __autoload() function to load the class definition in C:\Portale\wamp\www\segurafinal\stampCarr.php on line 8
il problema è quindi che lui si ricorda le caratteristiche del'oggetto, ma non ricorda che è un elemento della classe cart.php!!
Può essere questa la fonte di tutto il problema?? consigli per risolverlo??
-
Hai spostato l'include come ti ho indicato sopra?
-
sisi.. la chiamata aggiungiProdotto è così:
[php]
<?php
include_once("cart.php");
include_once("startSess.php");
//necessario sennò non riconosce il metodo add
$cart= new cart();
//questo non me lo stampa mai!
if (isset($_SESSIO["carrello"])) echo "carrello riconosciuto";
$cantidad= $_POST['cantidad'];
$cart->add("PR00",$cantidad,0,1200);
$_SESSION["carrello"]= $cart;
include('cesta.html');?>
[/php]e la stampaCarrello.pho inclusa in cesta.html è
[php]
<?php
include_once("cart.php");
include_once("startSess.php");
$cest= new cart();
if(isset($_SESSION["carrello"])){
print_r($_SESSION["carrello"]);
print_r($_SESSION["carrello"]);
$cest= $_SESSION["carrello"];
$cest->printcart();
} else {
$cest->printcart(); }
?>
[/php]ed è questa che stampa l'errore che riferivo
-
Hai provato a serializzare l'oggetto prima di metterlo in una variabile di sessione?
-
se con serializzare intendi fare serialize() sul dato prima di inserirlo e su unserialize() sul $_SESSION si si ci ho provato ma non va..
Esistono altri modi?
-
Teoricamente in quel modo dovrebbe funzionare, io ho anche provato in locale e non ho problemi a fare quello che fai tu.
È abbastanza strano...
-
anche io sto lavorando in locale ed è così che deve funzionare il mio portale per l'esame!
Io sto utilizzando WAMP server con Apache, MySQL e PHP, mi sembra che tutto mi funzioni a parte questo della gestione delle sessioni!!
Non so cosa può essere, devo fare delle modifiche ai file dei programmi (httpd.conf, php.ini, my.ini) ???Io la seriazizzazione l'avevo fatta così:
caricaprodotto.php
[php]
<?php
include_once("cart.php");
session_start();
$cart= new cart();
//questo non me lo stampa mai!
if (isset($_SESSION["carrello"])) {
$cart= unserialize($_SESSION["carrello"]);
$cart->add("PR00",$cantidad,0,1200);
$resul= serialize($cart);
$_SESSION["carrello"]= $resul;
}else{
$cantidad= $_POST['cantidad'];
$cart->add("PR00",$cantidad,0,1200);
$resul= serialize($cart);
$_SESSION["carrello"]= $resul; }
include('cesta.html');?>
[/php]stampacarello.php
[php]
<?php
include_once("cart.php");
include_once("startSess.php");
$cest= new cart();
if(isset($_SESSION["carrello"])){
print_r($_SESSION["carrello"]);
$cest= unserialize($_SESSION["carrello"]);
$cest->printcart();
} else {
$cest->printcart(); }
?>
[/php]ma ottengo come risultato*
( ! ) Warning: unserialize() expects parameter 1 to be string, object given in C:\Portale\wamp\www\segurafinal\aggCamDom.php on line 7! ) Fatal error: Call to a member function add() on a non-object in C:\Portale\wamp\www\segurafinal\aggCamDom.php on line 8
e non continua..* Ho sbagliato qualcosa io??