Dubbi e problemi gestione sessioni

GHoldenBoy

Nuovo Utente
24 Giu 2011
5
0
0
Ciao,
mi sono approcciato al PHP da poco comunque sto cercando di scrivere un portale di e-commerce in PHP e HTML che lavora in locale con base dati MySQL collegato all'ERP AbanQ. Il mio approccio è stato, html per le pagine (mostrare immagini, informazioni..) e php per gestire le varie funzioni delle pagine (si fa così, no?).
Ho due problemi fondamentali che riguardano entrambi l'utilizzo delle variabili di sessione: il carrello e il sistema di login.
Gli ho implementati entrambi ma appena cambio pagina perdo tutti i dati che avevo salvato nella prima.

Spiego con un po' più di dettaglio il problema del carrello che penso quando avrò risolto questo il comportamento da usare nel login sarà esattamente identico:
- carrello.php rappresenta il concetto di carrello, con la possibilità di aggiungere/togliere articoli (costruito anche grazie alla guida su questo sito!)
- carico i prodotti presenti su una base dati MySql. Il cliente può selezionare il prodotto che desidera e verrà indirizzato ad una pagina html con le caratteristiche del prodotto che contiene un form per l'aggiunta di una determinata quantità di prodotto nel carrello
- cesta.html dovrebbe mostrare i contenuti del carrello
Per intenderci:
Prodotti [.html] --> Pagina delle specifiche prodotto con Form [.html] --> form [.php] --> stampaCarrello [.html]

Ho letto molto sull'argomento, ma non riesco ancora a capire dove è carente ciò che ho programmato. Qualche consiglio?
Dubbi amletici:
1) La funzione session_start() va eseguita anche se non sono necessari i dati all'interno della pagina html?
2) Sbaglio perchè sto usando troppo html (non so, è davvero poco che programmo con php, magari alcune funzioni non sono supportate in html)? Devo rifare tutto con estension php?
3) Sto lavorando in locale, c'è qualcosa che devo cambiare nelle impostazioni del file php.ini??
4) Perchè sono sbagliati i pezzi commentati in cesta.html? (vedi codice che segue)
5) è un errore creare un nuovo elemento carrello nel php? credo che lì dovrei aggiungere un controllo..

Inserisco un po' di codice per farvi capire meglio:
* specificheProdotto.html (solo parte col form):
HTML:
<!--- parte grafica --->
 <FORM action="aggCamDom.php" method="post">            
 <font size="3pt">PRECIO: 1200 euro </font><br/> 			 
 <font size="3pt">Número de unidades </font> 			  
<input type="text" name="cantidad" size="20"><BR>  			 
 <INPUT type="submit" value="Anadir a la cesta"><BR></p>         
</FORM>

aggCamDom.php
PHP:
<?php
    session_start();
    include("carrello.php");
    $cart = new carrello();
    $cantidad= $_POST['cantidad'];
    $cart->add("PR00",$cantidad,0,1200);
    $_SESSION["carrello"]= $cart;
    include('cesta.html');
?>

Cesta.html
HTML:
<?php session_start(); ?>

<!------ vario per implementare interfaccia HTML --------->

 <?php
//Qui se metto:
// import("carrello.php"); $cesta= new carrello();
//mi da errore (mi dice che non posso richiamare carrello.php) ma pensavo si dovesse fare così!
     $cesta= $_SESSION['carrello']; 
        $cesta->printcart();
 ?>

Se eseguo queste istruzioni pari pari mi appare su cesta.html il contenuto del carrello che deve avere.. Se poi però mi metto a navigare e quindi dalla pagina cesta.htlm passo, non so, nuovamente all'index.html ritornando a cesta.html mi da quest'errore:


Codice:
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 "carrello" 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\cesta.html on line 25
 
Ultima modifica:

dreamer86

Utente Attivo
15 Apr 2011
42
0
0
rafalmachalek.it
1) La session_start() devi invocare soltanto nei file dove intendi usare le variabili di sessione.
2) Non ho capito cosa intandi con usare troppo html.
3) A prima vista non c'è niente che dovresti cambiare nel file php.ini. Però ho notato che usi il codice php nei file .html e questo deve essere specificato nella configurazione del server web in modo che interpreti il codice php.
4) Visto che nel aggCamDom.php includi carrello.php e poi includi anche Cesta.html. Nel Cesta.html includi nuovamente carrello.php. Alla fine il file carrello.php sarà incluso due volte e se questo file contiene delle dichiarazioni ci sarà errore della ridichiarazione delle funzioni o classi. Usa include_once.
5) Non è un errore creare nuovo elemento carrello nel php se questo carrello è stato precedentemente dichiarato.
 

GHoldenBoy

Nuovo Utente
24 Giu 2011
5
0
0
ho provato a modificare qualcosa ma sono ancora più confuso!! Ho pensato che era possibile gestire la stampa del carrello non da cesta.html ma con un altra funzione in .php e ho pensato di modificare i php dei form per l'aggiunta del preciso prodotto al carrello per effettuare un miglior controllo:

*aggiungiProdotto.php
PHP:
<?php
	session_start();
//controllo se già esiste un carrello
	if(isset($_SESSION["carrello"])){
                print_r($_SESSION["carrello"]);
		include("cart.php");
		$cest = new cart();
//esiste quindi modifico il carrello esistente
		$cest= $_SESSION["carrello"];
		$cantidad= $_POST['cantidad'];
		$cest->add("SE00",1,0,50);
		$_SESSION["carrello"]= $cest;
		include('cesta.html');
	}else{
//non esiste, creo un nuovo carrello
		include("cart.php");
		$cest = new cart();
		$cantidad= $_POST['cantidad'];
		$cest->add("SE00",1,0,50);
		$_SESSION["carrello"]= $cest;
		include('cesta.html'); 
	}
?>

stampaCest.php inclusa in cesta.html
PHP:
<?php 
session_start();
if(isset($_SESSION["carrello"])){
	include_once("cart.php");
	$cest = new cart();
	$cest= $_SESSION["carrello"]; 
	$cest->printcart();
} else {
		echo "carrello vuoto!"; }
?>

Con queste modifiche, non mi stampa più nemmeno il primo carrello, non mi aggiunge proprio i prodotti.. Perchè?
Il print_r($_SESSION["carrello"]) in aggiungiProd.php dopo il controllo dell'esistenza del carrello mi da come risultato:
Codice:
__PHP_Incomplete_Class Object ( [__PHP_Incomplete_Class_Name] => cart [id] => Array ( [0] => PR01 ) [qt] => Array ( [0] => 5 ) [vt] => Array ( [0] => 0 ) [precio] => Array ( [0] => 70 ) ) 

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\aggCamEst.php on line 9

anche se è la prima volta che effettuo un acquisto.. come mai???
 

dreamer86

Utente Attivo
15 Apr 2011
42
0
0
rafalmachalek.it
Prima di usare il carrello contenuto nella variabile della sessione $_SESSION['carrello'] la classe del carrello deve essere già dichiarata nel file. Quindi prima di utilizzare il carrello includi il file con la definizione della classe carrello.
 

GHoldenBoy

Nuovo Utente
24 Giu 2011
5
0
0
Ho modificato così l'aggiunta dei prodotti:
PHP:
<?php
	session_start();
	include_once("cart.php");
	if(isset($_SESSION["carrello"])){
		$cart = new cart();
		$cart= $_SESSION["carrello"];
		$cantidad= $_POST['cantidad'];
		$cart->add("PR00",$cantidad,0,1200);
		$_SESSION["carrello"]= $cart;
		include('cesta.html');
	}else{
		$cart = new cart();
		$cantidad= $_POST['cantidad'];
		$cart->add("PR00",$cantidad,0,1200);
		$_SESSION["carrello"]= $cart;
		include('cesta.html'); 
	}
?>
questo per ogni tipo di prodotto che si può inserire

il session_start() va inserito anche nelle pagine html in cui ci sono i vari "include()" dei file php?? Ho provato sia con che senza ma non mi da importanti svolte!!


p.s. grazie dreamer86 per lo sbattimento!
 

dreamer86

Utente Attivo
15 Apr 2011
42
0
0
rafalmachalek.it
Basta che prima di usare le variabili della sessione la sessione è stata creata con session_start(). In teoria cercare di aprire due volte la sessione nello stesso file (quindi compreso anche le sue inclusioni) crea un errore a livello di notifica. Una buona norma sarebbe creare un file separato dove invochi la funzione session_start() e poi la includi con include_once oppure require_once nei file che hanno bisogno. In questo modo eviti che la funzione session_start() viene invocata sia direttamente nel file sia nelle sue inclusioni.
 

GHoldenBoy

Nuovo Utente
24 Giu 2011
5
0
0
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 ) [qt] => Array ( [0] => 3 ) [vt] => 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 ) [qt] => Array ( [0] => ) [vt] => 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??
 

dreamer86

Utente Attivo
15 Apr 2011
42
0
0
rafalmachalek.it
Errore fatale è causato del fatto che stai usando un oggetto prima che è stata dichiarata la classe in quel file. Oggetto derivato dal esterno (nel tuo caso dalla variabile di sessione) contiene tutte le informazioni delle sue proprietà ma per eseguire i metodi di quel oggetto serve dichiarazione della classe. Assicurati che nel file stampCarr.php in quelche ramo if non arrivi a usare il carrello senza prima aver invocato include sul file contenente la dichiarazione della classe carrello.
 
Discussioni simili
Autore Titolo Forum Risposte Data
R Dubbi trasferimento sito WordPress 1
R Dubbi copia sito CMS (Content Management System) 3
R DUBBI PORTFOLIO WEB DESIGN CMS (Content Management System) 2
L Dubbi su un account instagram da comprare Discussioni Varie 1
L Domini Alias, Redirect o Domini aggiuntivi con cPanel: dubbi Domini 1
Tonynox Creazione Sito Web - Dubbi e perplessità su prima esperienza Domini 6
franco69 [Javascript] dubbi metodi di inserimento codice inline Javascript 2
asevenx dubbi su window.print(); Javascript 0
V Le sessioni: ho dei dubbi sul posizionamento PHP 6
V [Guida]: ho dubbi sulle Join MySQL 13
filips Dubbi scrittura su disco Javascript 1
E dubbi su grafi e liste di adiacenza. C/C++ 0
A Dubbi con form fatto in html e css HTML e CSS 7
R Dubbi Incolonnamento Layout con Bootstrap. HTML e CSS 1
R E-Commerce: parecchi dubbi. E-Commerce 2
filippino Dubbi per iscrizione sito a DMOZ SEO e Posizionamento 1
Z Redirect 301 per restyling sito: dubbi e consigli SEO e Posizionamento 0
S [RISOLTO] dubbi crontab Linux e Software 3
asevenx dubbi per sito wordpress: menu categorie e articoli di una categoria riportati nella colonna WordPress 1
M Myqli prepared statements dubbi MySQL 2
N dubbi "community" PHP 3
M dubbi sui meta tag in ogni pagina SEO e Posizionamento 5
P Dubbi PHP 4
borgo italia dubbi sul codice Discussioni Varie 5
borgo italia html5: dubbi sulla compatibilità HTML e CSS 20
P Joomla: dubbi sulla licenza di un template Joomla 2
T photoshop cs2 e dreamwever cs3 dubbi e perplessità Webdesign e Grafica 34
C Vorrei imparare...ma quanti dubbi! Discussioni Varie 2
L Dubbi di un'inesperta Hosting 3
R DUBBI con alcuni JavaScript Javascript 2
F Problemi visualizzazione mappa Android studio Sviluppo app per Android 0
S Problemi Javascript + Aruba Javascript 2
A Problemi con move_uploaded_file PHP 7
M Problemi con la stampa dei valori in php PHP 1
L Problemi con il login PHP 2
L Problemi form Pagina php HTML e CSS 3
R Tutto su utf-8 ma ancora problemi con i caratteri speciali in mysql MySQL 1
Z problemi con foreach insert into PHP 10
B javascript per problemi con pdf e Safari Javascript 0
N Problemi kit videosorveglianza IP Cam e Videosorveglianza 0
M Problemi con creazione maschere Presentati al Forum 1
M Problemi con query a più tabelle PHP 3
R Problemi anomalo insermento in db PHP 9
S Problemi delle funzioni eliminate con PHP e MySQL PHP 4
S Problemi di un principiante PHP 3
M Problemi con blog Grav CMS (Content Management System) 0
F Problemi di visualizzazione di un sito su più browser WordPress 0
S Problemi di visualizzazione form contatti sito web HTML e CSS 2
S incoerenza di stampa. problemi con il magenta Photoshop 3
A problemi con paypall Java 1

Discussioni simili