Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    Funzioni predefinite o funzioni personalizzate?

    Ciao a tutti!
    Il mio problema è nel titolo del thread:
    sto iniziando un sito molto simile a facebook (per un progetto scolastico) e vorrei un consiglio. Premetto che io uso Postgres come DBMS e non MySql (anche se le funzioni per la connessione al db, l'inserimento ecc sono molto simili).
    Vorrei sapere: è meglio creare una pagina apposta per le funzioni relative al db personalizzandole (quindi rendendole in meno passaggi una volta richiamate) e richiamando la pagina ovunque serva o ogniqualvolta debba connettermi al db utilizzare funzioni come pg_query, pg_connect, pg_fetch_row ecc ecc?

    Spero di aver spiegato qual è il mio problema!

  2. #2
    Utente di HTML.it L'avatar di jcsnake
    Registrato dal
    Jun 2010
    Messaggi
    629
    Ciao, ti conviene sicuramente utilizzare una singola pagina in cui inserisci tutte le funzioni generali di connessione al db e le funzioni predefinite e sempre uguli che usi più spesso, per poi richiamare la pagina con un semplice include.

  3. #3
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    più che pagina io parlerei di classe.

    Una classe php a cui passi i tuoi parametri o la query e che si occupa dell'inserimento (dentro avrà le chiamate a pg_query ecc) ma se un domani passerai a mysql dovrai modificare solo la classe e non tutto il tuo codice.

    ciao

  4. #4
    Grazie per la celere risposta!

    Approfitto della tua disponibilità.
    Tra le varie query che devo fare per il sito c'è sicuramente quella dell'inserimento dati durante la registrazione di un utente.
    Che sarà una cosa del genere:

    Insert into utente (nome, cognome, email, password) values (...)

    Secondo te nella mia pagina con le funzioni di connessioni, devo creare una funzione registrazione_utente o creo solo le funzioni generali per il comportamento di select, insert ecc oppure le creo per ogni query che intendo fare?

    Può sembrare una domanda stupida, ma davvero non so quale sia meglio!

  5. #5
    Utente di HTML.it L'avatar di jcsnake
    Registrato dal
    Jun 2010
    Messaggi
    629
    no no ti conviene sempre scriverla nella classe che hai creato, così come dice gianiaz se un domani dovessi cambiare db non ti metti a cambiare tutte le pagine dove hai questa funzione ma solo il file della classe.

  6. #6
    Non cambierò il db perché è solo un'esercitazione, ma questa info può sempre servire in futuro!
    Quindi la mia classe sarà lunghissima immagino, dovendo aggiungere una funzione per ogni query.

  7. #7
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    io cercherei di generalizzare, altrimenti non avrebbe senso farlo in un file piuttosto che in un altro.

    Uno spunto potrebbe essere, creare un metodo della funzione che accetti un array nella forma:

    array('campo1' => 'valore1', 'campo2' => 'valore2')

    e che di conseguenza crei una query per l'inserimento.

    Farne una per ogni query non porterebbe a nessun vantaggio.

    ciao

  8. #8
    buttatti su un framework!
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  9. #9
    Ci ho messo un po' ma penso di esserci riuscita:
    Codice PHP:
    <?php
    class dbfunctions{
        
    #definisco le variabili d'accesso
        
    var $conn "host=localhost port=5432 dbname=minifacebook user=*** password=***";
        var 
    $db;
        var 
    $query;

        
    #Connessione al database tramite i parametri indicati
        
    public function connect(){
            
    $this->db pg_connect($this->conn);
            if (!
    $this->db){
                die (
    "Errore nella connessione. Verificare i parametri d'accesso.");
            }    
            return 
    $this->db;
        }

        
    #Input: una query di tipo SELECT
        #Output: array associativo del tipo : $array['campo']
        
    public function query($query){
            
    $this->query pg_query($this->db,$query);
            
    $righe pg_num_rows($this->query);
            if (
    $righe 1){
                while (
    $row pg_fetch_assoc($this->query)){
                    
    $result[] = $row;
                }
                return 
    $result;
            }elseif (
    $righe == 1){
                while (
    $row pg_fetch_assoc($this->query)){
                    
    $result $row;
                }
                return 
    $result;
            }elseif (
    $righe == 0){
                return 
    NULL;
            }
        }    
        
        
    #Input: una query di tipo INSERT, UPDATE, DELETE
        #Output: se la query va a buon fine true, altrimenti false
        
    public function insert($query){
            return (
    pg_query($this->db,$query));
        }

        
    #Chiude la connessione al database creata
        
    public function close() {
            
    pg_close($this->db);
        }
    }
    ?>
    Adesso il problema è che credo di invocare la classe e le funzioni nel modo sbagliato!

    Codice PHP:
    #bisogna verificare che l'email inserita non sia già stata usata da un altro utente
                    
    $db = new dbfunctions();
                    
    $db->connect();
                    
    $result $db->query("SELECT COUNT(*) FROM utente WHERE email = '".$email."'");
                    
    #echo $result;
                    
    if ($result 0){
                        echo 
    "<table align='center'><tr><td><ul>[*]Attenzione! L'indirizzo email da te inserito &egrave gi&agrave in uso.[/list]</td></tr></table>";
                        echo 
    "<form method='post' action='index.php'><input type='submit' value='Indietro'></form>";
                    }else{
                        
    #se l'email non è in uso allora registra l'utente
                        
    $result->insert("INSERT INTO utente (nome, cognome, email, password) VALUES ('".$nome."', '".$cognome."', '".$email."', '".$password."')");
                        echo 
    "

    La tua registrazione è avvenuta con successo!</p>

    Completa il tuo profilo!</p>"
    ;
                        echo 
    "[url='infoprofilo.php']Ora[/url] o [url='home.php']Pi&ugrave tardi[/url]";
                    } 
    Non riesco a stampare il risultato per sapere se è giusta o meno!

  10. #10
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    Per prima cosa ti consiglio di gestire gli errori, se mandi una query con sintassi errata in questo caso non viene gestito l'errore, quindi come prima cosa aggiungerei:

    codice:
    $this->query = pg_query($this->db,$query); 
    if($this->query) {
    .... tutta la tua parte di codice
    } else {
      die(pg_result_error($this->query));
    }
    Se la sintassi non è corretta perdonami ma è una vita che non lavoro con postgres.

    Per quanto riguarda poi la tua domanda, non capisco in che senso non riesci a stampare il risultato, anzichè echo $result prova con :

    var_dump($result);

    magari era davvero il caso di un errore nella query.

    Ciao

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.