Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Dubbi e problemi gestione sessioni E-Shop

    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.
    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
    - 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]


    camera.html con il Form:
    codice:
     <FORM action="aggCamDom.php" method="post">            
     <font size="3pt">PRECIO: 1200 euro </font>
     			 
     <font size="3pt">Número de unidades </font> 			  
    <input type="text" name="cantidad" size="20">
      			 
     <INPUT type="submit" value="Anadir a la cesta">
     		  </p>         </FORM>
    aggCamDom.php
    Codice 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
    codice:
    <?php session_start(); ?>
    
    
    
     <?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
    Ho letto molto sull'argomento, ma non riesco ancora a capire dove è carente ciò che ho programmato. Qualche consiglio?
    I dubbi chiave:
    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)?
    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?

    Vi ringrazioin anticipo per l'aiuto!! Se ce ne dovesse essere bisogno inserirò anche più parti di codice

  2. #2
    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
    Codice 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
    Codice 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???

  3. #3
    Utente di HTML.it L'avatar di gasmor
    Registrato dal
    Apr 2004
    Messaggi
    1,768
    ti consiglio di lasciar perdere le sessioni ma di salvare tutto su db + cookie

    http://php.html.it/articoli/leggi/90...tenti-con-php/

    capito questo concetto ed aggiornato il tuo sito a questa tecnica puoi iniziare a pensare al carello...
    Hai provato a creare un sito con Jaaxo Cms PHP5? new!

  4. #4
    Grazie, adesso ci guardo!!

    Ma dici di abbandonare le session perchè:
    a) non le ho capite io e c'è qualcosa che sbaglio
    b) possono creare errore

    Io già ho una BD MySQL implementata da ABanQ per la gestione dei clienti: la registrazione, il login e il controllo se connesso e simili l'ho già tutto implementato, era capire come salvare questi dati con le sessioni!!

    Dite che è meglio che utilizzi i cookie??

  5. #5
    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??

  6. #6
    Ho provato a serializzare e a utilizzare un settype ma non ne vengo a capo!!

    Sto lavorando in locale e così deve rimanere, utilizzo il wampserver con mysql apache e php! Qualche idea??

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.