Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    878

    object of class __PHP_Incomplete_Class

    ho un sito web fatto in php
    quando provo ad accedere ad una sezione, mi appare il messaggio:

    object of class __PHP_Incomplete_Class

    la riga che genera quest'errore è questa:


    Codice PHP:
    $logged_admin $utente->is_admin(); //<-- riga che genera l'errore 
    prima di quella riga, ci sono queste righe di codice:

    Codice PHP:
    require_once('utenti_model.php');
    session_start();

    if(!isset(
    $_SESSION["utente"])) {    

    header("location: login.php?m=sess");
    }

    $utente =unserialize($_SESSION['utente']);

    try {    

    $logged_admin $utente->is_admin(); //<-- riga che genera l'errore

    } catch (Error $e) {   
    echo 
    "fatal error!!!!";    
    exit;

    neanche il blocco try catch riesce a catturare l'errore per poterlo gestire
    come devo fare per intercettarlo o come devo fare ad accorgermi prima dell'eventuale errore e comportarmi diversamente, ad esempio rimandando l'utente alla pagina di login?
    Ultima modifica di abcd1000; 24-02-2021 a 20:18

  2. #2

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    878
    Quote Originariamente inviata da Alhazred Visualizza il messaggio

    ciao! grazie della risposta
    non mi aiuta il link di stackoverflow che hai postato, dove c'è scritto:
    This error usually means that you try to deserialze object without loaded class for that object.

    perchè come si vede dal mio codice io includo l'oggetto utenti.php prima di iniziare la sessione e provare a fare unserialize


  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,129
    $_SESSION['utente'] è un oggetto valido (inizializzato) della classe utente?
    In caso contrario il problema è proprio l'unserialize(), che non restituisce errore, ma genera una cosa che non è un oggetto come ti aspetteresti e quindi l'errore viene effettivamente sollevato quando provi ad usare questa "non-classe".
    Earth2: 3QCNSPFQUH

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    878
    tutto chiaro il problema
    io sto cercando un modo di intercettare quest'errore per gestirlo
    oppure un modo di prevenire l'accesso ad un oggetto che non è più completamente accessibile

    il blocco try catch, non lo intercetta, sia che provi ad intercettare con Exception che con Error

    mi chiedo come fare ad evitare o come fare a gestire quest'errore

  6. #6
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,129
    Con is_a() verifichi se hai una classe valida o no dopo aver tentato la deserializzazione.
    Se la classe non è valida ti fermi, altrimenti la usi.
    Earth2: 3QCNSPFQUH

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    878
    grande! era proprio quello che cercavo
    non lo conoscevo il metodo is_a

    ho sistemato così:

    Codice PHP:
    $utente =unserialize($_SESSION['utente']);
    $is_valid_classis_a($utente"utenti_model");
    if(!
    $is_valid_class) {    header("location: login.php?m=sess");} 

  8. #8
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,129
    Perché salvare il risultato in una variabile se ti serve solo in quell'if?

    Funziona anche così e risparmi tempo e memoria
    Codice PHP:
    if( ! is_a($utente"utenti_model") ) 
    {
        
    header("location: login.php?m=sess");

    Earth2: 3QCNSPFQUH

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    878
    ok, forza dell'abitudine ad usare le variabili
    grazie dell'osservazione

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 © 2021 vBulletin Solutions, Inc. All rights reserved.