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

    [PHP] Mysql Fetch Assoc in una classe PHP

    Premetto che non mi funziona manco nella versione procedurale, comunque, questo è il listato del file di config, dove sono presenti le classi:

    Codice PHP:
    session_start();

    class 
    blog
        private 
    $db_host
        private 
    $db_user
        private 
    $db_pass
        private 
    $db_name
        public 
    $conn
        public 
    $sel
         
        public function 
    __construct(){ 
            
    $this->db_host='localhost'
            
    $this->db_user='root'
            
    $this->db_pass=''
            
    $this->db_name='blog'
            
    $this->conn=mysql_connect($this->db_host,$this->db_user,$this->db_pass); 
            
    $this->sel=mysql_select_db($this->db_name,$this->conn);
        } 
         
    }class 
    conn extends blog
         
        public function 
    Errore_connessione(){ 
            if(!
    $this->conn){ 
                die(
    'Errore di connessione'); 
            }
        } 
             
            public function 
    Errore_selezione(){ 
            if(!
    $this->sel){ 
                die(
    'Errore di connessione del database');
             
              }
             }
    /* REGISTRAZIONE */
    }class registrati extends conn{
        protected 
    $nome;
        protected 
    $cognome;
        public 
    $nickname;
        protected 
    $email;
        protected 
    $password;
        protected 
    $moderazione;
        protected 
    $amministratore;
        public 
    $query;
        public 
    $result;
        
        public function 
    __construct(){
            
    parent ::__construct();
                    
    $this->nome=mysql_real_escape_string($_POST['nome']);
            
    $this->cognome=mysql_real_escape_string($_POST['cognome']);
            
    $this->nickname=mysql_real_escape_string($_POST['nickname']);
            
    $this->email=mysql_real_escape_string($_POST['email']);
            
    $this->password=mysql_real_escape_string($_POST['password']);
            
    $this->moderazione=mysql_real_escape_string('no');
            
    $this->amministratore=mysql_real_escape_string('no');
            
    $this->query="INSERT INTO utenti (nome,cognome,nickname,email,password,moderazione,amministratore) VALUES ('{$this->nome}','{$this->cognome}','{$this->nickname}','{$this->email}','{$this->password}','{$this->moderazione}','{$this->amministratore}')";
            
    $this->result=@mysql_query($this->query$this->conn);
        }
        public function 
    registrati(){
            switch(
    FALSE){
            case 
    $this->nome:
            case 
    $this->cognome:
            case 
    $this->nickname:
            case 
    $this->email:
            case 
    $this->password:
            echo(
    'Devi riempire tutti i campi
    [url="registrati.php"]Ritenta[/url]'
    );
            break;
            default:
        
        
    $this->query;
        
    $this->result;
        
        if(!
    $this->result){
            die (
    "Errore nella query".mysql_error());
        }else{
            
    header("Location:login_utente.php");
                           }
                     }
            
             }
    /* LOGIN */         
    }class login extends registrati{
        
        protected 
    $num_rows;
        protected 
    $assoc;
        
        public function 
    __construct(){
            
    parent ::__construct();
            
    $this->query="SELECT * FROM utenti WHERE nickname='{$this->nickname}' AND password='{$this->password}'";
            
    $this->result=mysql_query($this->query$this->conn);
            
    $this->num_rows=@mysql_num_rows($this->result);
            
    $this->assoc=mysql_fetch_assoc($this->result);
        }
        
        public function 
    login(){
            switch(
    FALSE){
            case 
    $this->nickname:
            case 
    $this->password:
            echo(
    'Devi riempire tutti i campi
    [url="login_utente.php"]Ritenta[/url]'
    );
            break;
            default:
        
        
    $this->query;
        
    $this->result;
        
        @
    $_SESSION['utente']=$this->nickname;
        
            if(
    $this->num_rows==1){
            
    header("Location:index.php");
        }else{
            echo 
    "Dati errati: [url='login_utente.php']Ritenta[/url] | [url='/blog/registrati.php']Registrati[/url]";
               }
            }
        }
        public function 
    index_editor(){
            if(
    $this->assoc['amministratore']=='ok'){
                echo(
    '[url="editor.php"]Editor[/url]');
            }
        }
    }

    @
    session_register('Logged');

    $conn = new blog(); 
    $conn->conn

    $sel= new blog(); 
    $sel->sel

    $Errore_connessione = new conn(); 
    $Errore_connessione->Errore_connessione(); 

    $Errore_selezione = new conn(); 
    $Errore_selezione->Errore_selezione(); 
    Questo invece è il file index, che non presentava alcun errore prima che aggiungessi l'elemento in questione:

    Codice PHP:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Home</title>
    </head>

    <body>
    <h1>Home page</h1>
    <?php
    include('blog/config.php');

    switch(@
    $_SESSION['utente']){
        case 
    TRUE:$utente=@$_SESSION['utente'].'
    [url="logout.php"]Logout[/url]'
    ;
        break;
        default:
    $utente='[url="registrati.php"]Registrati[/url] | [url="login_utente.php"]Login[/url]';
    }

    echo(
    'Benvenuto '.$utente);

    $index_editor = new login();
    $index_editor->index_editor();


    ?>
    </body>
    </html>
    Questo è quanto mi "dice" la pagina index:


    La parte dove stanno gli errori è questa, nella classe registrazione:
    Codice PHP:
                    $this->nome=mysql_real_escape_string($_POST['nome']);
            
    $this->cognome=mysql_real_escape_string($_POST['cognome']);
            
    $this->nickname=mysql_real_escape_string($_POST['nickname']);
            
    $this->email=mysql_real_escape_string($_POST['email']);
            
    $this->password=mysql_real_escape_string($_POST['password']); 
    Spero possiate aiutarmi, mi sto cimentando da poco nella Oop e sono pure mezzo cotto da ieri sera (sic!)

  2. #2
    L'errore è pienamente esplicativo, nell'array $_POST non sono presenti gli indici in questione dato che non è stato effettuato alcun submit.

    P.S.
    Utilizzare l'array $_POST in quale modo all'interno di una classe è osceno. Piuttosto che scrivere classi simili è preferibile l'approccio procedurale!
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  3. #3
    Originariamente inviato da satifal
    L'errore è pienamente esplicativo, nell'array $_POST non sono presenti gli indici in questione dato che non è stato effettuato alcun submit.

    P.S.
    Utilizzare l'array $_POST in quale modo all'interno di una classe è osceno. Piuttosto che scrivere classi simili è preferibile l'approccio procedurale!
    Eh certo... il form li indirizza alla pagina di login! è vero.
    Senti, cosa posso utilizzare in alternativa ai $_POST allora?

  4. #4
    Ho provato a correggere in questo modo, ma non cambia niente, anzi colleziono due variabili indefinite in più:

    Codice PHP:
    class login extends registrati{
        public 
    $nickname;
        protected 
    $password;
        protected 
    $num_rows;
        protected 
    $assoc;
        
        public function 
    __construct(){
            
    parent ::__construct();
            
    $this->nickname=mysql_real_escape_string($_POST['nickname']);
            
    $this->password=mysql_real_escape_string($_POST['password']);
            
    $this->query="SELECT * FROM utenti WHERE nickname='{$this->nickname}' AND password='{$this->password}'";
            
    $this->result=mysql_query($this->query$this->conn);
            
    $this->num_rows=@mysql_num_rows($this->result);
            
    $this->assoc=mysql_fetch_assoc($this->result);
        } 

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    1,453
    Quanto ti complichi la vita oddio , comunque ti ho un po semplificato le classi

    Codice PHP:
    session_start(); 

    class 
    blog{  
        private 
    $db_host;  
        private 
    $db_user;  
        private 
    $db_pass;  
        private 
    $db_name;  
        public 
    $conn;  
        public 
    $sel;  
          
        
    // Seriamente avresti esteso un'altra classe per controllare la connessione?
        
    public static function connect(){  
            
    $this->db_host='localhost';  
            
    $this->db_user='root';  
            
    $this->db_pass='';  
            
    $this->db_name='blog';  
            
    $this->conn=mysql_connect($this->db_host,$this->db_user,$this->db_pass);  
            
    $this->sel=mysql_select_db($this->db_name,$this->conn); 
            if(!
    $this->conn
                die(
    'Errore di connessione');  
            if(!
    $this->sel)  
                die(
    'Errore di connessione del database'); 
        }  
          
    /* REGISTRAZIONE */ 
    }class registrati
        
        
        protected 
    $post_var = array();
        public 
    $query
        public 
    $result
         
        public function 
    __construct(){ 
            if(
    $this->check_register()){
            
    $this->query="INSERT INTO utenti (nome,cognome,nickname,email,password,moderazione,amministratore) VALUES ('{$this->post_var['nome']}','{$this->post_var['cognome']}','{$this->post_var['nickname']}','{$this->post_var['email']}','{$this->post_var['password']}','no','no')"
            
    $this->result=mysql_query($this->query$this->conn) or die ("Errore nella query".mysql_error());
          }
        } 

     public function 
    check_register(){ 
            
             
    //QUI AGGIUNGI I CONTROLLI PER TUTTI I CAMPI COME VUOI TE E RICORDATI DI TORNARE CON UN VALORE BOOLEAN VERO SE VUOI CHE IL CONSTRUCT PROSEGUA
            
            //SE TUTTI I CONTROLLI VANNO A BUON FINE
            
    foreach($_POST as $var => $value$this->post_var[$var] = mysql_real_escape_string($value);
            return 
    true;
        } 
    /* LOGIN */          
    }class login extends registrati
         
        protected 
    $num_rows
        protected 
    $assoc
         
        public function 
    __construct(){ 
          
    parent::check_register();
            
    $this->query="SELECT * FROM utenti WHERE nickname='{$this->post_var['nickname']}' AND password='{$this->post_var['password']}'"//usare una password in md5 no?
            
    $this->result=mysql_query($this->query$this->conn); 
            
    $this->assoc=mysql_fetch_assoc($this->result); 
            if(
    mysql_num_rows($this->result)==1){
                
    $_SESSION['utente'] = $this->post_var['nickname'];
                
    header("Location:index.php"); 
            }else
               echo 
    "Dati errati: [url='login_utente.php']Ritenta[/url] | [url='/blog/registrati.php']Registrati[/url]"
          } 
         
    }

    blog::connect();

    //organizzati meglio le sessioni e dichiara le classi 
    Login utilizzando i campi relativi alla classe registrati non necessita di controlli
    fai tutto nel check_register per essi

  6. #6
    Ok, ho capito che devo rifare tutto da capo. Vi ringrazio.

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.