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

    Problemi a salvare oggetti in Sessione

    Salve ragazzi,
    è la mia prima esperienza con php ad oggetti e sto impazzendo su una cosa quindi è arrivato il momento di chiedervi aiuto.

    Ho un form che serve a inserire delle notizie:

    Form(action gestioneNews.php) -> gestioneNews.php

    In questo form c'è una parte che si occupa di inserire un immagine e quindi una volta che l'utente ha scelto il file sul suo pc il form viene submittato e quindi chiamata la pagina di action "gestioneNews.php".
    A questo punto se l'utente ha già inserito alcuni campi quali titolo, categoria io creo un nuovo oggetto News con questi campi e lo salvo in sessione:

    $news = new News();

    if(isset($_SESSION["currentNews"])){
    $news = $_SESSION["currentNews"];
    echo "ok sessione news - ";
    }

    if(isset($_POST["tipologia"])){
    $news->setTipologia($_POST["tipologia"]);
    }
    .. inserimento dati ...

    Una volta inserita l'immagine si torna al form e qui nei vari campi faccio un controllo del tipo:

    <input type="text" name="title" <?php if(isset($news)) echo "value=\"".$news->getTitolo()."\""; ?>/>

    in modo da rimettere il valore nel caso l'utente abbia già inserito il dato.

    Ecco qui perennemente mi viene segnalato sto errore:

    Fatal error: Call to a member function getTitolo() on a non-object in /web/htdocs/www.beachvolleymarconi.com/home/admin/news.php on line 180


    Preciso che anche nella pagina di Form è presente lo stesso codice:

    $news = new News();

    if(isset($_SESSION["currentNews"])){
    $news = $_SESSION["currentNews"];
    echo "ok sessione news - ";
    }

    Ho provato a serializzare e unserializzare la variabile ma in quel caso spesso mi viene l'errore che dice che unserialize() prevede un parametro stringa e invece io gli passo un oggetto.

    Spero di essermi spiegato.
    Ringraziandovi anticipatamente vi saluto

    Mattia

  2. #2
    Utente di HTML.it L'avatar di las
    Registrato dal
    Apr 2002
    Messaggi
    1,221
    Codice PHP:

    $news 
    = new News();// istanzi l'oggetto, e quindi la variabile $news da questo punto in poi è un oggetto 

    if(isset($_SESSION["currentNews"])){
    $news $_SESSION["currentNews"];// la variabile $news viene sovrascritta, cessa di essere un oggetto e diventa il contenuto di $_SESSION['currentNews'] (presumo un id)
    echo "ok sessione news - ";

    quando poi andrai a usare $news->getTitolo() ovviamente otterrai quell'errore perchè $news non è un oggetto ma probabilmente un intero.

    Fatal error: Call to a member function getTitolo() on a non-object in /web/htdocs/www.beachvolleymarconi.com/home/admin/news.php on line 180


    usa nomi diversi per le due variabili e dovrebbe sistemarsi tutto
    Il calcolatore è straordinariamente veloce, accurato e stupido.
    L'uomo è incredibilmente lento, impreciso e creativo.
    L'insieme dei due costituisce una forza incalcolabile.
    (Albert Einstein)

  3. #3
    Utente di HTML.it L'avatar di las
    Registrato dal
    Apr 2002
    Messaggi
    1,221
    scusa ho riletto meglio il tuo messaggio, non avevo capito bene prima , quello che vuoi fare tu è proprio passare l'oggetto in sessione?

    in questo caso devi solo evitare di reistanziarlo e richiamarlo direttamente con $_SESSION

    es:
    Codice PHP:
    session_start();
    class 
    prova {

        public 
    $str;

        public function 
    provaFun() {
            echo 
    $this->str;
            
    $this->str++;
        }
        
    }

    if(!isset(
    $_SESSION['obj'])){
        
        
    $_SESSION['obj'] = new prova();
    }

    $_SESSION['obj']->provaFun(); 
    Il calcolatore è straordinariamente veloce, accurato e stupido.
    L'uomo è incredibilmente lento, impreciso e creativo.
    L'insieme dei due costituisce una forza incalcolabile.
    (Albert Einstein)

  4. #4
    ciao Las,
    intanto grazie per le dritte ma avevo già provato anche così ma purtroppo questo è il risultato:

    codice:
    Fatal error: main() [&lt;a href='function.main'&gt;function.main&lt;/a&gt;]: The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition &amp;quot;News&amp;quot; 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 /web/htdocs/www.beachvolleymarconi.com/home/admin/news.php on line 185
    In testa alle mie due pagine includo un file head.php in cui c'è la dichiarazione session_start().
    poi
    require_once($_SERVER["DOCUMENT_ROOT"]."admin/classes/business/model/News.php");
    la mia classe.

    Questo errore ce l'ho dopo la submit e il ritorno alla pagina del form dove cerco di fare questo controllo:
    Codice PHP:
    <?php if(isset($_SESSION["currentNews"]) && $_SESSION["currentNews"]->getTipologia() == "news") echo "selected"?>
    Sinceramente non so più dove sbattere la testa.

    Ciao

  5. #5
    Forse ho trovato.
    Ho letto che bisogna includere PRIMA le definizioni delle classi e poi inizializzare la sessione con session_start().


  6. #6
    Utente di HTML.it L'avatar di las
    Registrato dal
    Apr 2002
    Messaggi
    1,221
    si, se la classe è definita in un file esterno devi includerlo prima di session_start.

    comunque a prescindere da questo, forse mi sbaglierò, ma mettere un oggetto in sessione non è una cosa produttiva, nel senso che da più problemi che non vantaggi, quindi io ci penserei bene prima di farlo.

    Il calcolatore è straordinariamente veloce, accurato e stupido.
    L'uomo è incredibilmente lento, impreciso e creativo.
    L'insieme dei due costituisce una forza incalcolabile.
    (Albert Einstein)

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.