Visualizzazione risultati 1 fino 15 di 15

Discussione: problema creazione contatore in PHP (Parse error)

  1. #1
    Guest

    Predefinito problema creazione contatore in PHP (Parse error)

    Ciao a tutti sono alle prime armi con il linguaggio php e per iniziare ho iniziato a leggere la guida a questo link

    http://php.html.it/guide/lezione/269...sempi-con-php/

    Ho seguito passo dopo passo quello che mi spiegavano...
    1 ho creato la cartella "lib"

    2 ho creato il file "counter.php"
    questo è il link ==> http://freegameweb.altervista.org/lib/counter.php

    (tra cui se ci entrate da anche eso un messaggio di errore...)

    3 per fare in modo che il contatore contasse le visite anche se ricarico continuamente la pagina ho inserito un codice x i cookie
    questo è il link ==> http://freegameweb.altervista.org/lib/cookiecounter.php

    (e pure in queso il messaggio d'errore...)


    ed in fine ho messo tutto assieme e tecnicamente doveva uscire il contatore invece no...

    questo è il link ==> http://freegameweb.altervista.org/lib/contatore.php

    (e anche qui messaggio di errore...)


    non riesco a capire dove ho sbagliato!!!
    mi potete aiutare???
    Grazie mille a tutti quanti


    ciao!!

  2. #2
    Ospite Guest

    Predefinito

    Magari se postassi gli script sarebbe più facile aiutarti, non credi? ;)

    Ciao!

  3. #3
    Guest

    Predefinito

    Citazione Originalmente inviato da probid Visualizza messaggio
    Magari se postassi gli script sarebbe più facile aiutarti, non credi? ;)

    Ciao!
    a già scusate mi ero dimenticato ke con un codice php se fai visualizza/HTML ti esce il codice HTML

    allora lo scirpt del file "counter"

    Codice:
    <?php
    
    require_once 'lib/counter.php';
    $counter = new SimpleCounter(new FileDataProvider);
    echo "Questa pagina &egrave; stata visitata ".$counter->visits." volte";
    
    
    
    ?>
    lo script x il cookie è

    Codice:
    <?php
    
    class CookieCounter extends SimpleCounter
    {
        
        public function __construct(DataProvider $provider)
        {
            parent::__construct($provider);
        }
        
        public function isValid()
        {
            if(!isset($_COOKIE['counter_cookie']))
            {
                setcookie('counter_cookie', '1', time() + 3600);
               
                return true;
            }
           
            return false;
        }
    }
    
    ?>
    ed in fine lo script del contatore finito è

    Codice:
     <?php
    
    require_once 'freegameweb.altervista.org/lib/counter.php';
    require_once ''freegameweb.altervista.org/lib/cookiecounter.php';
    
    $counter = new CookieCounter(new FileDataProvider);
    
    echo "Questa pagina &egrave; stata visitata ".$counter->visits." volte";
    
    ?>
    Ultima modifica di freegameweb : 16-12-2007 alle ore 22.40.56

  4. #4
    Guest

    Predefinito

    Quest'errore:

    Codice:
    Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /membri/freegameweb/lib/cookiecounter.php on line 6
    significa che c'è un errore nella riga 6 di cookiecounter.php.
    E infatti,

    Codice:
    public function __construct(DataProvider $provider)
    ho evidenziato in grassetto l'errore. 'Dataprovider' non è consentito come parametro della funzione, perché non è né una funzione, né una variabile.
    Guardando il tuo script del contatore, direi che devi semplicemente cancellare 'Dataprovider'. La riga diventa quindi così:

    Codice:
    public function __construct($provider)

    Quest'errore:

    Codice:
    Parse error: syntax error, unexpected T_STRING in /membri/freegameweb/lib/contatore.php on line 4
    potevi trovarlo pure tu. Basta controllare attentamente la riga 4:

    Codice:
    require_once ''freegameweb.altervista.org/lib/cookiecounter.php';
    L'hai già visto? Ci sono due apici singole prima di freegameweb. Cancellane una.


    Quest'errore

    Codice:
    Fatal error: main() [function.require]: Failed opening required 'lib/counter.php' (include_path='.:') in /membri/freegameweb/lib/counter.php on line 3
    significa che non riesce a trovare il file counter.php nella sottocartella 'lib'. Sei sicuro che esista, e che si trovi lì? Controlla.

  5. #5
    Guest

    Exclamation

    Citazione Originalmente inviato da tonnaer Visualizza messaggio
    Quest'errore

    Codice:
    Fatal error: main() [function.require]: Failed opening required 'lib/counter.php' (include_path='.:') in /membri/freegameweb/lib/counter.php on line 3
    significa che non riesce a trovare il file counter.php nella sottocartella 'lib'. Sei sicuro che esista, e che si trovi lì? Controlla.
    Grazie mille però si quel file si trova nella sottocartella "lib"
    guarda questa è la facciata principale dove si trovano tutti i file cartelle ecc...
    e qui ho creato la cartella "lib"


    ed al suo interno ci sono i 3 file

    cookiecounter.php
    counter.php
    e il file
    contatore che sarebbe il file finale...



    però anche dopo le tue correzzioni non è cambiato nulla...
    se apro il file
    cookiecounter.php mi compare il messaggio

    Codice:
    Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /membri/freegameweb/lib/cookiecounter.php on line 6
    se apro il file counter mi compare il messaggio

    Codice:
    Fatal error: main() [function.require]: Failed opening required 'lib/counter.php' (include_path='.:') in /membri/freegameweb/lib/counter.php on line 3
    e se apro il file contatore.php mi comprare il messaggio

    Codice:
    Fatal error: main() [function.require]: Failed opening required 'freegameweb.altervista.org/lib/counter.php' (include_path='.:') in /membri/freegameweb/lib/contatore.php on line 3

  6. #6
    Ospite Guest

    Predefinito

    Innanzitutto questo:
    Codice PHP:
    require_once 'freegameweb.altervista.org/lib/counter.php';
    require_once
    'freegameweb.altervista.org/lib/cookiecounter.php';
    non è corretto.
    Infatti su AlterVista è disabilitato l'url-wrapping per cui non sono possibili inclusioni esterne.
    E comunque sarebbe mancato il http:// davanti
    Piuttosto sostituisci con la path relativa ai file inclusi.
    Fatal error: main() [function.require]: Failed opening required 'lib/counter.php' (include_path='.:') in /membri/freegameweb/lib/counter.php on line 3
    Questo errore mi sembra abbastanza evidente.
    Nello script /lib/counter.php includi /lib/counter.php?
    Praticamente includi lo script in esecuzione!
    Il contenuto dell'attuale lib/counter.php dovrebbe essere spostato in contatore.php.
    In lib/counter.php dovrebbe invece essere dichiarata la classe Simplecounter.

    Ciao!

  7. #7
    Guest

    Predefinito

    Citazione Originalmente inviato da probid Visualizza messaggio
    Innanzitutto questo:
    Codice PHP:
    require_once 'freegameweb.altervista.org/lib/counter.php';
    require_once
    'freegameweb.altervista.org/lib/cookiecounter.php';
    non è corretto.
    Infatti su AlterVista è disabilitato l'url-wrapping per cui non sono possibili inclusioni esterne.
    E comunque sarebbe mancato il http:// davanti
    Piuttosto sostituisci con la path relativa ai file inclusi.

    Questo errore mi sembra abbastanza evidente.
    Nello script /lib/counter.php includi /lib/counter.php?
    Praticamente includi lo script in esecuzione!
    Il contenuto dell'attuale lib/counter.php dovrebbe essere spostato in contatore.php.
    In lib/counter.php dovrebbe invece essere dichiarata la classe Simplecounter.

    Ciao!

    scs sn nuovo del php

    qualcosa mi dice ke mi conviene ri fare tt da capo va...


    EDIT:
    Citazione Originalmente inviato da probid Visualizza messaggio

    Questo errore mi sembra abbastanza evidente.
    Nello script /lib/counter.php includi /lib/counter.php?
    Praticamente includi lo script in esecuzione!
    Il contenuto dell'attuale lib/counter.php dovrebbe essere spostato in contatore.php.
    In lib/counter.php dovrebbe invece essere dichiarata la classe Simplecounter.

    Ciao!
    ma scusa adesso sto ri facendo tutto però mi sa che hanno sbagliato nel sito di html.it
    perche loro scrivono:

    Il codice è molto semplice:

    • definisce un'interfaccia che si occupa di rappresentare la struttura base di delle classi che potranno occuparsi di recuperare e salvare informazioni sulle visite;
    • implementa l'interfaccia con un sistema che salva le informazioni su disco;
    • definisce una classe che, quando costruita, recupera le informazioni da un DataProvider, controlla la validità dell'utente corrente ed eventualmente incrementa le visite. IsValid è stata messa per permettere alle classi che estenderanno SimpleCounter di specificare sistemi di validazione personalizzati (come il controllo dell'IP) per creare counter più completi.


      L'utilizzo della classe (che salveremo dentro lib/counter.php) è il seguente:


    Codice:
    <?php
    
    require_once 'lib/counter.php';
    $counter = new SimpleCounter(new FileDataProvider);
    echo "Questa pagina &egrave; stata visitata ".$counter->visits." volte";
    
    ?>
    Ad ogni aggiornamento della pagina verrà incrementato il numero delle visite. Prima di testare lo script è molto importante assicurarsi che la directory corrente abbia i permessi impostati correttamente, altrimenti il file non potrà essere creato o scritto.
    anke a me suonava strano xò mi sono fidato di quello ke mi dicevano...
    quindi alla fin fine kos'è ke dovrei metterci li al posto di 'lib/counter.php???
    Ultima modifica di funcool : 18-12-2007 alle ore 10.49.45

  8. #8
    L'avatar di funcool
    funcool non è connesso Utente storico
    Data registrazione
    05-02-2004
    Residenza
    Qui... Non lì, qui!
    Messaggi
    15,433

    Predefinito

    Devi mettere solo "counter.php".
    Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
    «Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen

  9. #9
    Guest

    Predefinito

    Citazione Originalmente inviato da funcool Visualizza messaggio
    Devi mettere solo "counter.php".
    nn cambia nulla
    mi kambia il messaggio di errore
    ke diventa
    Fatal error: Cannot instantiate non-existent class: simplecounter in /membri/freegameweb/lib/counter.php on line 4
    Ultima modifica di freegameweb : 18-12-2007 alle ore 15.59.27

  10. #10
    Guest

    Predefinito

    Nei tre script che hai postato qua, non esiste la classe simplecounter.
    Anche la cookiecounter dovrebbe dare un errore, perché estende una classe sconosciuta.
    Se hai un altro script dove c'è la classe simplecounter, allora è quello che devi mettere nella require_once al posto di 'counter.php'.

    P.S. Se cambia il messaggio d'errore, non è vero che non cambia niente. E' così che si fa il debug, da errore a errore finché non finiscono e tutto funziona bene. :)

  11. #11
    Guest

    Predefinito

    Citazione Originalmente inviato da tonnaer Visualizza messaggio
    Nei tre script che hai postato qua, non esiste la classe simplecounter.
    Anche la cookiecounter dovrebbe dare un errore, perché estende una classe sconosciuta.
    Se hai un altro script dove c'è la classe simplecounter, allora è quello che devi mettere nella require_once al posto di 'counter.php'.

    P.S. Se cambia il messaggio d'errore, non è vero che non cambia niente. E' così che si fa il debug, da errore a errore finché non finiscono e tutto funziona bene. :)
    capito... xò questo codice l'ho preso da questa guida

    http://php.html.it/guide/lezione/269...ersonalizzato/

    cmq grazie di tutto!!!

  12. #12
    Guest

    Predefinito

    Sulla prima pagina della guida:

    L'utilizzo della classe (che salveremo dentro lib/counter.php) è il seguente:
    E poi segue il codice che tu hai salvato nel file 'lib/counter.php'.
    E invece ci dovevi salvare il codice che sta all'inizio della prima pagina, e dove viene definita la classe simplecounter:

    Codice PHP:
    <?php

    interface DataProvider
    {
    public function
    storeVisits($visits);
    public function
    readVisits();
    }

    class
    FileDataProvider implements DataProvider
    {
    const
    FILE_PATH = 'counter.txt';

    private
    $fp;

    public function
    __construct()
    {
    if(!
    file_exists(FileDataProvider::FILE_PATH))
    {
    $fp = fopen(FileDataProvider::FILE_PATH, 'w+');
    fwrite($fp, '0');
    fclose($fp);
    }

    $this->fp = fopen(FileDataProvider::FILE_PATH, 'r+');
    }

    public function
    readVisits()
    {
    return
    intval(file_get_contents(FileDataProvider::FILE_PATH));
    }

    public function
    storeVisits($visits)
    {
    ftruncate($this->fp, 0);
    fseek($this->fp, 0);
    fwrite($this->fp, strval($visits));
    }

    public function
    __destruct()
    {
    fclose($this->fp);
    }
    }

    class
    SimpleCounter
    {
    private
    $provider;

    public
    $visits;

    public function
    __construct(DataProvider $provider)
    {
    $this->provider = $provider;
    $this->visits = $this->provider->readVisits();
    if(
    $this->isValid())
    {
    $this->provider->storeVisits(++$this->visits);
    }
    }

    protected function
    isValid()
    {
    return
    true;
    }
    }

    ?>
    Mentre questo è index.php:

    Codice PHP:
    <?php

    require_once 'lib/counter.php';
    $counter = new SimpleCounter(new FileDataProvider);
    echo
    "Questa pagina &egrave; stata visitata ".$counter->visits." volte";

    ?>
    Che poi viene modificato in:

    Codice PHP:
    <?php

    require_once 'lib/counter.php';
    require_once
    'lib/cookiecounter.php';

    $counter = new CookieCounter(new FileDataProvider);

    echo
    "Questa pagina &egrave; stata visitata ".$counter->visits." volte";

    ?>
    per l'utilizzo del cookiecounter.

    Riprovaci e facci sapere

  13. #13
    Guest

    Predefinito

    Anche io ho lo stesso problema.
    Ho creato, all'interno della cartella /lib i file counter.php e cookiecounter.php.

    Di seguito riporto i codici:

    counter.php
    Codice PHP:
    <?php

    interface DataProvider
    {
    public function
    storeVisits($visits);
    public function
    readVisits();
    }

    class
    FileDataProvider implements DataProvider
    {
    const
    FILE_PATH = 'counter.txt';

    private
    $fp;

    public function
    __construct()
    {
    if(!
    file_exists(FileDataProvider::FILE_PATH))
    {
    $fp = fopen(FileDataProvider::FILE_PATH, 'w+');
    fwrite($fp, '0');
    fclose($fp);
    }

    $this->fp = fopen(FileDataProvider::FILE_PATH, 'r+');
    }

    public function
    readVisits()
    {
    return
    intval(file_get_contents(FileDataProvider::FILE_PATH));
    }

    public function
    storeVisits($visits)
    {
    ftruncate($this->fp, 0);
    fseek($this->fp, 0);
    fwrite($this->fp, strval($visits));
    }

    public function
    __destruct()
    {
    fclose($this->fp);
    }
    }

    class
    SimpleCounter
    {
    private
    $provider;

    public
    $visits;

    public function
    __construct(DataProvider $provider)
    {
    $this->provider = $provider;
    $this->visits = $this->provider->readVisits();
    if(
    $this->isValid())
    {
    $this->provider->storeVisits(++$this->visits);
    }
    }

    protected function
    isValid()
    {
    return
    true;
    }
    }

    ?>
    cookiecounter.php
    Codice PHP:
    <?php

    class CookieCounter extends SimpleCounter
    {

    public function
    __construct($provider)
    {
    parent::__construct($provider);
    }

    public function
    isValid()
    {
    if(!isset(
    $_COOKIE['counter_cookie']))
    {
    setcookie('counter_cookie', '1', time() + 3600);

    return
    true;
    }

    return
    false;
    }
    }

    ?>
    Nel file index.php ho incluso questo:
    Codice PHP:
    <?php

    require_once 'lib/counter.php';
    require_once
    'lib/cookiecounter.php';


    $counter = new CookieCounter(new FileDataProvider);

    echo
    "<font color=#CDCDE2> Questa pagina &egrave; stata visitata ".$counter->visits." volte</font>";

    ?>
    Quando vado a visualizzare la pagina index.php mi riporta l'errore: "Parse error: syntax error, unexpected T_STRING in /membri/kirilforsaken/lib/counter.php on line 11"

    Qualcuno può aiutarmi?

  14. #14
    Guest

    Predefinito

    Questo script richiede php5.
    Devi metterlo dentro la cartella php5/ per farlo interpretare da questa versione.
    Se non hai la cartella php5 basta crearla.


    ciao!

  15. #15
    Guest

    Predefinito

    Funziona!

    Grazie!

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •