Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1

    Costruire da zero classe connessioneDB[PHP]

    Buona sera,vorrei cortesemente un'aiuto in quanto dovrei fare una classe connessione verso un database.
    Il problema che ho è che non ci riesco e mi da qualche problema,ho letto qualche tutorial in merito,ma per Php e Access non ho trovato nulla, ho scaricato una connessione verso MySql e ho cercato di personalizzarla,con esito negativo..
    Vi chiedo di darmi una spiegazione di quello che devo fare,questo è quello che ho:

    <?php
    class connection{
    var $dbhost = "CarrelloSpesa";
    var $dbname = "CarrelloSpesa.mdb";//nome database
    var $dbuser = "";//nome utente
    var $dbpass = "";//pass utente
    var $result = false; # Result delle query

    var $dbh = NULL; //Database connection (Handle)
    var $persistente = false; #Flag connessione persistente
    //costruttore crea l'oggetto con le 4 variabili che riceve e invoca la funzione display()
    //per visualizzare lo stato della connessione
    //function connection($p,$n,$u,$p,$r,$c,$per=false){
    function connection($dbhost,$dbname,$dbuser,$dbpass,$persis tente=false){

    $this->server = $dbhost;
    $this->user = $dbuser;
    $this->password = $dbpass;
    $this->sys_dbname = $dbname;
    $this->dbh = $dbh;
    $this->result = $result;
    $this->persistente = $persistente;
    }


    function display(){
    //visualizza lo stato della connessione
    echo("
    " . " il percorso del DataBase è " . $this->dbhost.
    "
    " . " il nome del DataBase è " . $this->dbname.
    "
    " . " lo user del DataBase è " . $this->dbuser.
    "
    " . " la pass del DataBase è " . $this->dbpass .
    "
    " . " la connessione del DataBase è " . $this->dbh .
    "
    " . " il risultato del DataBase è " . $this->result .
    "
    " . " la connessione è persistente? " . $this->persistente);
    }


    function apriConn($apConn){
    //apre la connessione
    if($this->persistente){//controllo in caso la connessione è permanente oppure no
    $func_db_conn = 'odbc_pconnect';
    }
    else{
    $func_db_conn = 'odbc_connect';
    }

    $this->dbh = $func_db_conn($this->server,$this->user,$this->password) or die ('Impossibile Connettersi!!'); // errore nella connessione

    if(!$this->dbh) return FALSE;

    if(!odbc_exec($this->sys_dbname,$this->dbh)){
    return FALSE;
    }
    return TRUE;
    }

    function chiudiConn(){
    //chiude una connessione
    return(odbc_close($this->dbh));
    }

    function db_error(){
    # restituisce il messaggio di errore della precedente operazione
    if (odbc_error()){
    echo odbc_errormsg($dbh);
    }
    }

    function db_free_result(){
    # libera la memoria impiegata da un risultato
    return(odbc_free_result($this->result));
    }

    function db_query($sql) {
    #Invia una richiesta SQL a MySQL
    $this->result = odbc_result($sql, $this->dbh);
    return ( $this->result != false);
    }
    }
    $db = new connection();
    $db->dbC('localhost','root','','test');
    $db->apriConn('$cn_string');
    $db->db_connect();
    $db->db_query('Show table');
    $a[0] = $db->db_fetch_row();
    $a[1] = $db->db_num_rows();
    echo $a[0][0].$a[1];
    $db->db_free_result();
    $db->db_close();
    ?>

    Questo è quanto..
    L'errore che mi da è il seguente:
    Warning: Missing argument 1 for connection() in c:\phpdev\www\public\carrelloacquistiphp_access\Cl asseConnection.class.php on line 19

    Warning: Missing argument 2 for connection() in c:\phpdev\www\public\carrelloacquistiphp_access\Cl asseConnection.class.php on line 19

    Warning: Missing argument 3 for connection() in c:\phpdev\www\public\carrelloacquistiphp_access\Cl asseConnection.class.php on line 19

    Warning: Missing argument 4 for connection() in c:\phpdev\www\public\carrelloacquistiphp_access\Cl asseConnection.class.php on line 19

    Warning: SQL error: [Microsoft][Driver Manager ODBC] Nome origine dati non trovato e driver predefinito non specificato., SQL state IM002 in SQLConnect in c:\phpdev\www\public\carrelloacquistiphp_access\Cl asseConnection.class.php on line 52
    Impossibile Connettersi!!

    Ho visto che l'errore è principalmente:
    "Nome origine dati non trovato e driver predefinito non specificato"
    Ho fatto qualche prova, ma qui non capisco dove va inserito il nome origine dati e driver specificato...
    Perchè solitamente li mettevo direttamente su ogni pagina e funziona bene,ma con la classe non è cosi semplice...

    Vi ringrazio per l'aiuto.....

  2. #2
    nessuno sa costruire una classe connessione verso un DB access?

  3. #3

    Re: Costruire da zero classe connessioneDB[PHP]

    Originariamente inviato da ANTAGONIA
    Ho visto che l'errore è principalmente:
    "Nome origine dati non trovato e driver predefinito non specificato"
    A me invece questo errore non sembra quello "principale". Probabilmente l'intoppo nella costruzione "da zero" della tua classe e' in come inizializzi le variabili nel costruttore. Inizializzandole male, ottieni gli errori "principali" che sono
    Warning: Missing argument 1 for connection() in c:\phpdev\www\public\carrelloacquistiphp
    _access\ClasseConnection.class.php on line 19
    non sono un mago nella programmazione PHP ma fossi in te proverei a cambiare i nomi dei parametri nel costruttore
    codice:
    function connection($pdbhost="",$pdbname="",$pdbuser="",$pdbpa
    ss="",$ppersistente=false){
    poi prima di assegnare i valori passati da fuori alle variabili interne controllo che appunto questi valori ci siano altrimenti lascio quelli che per default vedo ai assegnato alle var interne.
    Saluti a tutti
    Riccardo

  4. #4
    Originariamente inviato da ANTAGONIA
    nessuno sa costruire una classe connessione verso un DB access?
    innanzitutto
    $db = new connection();
    vuole 5 parametri che hai definito nel costruttore
    function connection($dbhost,$dbname,$dbuser,$dbpa
    ss,$persistente=false)
    "0 è tutto finito. 1 è solo l'inizio"
    HO IL CERTIFICATO DI RESISTENZA.

  5. #5
    in pratica:
    la funzione(costruttore)connessione la devo fare cosi?
    var $dbhost = "CarrelloSpesa";
    var $dbname = "CarrelloSpesa.mdb";//nome database
    var $dbuser = "";//nome utente
    var $dbpass = "";//pass utente
    var $result = false; //Result delle query

    var $dbh = NULL; //Database connection (Handle)
    var $persistente = false; //Flag connessione persistente

    function connection($dbhost="",$dbname="",$dbuser="",$dbpa
    ss="",$persistente=false){

    $this->server = $dbhost;
    $this->user = $dbuser;
    $this->password = $dbpass;
    $this->sys_dbname = $dbname;
    $this->dbh = $dbh;
    $this->result = $result;
    $this->persistente = $persistente;
    }

    e poi qua inserisco i 5 parametri:
    $db = new connection($dbhost,$dbname,$dbuser,$dbpass,$persis tente);

    per il resto va bene oppure c'è da fare altro?
    Scusate l'ignoranza.. :master:

  6. #6
    niente da fa non capisco, ma è possibile che sia cosi difficile?(per me ovvio )

  7. #7
    Originariamente inviato da ANTAGONIA
    var $dbhost = "CarrelloSpesa";
    var $dbname = "CarrelloSpesa.mdb";//nome database
    var $dbuser = "";//nome utente
    var $dbpass = "";//pass utente
    var $result = false; //Result delle query
    qui dichiari della variabili della classe ma poi usi gli stessi nomi della variabili per definire i parametri del costruttore della classe
    function connection($dbhost="",$dbname="",$dbuser="",$dbpa
    ss="",$persistente=false){
    dopo di che all'interno del costruttore prendi i parametri passati da fuori e li assegni a delle variabili che non vedo dichiarate da nessuna parte es.
    $this->sys_dbname = $dbname;
    detto questo, non ho ora il tempo di riscriverti la tua classe di accesso ai dati, pero' ti consiglio prima di avventurarti nella programmazione oop di fare delle prove piu' semplici con piccole classi di test. Prove precedute da una base teorica sulla creazione e istanza degli oggetti/classi. Altrimenti, questi argomenti e' difficile trattarli con dei semplici post su un forum. Rischi di trovare una pezza ma di non capire come fare la prossima volta.
    Saluti a tutti
    Riccardo

  8. #8
    Ciao vorrei postarti una mia semplice classe per interfacciarsi con il database mysql:
    codice:
    <?php
    
    /******************************************************************************/
    /**           CMS SVILUPPATO DA SANTINO BIVACQUA info@miserve.org            **/
    #            ____    _____        __      ___    ______                        #
    #           \    \  /    / ____  |  \    /   | /       |                       #
    #            \    \/    / / __ \ |   \  /    ||     ___| ____                  #
    #             \        / | |  |_||    \/     ||   /___  |####|                 #
    #              \      /  | |     |  |    /|  |\       \ |#|__                  #
    #              /      \  | |   _ |  |\  / |  | \___    ||####|                 #
    #             /        \ | \__| ||  | \/  |  | ___/    | __|#|                 #
    #            /    /\    \ \____/ |  |     |  ||        ||####|                 #
    #           /____/  \____\       |__|     |__||_______/                        #
    #                                                                              #
    /**                         XcMSs v. 1.0.0                                   **/
    /******************************************************************************/
    /*                          New CMS for MiServe.org                           */
    
    /*----------------------------------------------------------------------------*/
    /*                      Classe per connettersi a Mysql                        */
    /*----------------------------------------------------------------------------*/
    
    class DatabaseSql {
        var $host,$user,$pw;
        var $work,$query_ok;
        var $connect_id,$result_id;
        var $numero_query = 0;
        var $qq;
        var $db_selected;
        //Costruttore della classe
        function DatabaseSql(&$_CONFIG_DB) {
            $this->host = &$_CONFIG_DB['host'];
            $this->user = &$_CONFIG_DB['user'];
            $this->pw   = &$_CONFIG_DB['password'];
            $this->work = FALSE;
        }
        //Metodo per connettersi al database
        function connect() {
            if ($this->connect_id = @mysql_connect($this->host,$this->user,$this->pw)) {
                //Imposta work a true in modo che la classe sia abilitata
                $this->work = TRUE;
            } else {
                //Imposta work a false in modo che la classe sia disabilitata
                $this->work = FALSE;
                die("Connessione al database non riuscita");
    
            }
        }
        //Metodo per selezionare database
        function select($database) {
            //Controllo se la classe può lavorare
            if ($this->work==FALSE) {return FALSE;}
            //Se il database risulta essere già selezionato esco ritornando TRUE
            if ($this->db_selected==$database) {return TRUE;}
            $this->db_selected = $database;
            if (!mysql_select_db($database,$this->connect_id)) {
                //Imposta work a false in modo che la classe sia disabilitata
                $this->work = FALSE;
                die("Selezione del database non riuscita");
            }
        }
        //Metodo per Inviare query al database
        function query($query,$unbuffered=TRUE) {
            //Controllo se la classe può lavorare
            $function = $unbuffered ? 'mysql_unbuffered_query' : 'mysql_query';
            if ($this->work==FALSE) {return FALSE;}
            if ($this->result_id = @$function($query,$this->connect_id)) {
                $this->numero_query++;
                $this->qq.=$this->numero_query." => ".$query."<hr />";
                $this->query_ok = TRUE;
                return TRUE;
            } else {
                $this->query_ok = FALSE;
                echo "Error : <span style=\"color:red\">$query</span>, non riuscita
    \n";
                return FALSE;
            }
        }
        //Metodo usato per ottenere solo il primo risultato
        function first_result_query($query)
        {
            if ($this->work==FALSE) {return FALSE;}
            $this->query($query);
            $risultato = $this->fetch();
            if ($this->work==FALSE or $this->query_ok==FALSE) {return FALSE;}
            $numero_argomenti = func_num_args()-1;
            if ($numero_argomenti==0)
            {
                return $risultato;
            }
            elseif ($numero_argomenti==1)
            {
                $var = func_get_arg(1); //Metto 1 e non 2 perche' parte da zero
                return $risultato->$var;
            }
            else
            {
                $args = func_get_args();
                $return = array();
                $i = 0;
                foreach ($args as $value)
                {
                    if ($i>0) $return[$value] = $risultato->$value;
                    $i = 1;
                }
                return $return;
            }
        }
        //Metodo per recuperare risultati
        function fetch($type_result_return="o") {
            //Controllo se la classe può lavorare
            if ($this->work==FALSE or $this->query_ok==FALSE) {return FALSE;}
            switch ($type_result_return)
            {
                case 'a':
                $function = 'mysql_fetch_array';
                break;
                case 'n':
                $function = 'mysql_fetch_row';
                break;
                case 'o':
                default:
                $function = 'mysql_fetch_object';
            }
            return $function($this->result_id);
        }
        //Metodo che ottiene il numero di righe coinvolte nelle precedenti
        //operazioni MySQL (insert, update, delete)
        function affected_row() {
            if ($this->work==FALSE or $this->query_ok==FALSE) {return FALSE;}
            return mysql_affected_rows($this->connect_id);
        }
        //Metodo che restituisce i numeri dei campi estratti de SELECT
        function num_rows() {
            if ($this->work==FALSE or $this->query_ok==FALSE) {return FALSE;}
            return mysql_num_rows($this->result_id);
        }
        //Metodo per l'escape dei caratteri onde evitare defacciamenti
        function escape($string)
        {
            return mysql_escape_string($string);
        }
        //Metodo per chiudere connessione al database
        function close() {
            @mysql_close($this->connect_id);
        }
    }
    
    ?>
    Puo' essere migliorata, ma a me a volte va bene cosi' com'e'

    MiServe di Santino Bivacqua
    PHP/Ruby/Node.js Developer
    www.miserve.com

  9. #9
    ti ringrazio... sei stato molto gentile,non avrei chiesto tanto!
    Però una semplice classe per interfacciarsi ad un DB Access non c'è da nessuna parte?


  10. #10
    Originariamente inviato da ANTAGONIA

    Però una semplice classe per interfacciarsi ad un DB Access non c'è da nessuna parte?
    Ciao,
    Adodb la prevede
    http://php.weblogs.com/ADODB
    per favore NIENTE PVT TECNICI da sconosciuti

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.