Visualizzazione dei risultati da 1 a 5 su 5

Hybrid View

  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    412

    Classi, variabili globali, metodi, etc... Perchè non mi funziona questo codice?

    Ho creato una classe per connettersi al database e prelevare i vari messaggi. Questo il codice

    Codice PHP:
    require('config.inc.php'); //contiene la dichiarazione delle variabili dedite alla connessione al DB

    class gestioneMessaggi {
        
        private  
    $db;
      
      function 
    connettiAlDatabase()
      {     
        global 
    $db_name$db_host$db_user$db_password//queste variabili sono dichiarate all'interno di config.inc.php
        
         
    try {
           
    $this->$db = new PDO('mysql:host='.$db_host.';dbname='.$db_name$db_user$db_password);
           
    $this->$db->setAttribute(PDO::ATTR_ERRMODEPDO::ERRMODE_EXCEPTION);
          } 
          catch(
    PDOException $e) {
              echo 
    'ERROR: ' $e->getMessage();
            } 

          echo(
    'ok'); //<----ATTENZIONE A QUESTO!
        
         
    }  

       
    //..altro codice

    Nel file index.php ho scritto
    Codice PHP:
    <?php

    require('gestioneMessaggi.php'); //incorporo la classe sopra riportata

    $gestioneMessaggi = new gestioneMessaggi();
    $gestioneMessaggi -> connettiAlDatabase();

    ?>
    Il problema è che l'"ok" generato dall'echo non viene stampato a video..E non so nemmeno per quale motivo in quanto non mi vengono segnalati gli errori (e a proposito, come posso ovviare al problema?).
    Comunque facendo prove su prove ho capito che il problema risiede nel modo in cui tento di accedere alla variabile privata $db. Infatti se invece di scrivere
    Codice PHP:
      $this->$db = new PDO(etc...) 
    scrivo
    Codice PHP:
      $db = new PDO(etc...) 
    l'ok mi viene correttamente stampato..
    Preciso infatti che è la prima volta che uso un sistema OO in PHP, quindi magari ho fatto un errore grossolano, ma dove?
    Ultima modifica di American; 21-03-2014 a 11:01

  2. #2
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    $this->$db

    Non si accede così ai membri di una classe, ma

    $this->db

    Come hai scritto tu, stai provando ad accedere ad un membro il cui nome si trova nella variabile $db...

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    412
    Quote Originariamente inviata da boots Visualizza il messaggio
    $this->$db

    Non si accede così ai membri di una classe, ma

    $this->db

    Come hai scritto tu, stai provando ad accedere ad un membro il cui nome si trova nella variabile $db...
    Grazie, adesso funziona il metodo, ma ho un problema con un altro metodo rivolto al prelievo dei messaggi dal DB.

    Codice PHP:
    function prelevaMessaggi()
        {    
            echo(
    'ok2');
            
    $qry $this->db->prepare('SELECT *, M.Autore AS AutoreMessaggio, R.Autore AS AutoreRisposta, M.Data AS DataMessaggio, R.Data AS DataRisposta, M.Categoria_Utente AS CategoriaUtenteMessaggio, R.Categoria_Utente AS CategoriaUtenteRisposta
                                  FROM Messaggi M
                                  LEFT JOIN Risposte R ON M.ID = R.ID_messaggio
                                  ORDER BY M.Data DESC, R.Data ASC
                                '
    );
            echo(
    'ok3');
                                
            try {
    $qry->execute();}
            catch(
    Exception $e) {
            echo 
    'Exception -> ';
            
    var_dump($e->getMessage());

            echo(
    'ok4'); 
    mi arriva fino all'ok3, ok4 non me lo stampa... Come mai?
    Però ripeto che sarebbe molto più facile se potessi sapere il motivo per cui il codice si blocca, come posso fare?

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    412
    Risolto era la chiusura del catch il problema
    Grazie!!!

  5. #5
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Per gli errori controlla se nel php.ini sono abilitati.
    Oppure metti questo all'inizio del file

    Codice PHP:
    ini_set('display_startup_errors',1);
    ini_set('display_errors',1);
    error_reporting(-1); 
    Nel tuo codice vedo aprirsi le parentesi del catch, ma non chiuderle ...

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.