Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di marmo79
    Registrato dal
    Dec 2000
    Messaggi
    131

    [oop] Classe per formattare risultati Database

    Ciao a tutti, avendo iniziato da poco ad approcciarmi alla programmazione ad oggetti, ho realizzato questa semplice classe per ottenere ,a partire da una query, tutti i risultati dei vari campi di una tabella.

    Mi potreste dire se l'approccio è corretto?
    Codice PHP:
    class Database {
        private 
    $_rs;
        private 
    $_numero_campi;
        private 
    $_nome_campo;
        private 
    $_valore_richiesto;
        private 
    $_valore;
        public 
    $query;
        public 
    $_campo_richiesto;

        public function 
    __construct()
        {
            
    // imposto le variabili per la connessione al database ed effettuo il collegamento
            
    $hostname "localhost";
            
    $database "xxx";
            
    $dusername "root";
            
    $dpassword "xxx";
            
    $connetti mysql_connect($hostname$dusername$dpassword); 
            
    // if (!is_resource($this->_connetti)) {
            // throw new Exception("Impossibile collegarsi al database!");
            // }
            
    $seleziona_db mysql_select_db($database$connetti); 
            
    // if (!($this->_seleziona_db)) {
            // throw new Exception("Impossibile usare il database $this->_database!");
            // }
                
    }

        private function 
    ottieni_nomi_campi()
        {
            
    // a partire dalla query ,ottengo i nomi di tutti i campi di una determinata tabella
            
    $this->rs mysql_query($this->query);
            
    $this->_numero_campi mysql_num_fields($this->rs);
            for(
    $i 0;$i $this->_numero_campi;$i++) {
                
    $this->_nome_campo[$i] = mysql_field_name($this->rs$i);
            }
        }
        private function 
    verifica_esistenza_campo()
        { 
            
    // partendo dal valore della proprietà, verifico se esiste il campo richiesto
            
    if (in_array($this->_campo_richiesto$this->_nome_campo)) {
                return 
    1;
            } else return 
    0;
        }

        private function 
    valore_campo($numero_riga$campo)
        { 
            
    // ottengo il valore di un campo, considerando il numero della riga che mi interessa
            
    mysql_data_seek($this->rs$numero_riga);
            
    $_valore mysql_fetch_object($this->rs);
            
    $_valore_richiesto $_valore->$campo ;
            return 
    $_valore_richiesto ;
        }
        private function 
    formatta($array_valori)
        { 
            
    // formatto secondo la proprietà formatta ciascun campo richiesto sostituendo il valore al nome uguale al campo
            
    $formatta $this->formatta;
            
    $array_campi $this->campo_richiesto;
            while (list(, 
    $this->_campo_richiesto) = each($array_campi)) {
                while (list(, 
    $valore) = each($array_valori)) {
                    
    $formatta eregi_replace($this->_campo_richiesto$valore$formatta);
                }
            }
            return 
    $formatta;
        }
        public function 
    main()
        { 
            
    // funzione principale che richiama le altre
            // richiamo la funzione che trova i nomi dei campi partendo dalla tabella
            
    $this->ottieni_nomi_campi(); 
            
    // a seconda del numero di risultati inizio un ciclo per ogni risultato della query
    //nb questo ciclo ovviamente sarà legato al numero di risultati ottenuto
            
    for ($i 0;$i <= 5;$i++) {
                
    // creo array_campi per non svuotare l'array campo_richiesto
                
    $array_campi $this->campo_richiesto;
                
    // array_risultato contiene un array con il risultato di ciascuna riga per ogni campo richiesto
                
    $array_risultato = array(); 
                
    // per ciascun campo richiesto...
                
    while (list(, $this->_campo_richiesto) = each($array_campi)) {
                    
    // ...verifico l'esistenza
                    
    if ($this->verifica_esistenza_campo()) {
                        
    // ed eventualmente assegno il risultato nell'array che passerò alla formattazione
                        
    $array_risultato[] = $this->valore_campo($i$this->_campo_richiesto);
                    } else die (
    "$this->_campo_richiesto è un Campo inesistente!");
                }
                
    // $array_risultato è un array che contiene tutti i risultati di una determinata riga
                
    echo $this->formatta($array_risultato);
            }
        }

    Questa è l'implementazionw
    Codice PHP:
    $prova = new Database();
    $prova->query ="select * from categoria";
    $prova->campo_richiesto =array("nome","id_categoria");
    $prova->formatta="[*][b]Questa è la categoria id_categoria   \"nome\"[/b]";
    $prova->main(); 
    Come approccio va bene?Fatemi sapere, grazie!
    under costrussion

  2. #2
    Utente di HTML.it L'avatar di oronze
    Registrato dal
    Jun 2001
    Messaggi
    3,543
    boh...dipende....non so tu cosa vuoi fare...la classe che ho creato io ha una fortissima riusabilità in quanto ho le funzioni pubbliche e non un'unica funzione main che esegue varie funzioni...se tu per esempio, devi fare un altro sito che fai? riscrivi tutta la classe? Un obiettivo della oop è anche la possibilità di riutilizzare il codice

    No ai layout tabellari!

    Insulto libero: http://forum.html.it/forum/showthread.php?s=&postid=12524872#post12524872

  3. #3
    Utente di HTML.it L'avatar di marmo79
    Registrato dal
    Dec 2000
    Messaggi
    131
    Il mio obiettivo è partire da una query e arrivare alla formattazione html senza curarmi dei cicli while etc...quindi la riusabilità c'è...
    Ma è pubblica la tua classe?...più che altro volevo sapere se avevo capito le basi della programmazione ad oggetti come impostazione di lavoro....
    under costrussion

  4. #4
    Utente di HTML.it L'avatar di marmo79
    Registrato dal
    Dec 2000
    Messaggi
    131
    Consigli?...piccolo up!
    under costrussion

  5. #5
    Utente di HTML.it L'avatar di oronze
    Registrato dal
    Jun 2001
    Messaggi
    3,543
    la mia classe la uso per me e non è pubblica del resto è inutile rendere pubblica una classe che praticamente fa le stesse cose che fa il php con le varie funzioni mysql con la differenza che aggiungo la gestione errori...per quanto riguarda la oop il tuo codice non riesco a capire come sia riusabile...nel senso...mettiamo che io abbia questa tabella
    nome | via | cognome | civico | data acquisto | data vendita | valore | img
    e voglia visualizzare i risultati come
    codice:
    <tr>
    <td>[img]img[/img]</td>
    <td>la "casa" in via "via" è stata acquistata il "data acquisto" per "valore"€</td>
    </tr>
    ad esempio, nella mia classe ho una funzione
    Codice PHP:
    recuperaFrom($tabella$where=null){
    if (
    $where!=null) return self::query("SELECT * FROM ".$tabella." WHERE "$where);
    return 
    self::query("SELECT * FROM ".$tabella);

    in questo modo la formattazione la faccio in html ma ogni volta non mi prendo la briga di riscrivermi la query...e cose così

    No ai layout tabellari!

    Insulto libero: http://forum.html.it/forum/showthread.php?s=&postid=12524872#post12524872

  6. #6
    Utente di HTML.it L'avatar di marmo79
    Registrato dal
    Dec 2000
    Messaggi
    131
    A parte che rispetto al codice che ho scirtto qui ho implementato un paio di metodi, per il risultato che dici te , basta che passo la proprietà 'formatta' con il codice html...
    under costrussion

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.