• User Newbie

    classe php

    salve a tutti, ho provato a creare una classe che abbia i metodi necessari a ricevere i dati da un form e salvarli in un file, dopo aver verificato l' input dell' utente e di avere i permessi sui file.
    ecco cosa mi è uscito
    [PHP]
    <?php
    class Scrivifile {
    public $file="iscritti.txt";
    public $nome;
    public $cognome;
    public $mail;

    public function __construct() {

    $this->nome=$_POST['nome'];
    $this->cognome=$_POST['cognome'];
    $this->mail=$_POST['mail'];
    }

    public function Controllodati ($nome,$cognome,$mail) {
    if(!isset($this->nome) ||!$this->nome || !isset($this->cognome) || !$this->cognome )
    return FALSE;
    else return TRUE;
    }
    public function Controllomail($mail) {
    trim($this->mail);

    if(!$email)    
        return FALSE;   
       
    $num_at = count(explode( '@', $this->mail )) - 1;   
    if($num_at != 1)    
        return FAlSE;   
       
    
    if(strpos($this->mail,';') || strpos($this->mail,',') || strpos($this->mail,' '))    
        return FALSE;   
       
    if(!preg_match( '/^[\w\.\-]+@\w+[\w\.\-]*?\.\w{1,4}$/', $this->mail))   
        return FALSE;  
    

    return TRUE;

    }
    public function Controllofile ($file) {
    if (is_writable($this->file) && feof($this->file))
    return TRUE;
    else return FALSE;
    }
    public function Scrittura ($file) {
    if($this->Controllodati($nome,$cognome,$mail) && $this->Controllomail($mail) && Controllofile($file)) {
    if(fopen($this->file,a)) {
    $dascrivere="$this->nome | $this->cognome | $this->mail/r/n";
    fwrite($this->file,$dascrivere);
    fclose($this->file);
    }
    else echo "errore nell' apertura del file, ci scusiamo per l' inconveniente";
    }
    else if(!$this-Controllodati($nome, $cognome, $mail) || !$this->Controllomail($mail))
    echo "I dati da te immessi sono errati, la preghiamo di ricontrollarli" ;
    }
    }
    ?>
    [/PHP]
    facendo il debug non è sorto nessun errore, ma ho molte perplessità sul codice.
    E' concettualmente giusto come sono strutturate le funzioni?
    Come potrei indentare e rendere più efficente e funzionale questa stessa classe' Cosa è consigliabile che modifichi?
    Insomma, secondo voi è scritta bene o si poteva scrivere notevolmente meglio?
    Grazie delle risposte , ciao a tutti


  • User Newbie

    se tutti, ho un problema proprio con questa classe
    facendo partire questa mini applicazione formata da
    un form html (pagina1.htm)
    [HTML]
    <form action="script1.php" method="POST">
    <input type="text" name="nome" /> Immetti il nome <br>
    <input type="text" name="cognome" /> Immetti il cognome <br>
    <input type="text" name="mail" /> Metti qui la tua mail <br>
    <input type="submit" value="invia" />
    </form>
    [/HTML]
    una classe .inc (vedere quella postata sopra)
    uno script php linkato al method del form (script1.php)
    [PHP]
    <?php
    include ("classe1.inc");
    $scrivifile = new Scrivifile;
    $scrivifile->Controllodati($nome,$cognome,$mail);
    $scrivifile->Controllomail($mail);
    $scrivifile->Controllofile($file);
    $scrivifile->Scrittura($file);
    ?>
    [/PHP]

    Quando faccio una prova, immettendo dati sbagliati mi da il messaggio di errore, ma anche mettendo quelli giusti
    Mi sto scervellando da ore e ho capito che c'è qualcosa che non va nella classe, ma non so cosa! Ho provato di tutto, potete aiutarmi perfavore?


  • Moderatore

    è molto logico che ti dia errore 😛

    [php]
    <?php
    class Scrivifile {
    private $file="iscritti.txt";
    private $nome;
    private $cognome;
    private $mail;

    public function __construct($nome,$cognome,$mail) {

    $this->nome=$nome;
    $this->cognome=$cognome;
    $this->mail=$mail;
    }

    public function Controllodati () {
    if(!isset($this->nome) ||!$this->nome || !isset($this->cognome) || !$this->cognome )
    return FALSE;
    else return TRUE;
    }
    public function Controllomail() {
    trim($this->mail);

    if(!$this->mail)    
        return FALSE;   
       
    $num_at = count(explode( '@', $this->mail )) - 1;   
    if($num_at != 1)    
        return FAlSE;   
       
    
    if(strpos($this->mail,';') || strpos($this->mail,',') || strpos($this->mail,' '))    
        return FALSE;   
       
    if(!preg_match( '/^[\w\.\-]+@\w+[\w\.\-]*?\.\w{1,4}$/', $this->mail))   
        return FALSE;  
    

    return TRUE;

    }
    public function Controllofile () {
    if (is_writable($this->file) && feof($this->file))
    return TRUE;
    else return FALSE;
    }
    public function Scrittura () {
    if($this->Controllodati($nome,$cognome,$mail) && $this->Controllomail($mail) && Controllofile($file)) {
    if(fopen($this->file,a)) {
    $dascrivere="$this->nome | $this->cognome | $this->mail/r/n";
    fwrite($this->file,$dascrivere);
    fclose($this->file);
    }
    else echo "errore nell' apertura del file, ci scusiamo per l' inconveniente";
    }
    else if(!$this-Controllodati($nome, $cognome, $mail) || !$this->Controllomail($mail))
    echo "I dati da te immessi sono errati, la preghiamo di ricontrollarli" ;
    }
    }
    ?>
    [/php]

    quindi:

    [php]
    <?php
    include ("classe1.inc");
    $scrivifile = new Scrivifile($_POST[nome],$_POST[cognome],$_POST[mail]);
    $scrivifile->Controllodati();
    $scrivifile->Controllomail();
    $scrivifile->Controllofile();
    $scrivifile->Scrittura();
    ?>
    [/php]

    prova


  • User Newbie

    grazie della risposta,il tuo script non restituisce errori ma il metodo Scrittura() non scrive nulla...
    Avevo cambiato gli script in questo modo che mi sembrava giusto, ma non vanno ugualmente... qual'è l' errore in questi? grazie mille delle risposte
    classe1.inc
    [PHP]
    <?php
    class Scrivifile {
    public $file="iscritti.txt";
    public $nome;
    public $cognome;
    public $mail;

    public function __construct($in_nome, $in_cognome, $in_mail, $in_file) {

    $this->nome= $in_nome;
    $this->cognome=$in_cognome;
    $this->mail=$in_mail;
    $this->file=$in_file;
    }

    protected function Controllodati () {
    $in_nome = $this->nome;
    $in_cognome = $this->cognome;
    if(!$in_nome || !$in_cognome )
    return FALSE;
    else return TRUE;
    }
    protected function Controllomail() {
    $in_mail = $this->mail;
    trim($in_mail);
    $num_at = count(explode( '@', $in_mail )) - 1;
    if(!$in_mail)
    return FALSE;

    else if($num_at != 1)    
        return FAlSE;   
       
    else if(strpos($in_mail,';') || strpos($in_mail,',') || strpos($in_mail,' '))    
        return FALSE;   
    

    else if(!preg_match( '/^[\w.-]+@\w+[\w.-]*?.\w{1,4}$/', $in_mail))
    return FALSE;

        else return TRUE;
    

    }
    protected function Controllofile () {
    $in_file = $this->file;
    if (is_writable($in_file) && feof($in_file))
    return TRUE;
    else return FALSE;
    }
    public function Scrittura () {
    $in_file = $this->file;
    if($this->Controllodati() && $this->Controllomail() && $this->Controllofile()) {
    if($fp=fopen($in_file,"a")) {
    $dascrivere="$this->nome | $this->cognome | $this->mail/r/n";
    fwrite($fp,$dascrivere);
    fclose($fp);
    }
    else echo "errore nell' apertura del file'";
    }
    else if (!$this->Controllodati() || !$this->Controllomail())
    echo "I dati da te immessi sono errati, la preghiamo di ricontrollarli" ;
    }
    ?>
    [/PHP]

    script1.php
    [PHP]
    <?php
    include ("classe1.inc");
    $nome=$_POST['nome'];
    $cognome=$_POST['cognome'];
    $mail=$_POST['mail'];
    $scrivifile = new Scrivifile($nome,$cognome,$mail,$file);
    $scrivifile->Scrittura();
    ?>
    [/PHP]