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

    Problema con connessione MySqli e funzioni

    Ciao a tutti !

    ho un problema con connessione MySqli e funzioni.

    nel file index.php:

    codice:
    <?php
    
    // FILE CONFIG DA MODIFICARE PER LE VARIABILI DEL SITO
    include_once("config/config.inc.php");
    include_once("config/auth.lib.php");
    
    ?>
    nel file config.php:

    codice:
    // DATI PER CONNESSIONE DB
    $_CONFIG['host'] = "localhost";
    $_CONFIG['user'] = "expertise";
    $_CONFIG['pass'] = "nae0Thoo";
    $_CONFIG['dbname'] = "www_expertise_it";
    
    $_CONFIG['table_sessioni'] = "sessioni";
    $_CONFIG['table_utenti'] = "utenti";
    
    $_CONFIG['expire'] = 12000;
    
    define('AUTH_LOGGED', 99);
    define('AUTH_NOT_LOGGED', 100);
    
    define('AUTH_USE_COOKIE', 101);
    define('AUTH_USE_LINK', 103);
    define('AUTH_INVALID_PARAMS', 104);
    define('AUTH_LOGEDD_IN', 105);
    define('AUTH_FAILED', 106);
    
    /*$conn = mysql_connect($_CONFIG['host'], $_CONFIG['user'], $_CONFIG['pass']) or die('Impossibile stabilire una connessione');
    mysql_select_db($_CONFIG['dbname']);*/
    
    $conn = mysqli_connect($_CONFIG['host'],$_CONFIG['user'],$_CONFIG['pass'],$_CONFIG['dbname']);

    nel file auth.lib.php:

    codice:
    <?php
    
    $_AUTH = array(
        "TRANSICTION METHOD" => AUTH_USE_COOKIE
    );
    
    function auth_set_option($opt_name, $opt_value){
        global $_AUTH;
        
        $_AUTH[$opt_name] = $opt_value;
    }
    
    function auth_get_option($opt_name){
        global $_AUTH;
        
        return is_null($_AUTH[$opt_name])
            ? NULL
            : $_AUTH[$opt_name];
    }
    
    function auth_clean_expired(){
        global $_CONFIG;
        
        $result = mysqli_query($conn,"SELECT creation_date FROM ".$_CONFIG['table_sessioni']." WHERE uid='".auth_get_uid()."'");
        if($result){
            $data = $result->fetch_array(MYSQLI_ASSOC);
            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($conn,"
        DELETE FROM ".$_CONFIG['table_sessioni']."
        WHERE creation_date + ".$_CONFIG['expire']." <= ".time()
        );
        
    }
    Perche' non mi passa correttamente la variabile $conn nella funzione, e infatti mi restituisce una query vuota ??

    Aggiungendo invece, prima della query, dentro la funzione la connessione al db funziona correttamente:


    function auth_clean_expired(){
    global $_CONFIG;

    $conn = mysqli_connect($_CONFIG['host'],$_CONFIG['user'],$_CONFIG['pass'],$_CONFIG['dbname']);

    $result = mysqli_query($conn,"SELECT creation_date FROM ".$_CONFIG['table_sessioni']." WHERE uid='".auth_get_uid()."'");
    if($result){
    $data = $result->fetch_array(MYSQLI_ASSOC);
    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($conn,"
    DELETE FROM ".$_CONFIG['table_sessioni']."
    WHERE creation_date + ".$_CONFIG['expire']." <= ".time()
    );

    }
    Vorrei capire come mai sembra non includere il config.inc.php (...fermo restando che funziona, ma mi pare proprio una porcheria dover aggiungere la connessione in ogni funzione...)


    Grazie e ciao a tutti !
    Ultima modifica di _Micky_73; 05-09-2018 a 16:15

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    Devi passare la variabile $conn come parametro alla funzione, stando fuori non è nello scope della funzione, quindi lì dentro non è definita.

  3. #3
    Scusa ma se $conn la inizializzi in config.php FUORI DALLA FUNZIONE che la utilizza devi per forza renderla global

  4. #4
    Ciao, e grazie !

    Avrei risolto in questo modo:

    codice:
    function auth_clean_expired(){
        global $_CONFIG;
        global $conn;
        
        $result = mysqli_query($conn,"SELECT creation_date FROM ".$_CONFIG['table_sessioni']." WHERE uid='".auth_get_uid()."'");
        if($result){
            $data = $result->fetch_array(MYSQLI_ASSOC);
            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($conn,"
        DELETE FROM ".$_CONFIG['table_sessioni']."
        WHERE creation_date + ".$_CONFIG['expire']." <= ".time()
        );
        
    }
    Inserito in ogni funzione.
    A occhio e croce funziona, ma e' corretto ?


  5. #5
    le variabili globali sono il male assoluto, andrebbero usate il meno possibile. Poi metti caso che un giorno devi creare una connessione parallela come fai? Ritorni a modificare tutti i file? Non puoi includere il file di configurazione e della connessione?

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