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

    Classe per connessione DB

    Ciao ragazzi/e.
    Mi sto avvicinando alla programmazione OOP in PHP, devo dire che non è facile venir fuori dal procedurale, ma so che è un passo doveroso.
    Bando alle ciance, sto provando a creare una semplice classe che si connette al DB MySQL per poi poter lanciare query in PHP in tutta libertà.
    Come potrete intuire, se sono qui a scrivere, ovviamente non funziona...
    Ecco il codice:
    codice:
    <?php
    
    class dbconnect {
        public $host = "nomehost";
        public $login = "login";
        public $pass = "pass";
        public $database = "nome_DB";
        
        function connection() {
            $db = mysql_connect($this->host, $this->login, $this->pass)
                or die ('Unable to connect!');
            mysql_select_db($this->database, $db) or die(mysql_error($db));
        }
        
    }
    
    $connessione = new dbconnect();
    $connessione->connection();
    
    $query = 'SELECT * FROM people';
    $result = mysql_query($query, $db) or die(mysql_error($db));
    
    ?>
    Mi appaiono notifiche e warning:

    codice:
    Notice: Undefined variable: db in /Applications/MAMP/htdocs/NUOVO/cap 11/class.dbconnect.php on line 21
    
    Warning: mysql_query() expects parameter 2 to be resource, null given in /Applications/MAMP/htdocs/NUOVO/cap 11/class.dbconnect.php on line 21
    
    Notice: Undefined variable: db in /Applications/MAMP/htdocs/NUOVO/cap 11/class.dbconnect.php on line 21
    
    Warning: mysql_error() expects parameter 1 to be resource, null given in /Applications/MAMP/htdocs/NUOVO/cap 11/class.dbconnect.php on line 21
    Capisco il senso, giustamente faccio riferimento a variabili o argomenti che sono nella classe, dunque non posso averli fuori. Ma la mia domanda è: come faccio a risolvere?

    Scusate la domanda veramente da niubbo, ma sono all'inizio della OOP e la risposta mi aiuterà sicuramente a comprendere meglio.

    Grazie in anticipo per le risposte!
    Evil

  2. #2
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202
    Sono l'ultima persona che ti dovrebbe dare una mano ma ci provo lo stesso...

    La connessione devi salvarla in una varibile pubblica nel tuo caso

    public $conn

    nella tua pagina, quando vai a fare la select, alla mysql_query non gliene frega niente del tuo oggetto connessione, ma vuole una risorsa valida per identificare la connessione ecco perche gli passi nomedeltuoggetto->risorsa_di_connessione...

    Non l'ho testato ma le considerazioni fatte dovrebbero essere giuste..

    Codice PHP:
    <?php

    class dbconnect {
        public 
    $host "nomehost";
        public 
    $login "login";
        public 
    $pass "pass";
        public 
    $database "nome_DB";
        public 
    $conn;

        function 
    connection() {
            
    $this->conn mysql_connect($this->host$this->login$this->pass)
                or die (
    'Unable to connect!');
            
    mysql_select_db($this->database$db) or die(mysql_error($db));
           
        }
        
    }

    $db = new dbconnect();
    $db->connection();

    $query 'SELECT * FROM people';
    $result mysql_query($query$db->$conn) or die(mysql_error($db));

    ?>
    Che mestiere difficile.....essere da soli ancora di più

  3. #3
    Ciao Fractals87, grazie mille per la risposta. Ho provato il tuo metodo ma purtroppo non funziona
    Invece, se inserisco la query all'interno del metodo funziona alla perfezione. Mi sa che devo trovare un modo, se esiste, di rendere disponibili le variabili al di fuori della classe.

  4. #4
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202
    che errori ti da?
    nel metodo che ti ho consigliato io?
    Che mestiere difficile.....essere da soli ancora di più

  5. #5
    nel codice di fractal è sbagliata questa riga:

    Codice PHP:
    mysql_select_db($this->database$db) or die(mysql_error($db)); 
    da cambiare in

    Codice PHP:
    mysql_select_db($this->database$this->conn) or die(mysql_error($this->conn)); 

    cmq faccio notare che mysql_* è deprecata come api, dovreste passare a mysqli o pdo_mysql (w quest'ultima)
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  6. #6
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202
    da cambiare in codice PHP: mysql_select_db($this->database, $this->conn) or die(mysql_error($thi
    giusto quella me la era persa...
    Che mestiere difficile.....essere da soli ancora di più

  7. #7
    WOW, funziona!!!
    Siete grandi. Ma giusto per capire: tra le proprietà non devo immettere il valore di una variabile, ma soltanto nel metodo, dunque questa viene resa disponibile fuori dalla classe?

    codice:
    public $conn;
    
    // metodo
    $this->conn = "bla bla bla"
    In questo modo la variabile pubblica $conn può essere usata in tutto lo script liberamente, giusto?

    @Santino
    Hai perfettamente ragione riguardo MySQLI e PDO, ne sono cosciente, ma sto facendo un passo alla volta. Dal procedurale sono passato -almeno ci provo- all'OOP. Una volta terminato guarderò anche PDO

    Grazie ancora ragazzi!
    Evil

  8. #8
    Evil, fai una domanda da persona che non ha neanche provato a leggere la guida di oop di html.it (per citare qualcosa di terra terra) o proprio non hai capito le proprietà/metodi di una classe e l'uso private/protected/public su di essi?
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  9. #9
    Non per difendere o attaccare nessuno ma a parere mio l'errore più grosso è stato chiedere consigli sulla oop in un forum.... puoi essere il migliore del mondo nel programmare in oop di php ma troverai SEMPRE qualcuno a cui non andrà bene qualcosa ovviamente perchè ha studiato con altri sistemi da altre parti. Quindi a parer mio una cosa sola devi fare... prenditi qualche script per la connessione al db in oop (tanto se ne trovano tante in giro) e vedi le tue mancanze, ragionando sulla medesima e eventualmente apportare migliorie usandola....

    Ciao ciao

  10. #10
    Originariamente inviato da Santino83_02
    Evil, fai una domanda da persona che non ha neanche provato a leggere la guida di oop di html.it (per citare qualcosa di terra terra) o proprio non hai capito le proprietà/metodi di una classe e l'uso private/protected/public su di essi?
    Ciao Santino,

    ho fatto la premessa: sono niubbo! Infatti sono partito proprio dalla guida che hai citato, quella di HTML.it, ma il tutto è accaduto soltanto ieri notte e sono arrivato sino alla lezione 10 -dopo mi si chiudevano gli occhi-.
    Come mia abitudine in tutto quello che faccio, dopo un primo studio vado a cimentarmi e smanettare su quello che ho appreso, mi aiuta a comprendere meglio, e quindi eccomi qua a chiedere a voi che siete stati davvero cortesi nelle risposte!

    Dunque la risposta alla tua domanda è: si e no, nel senso che son partito con la OOP soltanto ieri notte

    Grazie ancora
    Evil

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.