Visualizzazione dei risultati da 1 a 6 su 6

Discussione: Problema con query

  1. #1

    Problema con query

    Ciao a tutti

    ho un problema di:
    Notice: Trying to access array offset on value of type null in....

    So che e' un Notice, pero' volevo riuscire a capire il problema e risolverlo.

    La parte di codice intererssata e' questa, metto tutta la funzione:

    Codice PHP:

        
    function auth_clean_expired(){
        
            global 
    $_CONFIG;
            global 
    $connAdmin;
        
            
    $result mysqli_query($connAdmin,"SELECT creation_date FROM ".$_CONFIG['table_sessioni']." WHERE uid='".auth_get_uid()."'");

            if(
    $result){
            
            
    $data mysqli_fetch_array($result);

                if(
    $data['creation_date']){
                    
                    if(
    $data['creation_date'] + $_CONFIG['expire'] <= time()){
                    
                        switch(
    auth_get_option("TRANSICTION METHOD")){
                            
                            case 
    AUTH_USE_COOKIE:
                            
    setcookie('uid');
                            break;
                            
                            case 
    AUTH_USE_LINK:
                            global 
    $_GET;
                            
    $_GET['uid'] = NULL;
                            break;
                        
                        }
                    
                    }
                
                }
            }
        
            
    mysqli_query($connAdmin,"
            DELETE FROM "
    .$_CONFIG['table_sessioni']."
            WHERE creation_date + "
    .$_CONFIG['expire']." <= ".time()
            );    
        
        } 
    L'errore me lo presenta alla riga 38, la riga interessata e' questa:

    Codice PHP:

    if($data['creation_date']){ 
    Ovviamente, funziona tutto correttamente, sono che mi tira fuori sempre quell'errore li, ho letto letto e riletto, ma non riesco a cpire il perche' da un errore del genere e come risolverlo.

    Ciao e grazie

  2. #2
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,771
    Ciao, quel null è dato dal fatto che l'elemento con chiave "creation_date" non esiste nell'array $data.

    La condizione viene comunque risolta perché avviene un autocasting del tipo di dato per ciò che è richiesto; quindi in questo caso il valore null equivale a false.

    Il notice salta però fuori perché stai tentando di accedere ad una variabile che non esiste.

    In casi del genere è bene verificare l'esistenza con una cosa del genere:
    codice:
    if(isset($data['creation_date'])){ ... }
    In questo modo, se la variabile risulta nulla, la funzione isset() restituirà false e non salterà fuori alcuna notifica.
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  3. #3
    https://www.php.net/manual/en/mysqli...etch-array.php restituisce null se non ci sono più righe. Il notice viene sollevato perchè $data è null.

  4. #4
    Quote Originariamente inviata da KillerWorm Visualizza il messaggio
    Ciao, quel null è dato dal fatto che l'elemento con chiave "creation_date" non esiste nell'array $data.

    La condizione viene comunque risolta perché avviene un autocasting del tipo di dato per ciò che è richiesto; quindi in questo caso il valore null equivale a false.

    Il notice salta però fuori perché stai tentando di accedere ad una variabile che non esiste.

    In casi del genere è bene verificare l'esistenza con una cosa del genere:
    codice:
    if(isset($data['creation_date'])){ ... }
    In questo modo, se la variabile risulta nulla, la funzione isset() restituirà false e non salterà fuori alcuna notifica.
    Ciao, e grazie per la risposta.

    Ho risolto cosi':

    Codice PHP:

            
    if($result){
            
                
    $data mysqli_fetch_array($result);

                if(isset(
    $data['creation_date'])){  

                    if(
    $data['creation_date']){
                    
                        if(
    $data['creation_date'] + $_CONFIG['expire'] <= time()){
                    
                            switch(
    auth_get_option("TRANSICTION METHOD")){
                            
                                case 
    AUTH_USE_COOKIE:
                                
    setcookie('uid');
                                break;
                            
                                case 
    AUTH_USE_LINK:
                                global 
    $_GET;
                                
    $_GET['uid'] = NULL;
                                break;
                        
                            }
                    
                        }
                
                    }
                
                }
            } 
    Ho capito e risolto.
    Al momento funziona tutto correttamente e non da nessun Notice.
    Mi giro un po' di pagine per eliminare il problema anche da altre parti !

    Grazie ancora !!

  5. #5
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,771
    Bene

    Posso darti un ulteriore dritta per semplificare il codice; in questo caso:
    Codice PHP:
    if(isset($data['creation_date'])){
      if(
    $data['creation_date']){
        ...
      }

    se devi controllare solo la presenza di quella variabile, a prescindere dal suo valore, puoi usare giusto la prima condizione, con isset():
    Codice PHP:
    if(isset($data['creation_date'])){
      ...

    Tuttavia, se devi controllare sia l'esistenza della variabile sia il valore, che non sia equivalente a false, puoi unire le due condizioni in una unica usando un && (and logico), in questo modo:
    Codice PHP:
    if(isset($data['creation_date']) && $data['creation_date']){
      ...

    o, ancora meglio, usare la funzione empty() in questo modo:
    Codice PHP:
    if(!empty($data['creation_date'])){
      ...

    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  6. #6
    Quote Originariamente inviata da KillerWorm Visualizza il messaggio
    Bene

    Posso darti un ulteriore dritta per semplificare il codice; in questo caso:
    Codice PHP:
    if(isset($data['creation_date'])){
      if(
    $data['creation_date']){
        ...
      }

    se devi controllare solo la presenza di quella variabile, a prescindere dal suo valore, puoi usare giusto la prima condizione, con isset():
    Codice PHP:
    if(isset($data['creation_date'])){
      ...

    Tuttavia, se devi controllare sia l'esistenza della variabile sia il valore, che non sia equivalente a false, puoi unire le due condizioni in una unica usando un && (and logico), in questo modo:
    Codice PHP:
    if(isset($data['creation_date']) && $data['creation_date']){
      ...

    o, ancora meglio, usare la funzione empty() in questo modo:
    Codice PHP:
    if(!empty($data['creation_date'])){
      ...

    Grazie ancora !!
    Ciao

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.