tutti i consigli su questa classe?

Stato
Discussione chiusa ad ulteriori risposte.
Io sarei quello che schiaccia pulsanti a caso e campa risposte in aria? Ma fammi il piacere, torna da dove sei venuto e non romperei i *******i.

Visto che sei così pro, tira fuori un altro motivo per cui dovrebbe dargli errore dalle premesse che ha fatto nel post e poi puoi discutere, altrimenti stai zitto che fai più bella figura.
 
[ot]Tu non sei una persona normale[/ot]

Comunque volevo aiutarlo essendo sicuro di quello che dico, io ho la tua stessa ipotesi, non ti ho mai contraddetto.
[ot]idiota[/ot]
 
io uppo i file su altervista....
(ho windows e non ho installato php sulla mia macchina....)
i tag li apro cosi:
<?php
/*
*code...
*/
?>
 
allora, caro amico mio, se noti su altervista c'è di standard una cartella di php5, perché normalmente merdavista usa php4. Le soluzioni sono:
1) utilizzare la cartella php5 (dove credo sia impostato php5, a giudicare dal nome)
2) attivi gli htacess ed usando il pulsantino apposito attivi lo switch a php5
 
ah ok....
vedo un po ... ora suono la mia guitarrella...asd
vedo dopo ma grazie mille o diuecimila lo stesso!
 
Ciao ragazzi, ecco il codice volevo essere cosnigliato qualcosa....
ah il fatto delle exception (l'ho ftt senza ereditarieta) nn so come dicevi tu comenque date uno sguardo accetto tutti i tipi di consigli dal piu idiota al piu completo...
:)
PHPclass.php
Codice:
<?php
/* 
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of PHPClass
 *
 * @author admin
 */
class db{
    private $host;
    private $name;
    private $user;
    private $pass;
    private $connect;
    private $select;
    public function __construct($host,$name,$user,$pass){
        $this->host=$host;
        $this->name=$name;
        $this->user=$user;
        $this->pass=$pass;
    }
    public function connect(){
        $this->connect=mysql_connect($this->host,$this->user,$this->pass);
        if(!$this->connect){
            throw new Exception(".:!Errore durante la connessione al database, se l'errore persiste contattare l'admin!:.");
        }else{
            $this->select();
        }
    }
    private function select(){
        $select=mysql_select_db("my_vincy6web",$this->connect);
        if(!$select){
            exit(".:!Errore durante la selezione!:.");
        }
    }
}

class guestbook{
    private $nome;
    private $testo;
    private $data;
    private $ora;
    public $read=array();
    public function control($nome,$testo,$data,$ora){
        $nome=trim($nome);
        $testo=trim($testo);
        if(empty($nome) || empty($testo)){
            throw new Exception(".:!Compilare tutti i campi, grazie!:.");
            return false;
        }else{
            $nome=htmlentities($nome);
            $testo=htmlentities($testo);
            $this->nome=$nome;
            $this->testo=$testo;
            $this->ora=$ora;
            $this->data=$data;
            return true;
        }
    }
    public function read(){
        $query=mysql_query("SELECT * FROM guestbook ORDER BY id DESC");
        if(!$query){
            throw new Exception(".:!Impossibile leggere i commenti, aggiornare la pagina , se l'errore si ripresenta contattare l'admin!:.");
        }
        while($all=mysql_fetch_array($query)){
            $this->nome=$all['nome'];
            $this->testo=$all['testo'];
            $this->data=$all['data'];
            $this->ora=$all['ora'];
            array_push($this->read,array("nome"=>$this->nome,"testo"=>$this->testo,"data"=>$this->data,"ora"=>$this->ora));
        }
    }
    public function write($nome,$testo,$data,$ora){
        if($this->control($nome,$testo,$data,$ora)){
            $query=mysql_query("INSERT INTO guestbook (nome,testo,data,ora) VALUE ('$nome','$testo','$data','$ora')");
            if(!$query){
                throw new Exception(".:!Commento non inserito correttamente, riprovare se l'errore persiste contattatare l'admin!:.");
            }else{
                throw new Exception(".:!Commento inserito correttamente!:.");
            }
        }
    }

}catch(Exception $e) {
    echo $e->getMessage();
}


?>
index.php
Codice:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <link rel="stylesheet" href="style.css" />
        <title> | Gusetbook | </title>
    </head>
    <body>
        <div id="page">
            <div id="form">
                <form action="<?php $_SERVER['PHP_SELF'];?>" method="post">
                    Nick :<br />
                    <input type="text" name="nome" class="input" />
                    <br />
                    Testo:<br />
                    <textarea name="testo" class="input" ></textarea>
                    <br /><br />
                    <input type="submit" value="invia" name="invia" class="input" />
                </form>
            </div>
        <?php
        include_once("PHPClass.php");
        $db=new db("localhost","my_vincy6web","vincy6web","vincy6web");
        $guestbook=new guestbook();
        $db->connect();
        if(isset($_POST['invia'])){
            $nome=$_POST['nome'];
            $testo=$_POST['testo'];
            $data=date (" d-m-Y ");
            $ora=date(" H:i ");
            $guestbook->write($nome, $testo, $data, $ora);
        }
        $guestbook->read();
        $i=0;
        while($guestbook->read[$i]){
            echo
            '
            <div class="commenti">
                <table border="1" class="table">
                    <tr>
                        <td class="nick">'.$guestbook->read[$i]["nome"].'</td>
                    </tr>
                    <tr>
                        <td class="testo"><p>'.$guestbook->read[$i]["testo"].'</p></td>
                    </tr>
                    <tr>
                        <td class="data">Questo commento e stato scritto da : '.$guestbook->read[$i]["nome"].' alle ore : '.$guestbook->read[$i]["ora"].' il giorno : '.$guestbook->read[$i]["data"].'</td>
                    </tr>
                </table>
           </div>
           ';
            $i++;
        }
        ?>
        </div>
    </body>
</html>
 
Usare le Exception senza mettere un blocco try catch è come comprare l'ombrello ma non usarlo mai quando piove. Cioè, non serve a niente.

Nel blocco dove vai a istanziare gli oggetti metti un try cath
PHP:
try {
         //qui lavoro con gli oggetti
}catch(Exception $e) {
     echo "Errore: ".$e->getMessage();
}

Come lo hai messo tu non funziona! Primo perchè ci va il try prima, secondo perchè non va in quella posizione!

Inoltre passerei l'istanza del database direttamente alla classe guest. In soldoni
PHP:
class database {
}
class guest { 
     public function __construct($db) { $db->connect(); }
     public function __destruct() { $db->disconnect(); }
}
$db = new database("localhost", "bla", "bli", "blo");
$guest = new guest($db);
$guest->read();
ecceecc

Inoltre oserei dire che è sbagliato mettere un mysql_query nella classe del guest, al limite fornisci un metodo query alla classe database, e poi usi quello per fare le query, stessa cosa per il fetch.
 
cioe devo mettere cosi
try{
classe db;
classe guest;
}catch{
ecc
}
poi non ho capito il fatto dell query e delle fecth
 
Sa cos'è l'stanza della classe?

PHP:
try {
    $db = new database(/***/);
    $g = new guest();
   ecc ecc
}catch(Exception $e) {
   //ecc ecc
}

Per quanto riguarda le query, ho detto di non usare il mysql_query dentro la classe guest, è inutile aver fatto la classe database se poi vai ad agire direttamente sulle funzioni previste dal php, crei ridondanza e basta.
Quello che dicevo è di creare un metodo query che accetta un parametro e lo esegue con la funzione standard
PHP:
public function query($sql) {
      $rs = mysql_query($sql);
       if(!$rs)
          throw new Exception("Query non eseguita!");
      return $rs;
}
public function fetch($resource) {
          return mysql_fetch_array($resource);
}

Questo ti permette intanto di astrarre la classe database al meglio (manca comunque il metodo per disconnettersi mi pare), poi se domani il team di php decide di cambiare le funzioni a te basta modificare la classe, invece di andare ad agire su tutti i file del sito per cambiarle (anche se non è come il python, la retrocombatibilità viene garantita almeno tra una major release e l'altra). Ad esempio se vuoi usare mysqli ti basta modificare quei due o tre metodi e sei apposto, la classe db puoi usarla dappertutto poi.
 
GRazie per tutte le rifiniture...
e dico come oop com'e? strutturato bene o male?
Domani aggiorno il codice e lo riposto cosi da eventuali ripari....
Poi aggiungero anche la funzione per moddare/eliminare i commenti da parte dell'admin.
Grazie di tutto e soprattutto se trpovate qualche cosa che non va per favore ditemelo che ho voglia di imparare per bene .....
 
no comment...

Codice:
if(!$connect) { thow blabla}

ok, è quello che devi fare.. ma dopo

Codice:
if(maramao) {
exit("errore durante il select");
}

Non usare cose così dentro le classi, niente print, niente echo, niente exit, tu comprendere?
 
Malex ha detto:
no comment...

Codice:
if(!$connect) { thow blabla}

ok, è quello che devi fare.. ma dopo

Codice:
if(maramao) {
exit("errore durante il select");
}

Non usare cose così dentro le classi, niente print, niente echo, niente exit, tu comprendere?

Si sarà scordato di cambiarlo, visto che è l'unico che c'è.
 
si grazie dell'avvertimento....
e che quando fai tremila cose insieme ti scappa qualche cosa...

per il resto e tutto ok?

Codice:
class database {
}
class guest { 
     public function __construct($db) { $db->connect(); }
     public function __destruct() { $db->disconnect(); }
}
$db = new database("localhost", "bla", "bli", "blo");
$guest = new guest($db);
$guest->read();
ecceecc
Invece di fvare cosi posso anche usare l'ereditarieta ?
eredito la classe db a guestbook e cosi ho i suoi metodi ch poi nei costruttori connetto e disconnetto....?
qual'e meglio? e perche(/se e possibile)
 
Scusa, ti sembra che un guestbook sia l'estensione di un database? Non mi pare.
L'ereditarità non si usa per poter usufruire dei metodi di un'altra classe, è un concetto molto più sottile.
 
Si certo, scusami e che ho letto male il codice e ora leggendolo meglio ho capito una nuova cosa....
si deve sempre imparare :)
scs se dico cazzate......
poi mi vado a leggere meglio l'ereditarieta
grazier millee....
 
Stato
Discussione chiusa ad ulteriori risposte.