Visualizzazione dei risultati da 1 a 3 su 3

Discussione: classi e sessioni

  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013

    classi e sessioni

    Domanda niubba probabilmente: sto giocherellando con OO_php e trovo qualche difficoltà.

    Scenario: ho due classi, una che gestisce le connessioni al database ed una che gestisce un login.
    La classe che gestisce la connessione a DB è:
    Codice PHP:
    class DB_Connect {
          
          
    //Default values
          
    private $db_host;
          private 
    $db_name;
          private 
    $db_user;
          private 
    $db_pass;
          
          private 
    $db;
          
          public function 
    DB_Connect($db_host$db_name$db_user$db_pass) {
              
    $this->db mysql_connect($db_host$db_user$db_pass) or die (mysql_error()."
    Unable to connect to the specified host using:
    HOST: '
    $db_host'
    USER: '
    $db_user'
    PASS: '
    $db_pass'");
              
    mysql_select_db($db_name) or die(mysql_error()."
    Unable to select the specified DATABASE: '
    $db_name'");
              
              
    $db_charset mysql_query"SHOW VARIABLES LIKE 'character_set_database'" );
              
    $charset_row mysql_fetch_assoc$db_charset );
              
    mysql_query"SET NAMES '" $charset_row['Value'] . "'" );
              unset( 
    $db_charset$charset_row );
          }
          
          public function 
    getConnection() {
              return 
    $this->db;
          }
          
          public function 
    doQuery($query) {          
              
    $result mysql_query($query$this->db) or die(mysql_error()."
    Error while executing: "
    .$query);
              return 
    $result;
          }
          
          public function 
    disconnect() {
              
    mysql_close($this->db);
          }

    la classe che gestisce il login ha un metodo statico che gestisce i casi di password dimenticata e generazione nuova password.

    Posto solo quello perché il resto funziona egregiamente
    Codice PHP:
    public static function forgottenPassword($connection$email$table) {
            
    $query "SELECT id FROM {$table} WHERE email='{$email}'";
            
    $result $connection->doQuery($query);

    // segue altro codice ma tanto non ci arrivo, mi becco un errore prima 
    Veniamo al dunque. Nella pagina di login ho questo (solo l'inizio della pagina):
    Codice PHP:
    <?php
      
    include("../includes/config.inc.php");
      
    session_start();
      
      
    $db = new DB_Connect($db_host$db_name$db_user$db_pass);
      
    $_SESSION['db'] = $db;
    Ovvero metto in sessione l'oggetto connessione per poterlo riutilizzare (o così mi illudo)

    Nella pagina di recupero password:
    Codice PHP:
    <?php  
      
    include("../includes/config.inc.php");
      
    session_start();
          
      
    $db $_SESSION['db'];
          
      if(isset(
    $_POST['submit'])) {    
        
        
    Login::forgottenPassword($db$_POST['username'], "users");
            
      }
    ?>
    Quello che succede quando provo tale codice è che ricevo un bell'errore:

    codice:
    Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in E:\Andrea\Documents\Siti\sito_test\includes\config.inc.php on line 33
    per intenderci, la riga 33 è la riga del metodo doQuery dove verrebbe eseguita la query. A me sembra di essere coerente e consistente nell'utilizzo di un oggetto di tipo DB_Connect, ma apparentemente la giostra si rompe da qualche parte.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  2. #2
    Utente di HTML.it L'avatar di Grino
    Registrato dal
    Oct 2004
    Messaggi
    739
    Con mysql_connet stai aprendo una connessione non permanente, che è automaticamente chiusa al termine dello script. Quindi non puoi portarti dietro l'ID di risorsa poichè al prossimo script non è più valido.

    Ciò è tanto vero che nel manuale della mysql_close trovi scritto:

    Using mysql_close() isn't usually necessary, as non-persistent open links are automatically closed at the end of the script's execution.
    Ma anche nel caso di connessioni persistenti, devi comunque fare la connect, perchè è il sistema che, trovando una connessione permanente aperta, te la restituisce o ne crea una nuova. Non è il caso di dare per scontato che quella risorsa sia disponibile.

    Nota finale, l'estensione mysql è deprecata, quindi inizia a studiare mysqli o pdo.

    Siamo sempre troppo gelosi delle nostre grandi piccole opere! - Grino inedito.
    Lavori e Lavoretti

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    ahhhh, grazie per la risposta. Effettivamente avevo fatto una prova subito dopo il post, e con un var_dump il link è effettivamente vivo e vegeto nella pagina di login dove veniva creata $db, ma morto nella pagina di recupero password. Mi documento su mysqli. Grazie di nuovo
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

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.