Pagina 2 di 6 primaprima 1 2 3 4 ... ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 53
  1. #11
    ok.
    da come hai descritto il tutto nn fa una piega.
    solo che ancora nn ho capito delle cose a questo punto.
    ho modificato la classe Connessione:
    Codice PHP:
    <?php

    class Connessione {

        private 
    $pdo;

        private function 
    __construct() {
            try {
                
    $this->pdo = new PDO('mysql:host=localhost;dbname=db'"user""pwd", array(
                            
    PDO::ATTR_PERSISTENT => TRUE,
                            
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
                        
    ));
            } catch (
    PDOException $e) {
                echo 
    $e->getMessage();
                die();
            }
        }

        public function 
    __clone() {
            
    trigger_error('Clone is not allowed.'E_USER_ERROR);
        }

        public function 
    getPdo() {
            return 
    $this->pdo;
        }

    }
    se la richiamo nell'altra classe Login, la funzione getPdo() nn dovrebbe darmi tutte le funzioni disponibili per $this->pdo?
    cioè:
    Codice PHP:
        public function checkUtente() {
                
    $query $this->conn->getPdo()->
        } 
    nn mi fa vedere le funzioni disponibili.
    nn so se mi sono spiegato.

  2. #12
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    Codice PHP:



    class database()
    {
    private 
    $connection false 
    private 
    $server ="" ;
    private 
    $user "" ;
    private 
    $pass "" ;
    private 
    $dbName "" ;


    public 
    functiuon __construct$opts false  )
    {
    /* Setta i valori*/

    }


    private function 
    doConnect()
    {

    /*controlla gli attributi e connetti*/

    $this->selectDb( ) ;

    }

    public function  
    selectDb($dbName=false)
    {
    // se ho connessione

    // usa $this->dbName se non e' passato il prametro $dbName


    mysql_select_db($dbn,$this->connection) ;


    }

    // TUTTI GLI ALTRI METODI UTILI
    public function doQuery$query )  ;
    public function 
    doSelect$table $options=false ) ; 
    public function 
    doInsert$table $options ) ;

    // ECCETERA 

    }

    class 
    user()
    {
    private 
    $data false ;
    priivate $isLogged false ;


    // ECCETERA




    TI fai delle classi cosi' sei apposto

    define( "INCLUDE_PATH" , "./" ) :
    include( "resources.php" ) ;

    dentro resources ci metti include( INCLUDE_PATH."/dbclass.php" ) ; etc etc

    quindi dopo gli include

    $user = new User();
    $sb = new Database( array( "server" => "" .--.... ) ) ; etc.. // puoi anche gestire nel costruttore diu default oppure esendere la classe per non lanciare ogni volta.

    // Volendo puoi stipare in sessione le classi (una specie di gestore delle persistenze primitivo)


    quidni
    Codice PHP:
    try{
    $user->loadByName() ; // loadById vedi te
    }
    catch( 
    USERNOTFOUND_EXCEPTION $e1 ){ /*gestisci*/ }
    catch( 
    EXCEPTION $e1 ){ /*gestisci eccezione generica*/ }

    se lo user esiste ed e' attivo
    session_start();
    $_SESSION["user"] = $user ; 
    E vai trnauqillo.

    E' piu' semplice, fa le stesse cose, puoi sempre sapere dove e come gestire errori.


    daltro canto se vuoi usare i singleton

    Codice PHP:

    class database()
    {

    public function 
    connetti()
    {
    /*eseguiconnessione e restituiscila*/


    }

    public function 
    selectDb($db,&$conn)
    {}

    public 
    funcition doQUery($q);
    // ETCCC

    }

    e per usarle 

    $conn 
    database::connetti() ;
    database::selectDb"miodatabase" $conn  ) ;

    // ETC:......

    //devi fare query 

    $ris database::doQuery"select * from this_is_right where 1" ) ; 

  3. #13
    intanto grazie per l'ottima spiegazione.
    c'è solo una cosa che mi lascia ancora un pò "perplesso".
    in tutte le pagine dove mi serve includo il file resources.php.
    ma così nn succede che ogni volta che richiamo una pagina mi viene creato un oggetto Database, User, ecc....??

  4. #14
    inoltre ho anche un altro problema che riguarda gli include multipli.
    io ho il classico head.php:
    Codice PHP:
    <?php
    session_start
    ();
    include 
    'lib/connessione.php';
    $objConn = new Connessione();
    if (isset(
    $_GET['end']) && ($_GET['end'] == 'fine_sessione')) {
        
    $objConn->logout();
        return;
    }
    ?>
    <!DOCTYPE HTML>
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
            <title>Raber</title>
        </head>
        <body>
            <div id="menu">
                <?php
                
    if ($objConn->verificaSessione()) {
                    
    ?>
                    [url="home.php"]Home[/url] |
                    [url="<?php echo $_SERVER['PHP_SELF']; ?>?end=fine_sessione"]Logout[/url]
                    <hr/>
                <?php }
                
    ?>
            </div>
    qua funziona tutto.
    poi ho home.php:
    Codice PHP:
    <?php
    include 'head.php';
    if (!
    $objConn->verificaSessione()) {
        
    header('location:index.php');
    }
    ?>
    <h1>CIAO</h1>
    <?php
    include_once 'footer.php';
    ?>
    che invece nn funziona.
    la funzione verificaSessione() verifica se una variabile di sessione è settata o meno.
    in head.php la uso per nascondere/mostrare le voci di menu.
    in home invece per reindirizzare al form di login.
    solo che in home.php nn funziona.
    come posso risolvere questi include multipli?

  5. #15
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    Si ogni volta che apri 1 script devi instanziare l'oggetto database. A meno chetu non voglia gestire la persistenza magari in sessione.

    poi attenzione che stai mescolando entità eterogenee.

    Gli headers solitamente contengono solamente includes ed eventualmente istanziazione di cose che servono ovunque.


    esempio :
    head.php

    Codice PHP:

    <?PHP

    // DEFINISCI COSTANTI
    define("PERCORSO","/rootdir/subpath/") ;

    // INCLUDI RISORSE
    require_once( "percorso/file1.php" ) ;
    require_once( 
    "percorso/file2.php" ) ;


    // ISTANZIA 
    $DB = new database();
    $DB->connect();

    $USER_MANAGER = new userManager();
    $USER_MANAGER->loadUserBySession();

    // CONTROLLA

    try{
     
    $USER_MANAGER->userCheck();
    }catch( 
    EXCEPTION $e ){ /*Gestisci eccezione*/ }

    // Altre cose generiche
    ?>
    Come vedi non c'e' codice html o altro hai solo inclusioni e istanze di quello che ogni pagina userà.


    Le pagine poi includi questo file e sei apposto hai gia' le var e i controlli fatti
    COsi' hai sempre un codice pulito e riusabile.

  6. #16
    Ciao Viruz permettimi di dissentire....

    Un pattern singleton PHP su una classe database è abbastanza comune..

    l'errore che c'era sul primo post è:
    Codice PHP:
    class Login {

        private 
    $user;
        private 
    $pwd;
        
    // non posso istanziare una classe sulla definizione di una proprietà !!!!!
        
    private $conn Connessione::getInstance(); // ERRORE 
    da risolvere cosi:
    Codice PHP:
    class Login {

        private 
    $user;
        private 
    $pwd;
        private 
    $conn;

        function 
    __construct($user$pwd) {
            
    $this->user $user;
            
    $this->pwd $pwd;
            
    $this->conn Connessione::getInstance();
        }
     } 
    come disse Satifal... che poi sarebbe $this->db e non $this->conn ma comunque come dici tu:
    Si ogni volta che apri 1 script devi instanziare l'oggetto database. A meno chetu non voglia gestire la persistenza magari in sessione.
    se ho una e una sola unica istanza del database è meglio no? a quello serve il singleton..

    Questa volta, più che un voto.. è favoreggiamento.

  7. #17
    Utente di HTML.it L'avatar di _debo
    Registrato dal
    Mar 2012
    residenza
    London, UK
    Messaggi
    858
    Innanzitutto singleton non è una classe ma un design pattern della programmazione ad oggetti, o meglio anti pattern per essere precisi. Dire che singleton non va usato significa non avere capito che cosa la programmazione ad oggetti è.

    Con questo non sto dicendo forza e coraggio usiamo tutti quanti questo pattern quanto più possibile, sarei assolutamente pazzo se lo dicessi, però singleton esiste ed ha i suoi campi di applicazione. Purtroppo testare singleton è un PITA :-)

    Parlando di inclusione file invece è opportuno che chiunque si addentri alla programmazione ad oggetti prenda il più in fretta possibile confidenza con i concetti di:

    - include path
    - autoloading

    Su quest'ultimo consiglio vivamente di dare un occhiata ad SPL ed allo standard PSR-0

    Ciao e alla prossima.

  8. #18
    quindi una cosa del genere:
    Codice PHP:
    <?php // resources.php

    session_start();

    require_once 
    'lib/connessione.php'// GESTIONE DB

    $objConn = new Connessione();

    if (
    $_SERVER['REQUEST_METHOD'] == "POST" && isset($_POST['btn_login'])) {
        
    $objConn->login($_POST['username'], $_POST['password']);
    }
    if (isset(
    $_GET['end']) && ($_GET['end'] == 'fine_sessione')) {
        
    $objConn->logout();
        return;
    }

    require_once 
    'head.php'// PARTI HTML COMUNI A TUTTE LE PAGINE
    poi la pagina index.php (che contiente il form di login):
    Codice PHP:
    <?php
    include_once 'resources.php';
    ?>
    <form action="<?php $_SERVER['PHP_SELF']; ?>" method="POST">
        <table id="tbLogin">
            <tbody>
                <tr>
                    <td>User:</td>
                    <td><input type="text" id="focus" name="username" value="" /></td>
                </tr>
                <tr>
                    <td>Password:</td>
                    <td><input type="password" name="password" value="" /></td>
                </tr>
                <tr>
                    <td></td>
                    <td><input type="submit" value="Submit" name="btn_login" /></td>
                </tr>
        </table>
    </form>
    <?php
    include_once 'footer.php';
    ?>
    e poi home che nn deve essere vista a meno che nn venga eseguito il login:
    Codice PHP:
    <?php
    include_once 'resources.php';
    if (!
    $objConn->verificaSessione()) {
        
    header('location:index.php');
    }
    ?>
    <h1>CIAO</h1>
    <?php
    include_once 'footer.php';
    ?>
    solo che sta pagina continua a nn funzionare.
    nel senso che è raggiungibile sempre e cmq.

  9. #19
    $objConn->verificaSessione()

    questo metodo cosa fa??
    Questa volta, più che un voto.. è favoreggiamento.

  10. #20
    Utente di HTML.it L'avatar di _debo
    Registrato dal
    Mar 2012
    residenza
    London, UK
    Messaggi
    858
    Verifica la presenza di una variabile di sessione, la domanda è dove viene settata? Ipotizzo nella login, ma come? E come viene letta?

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 © 2026 vBulletin Solutions, Inc. All rights reserved.