Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di Alepap
    Registrato dal
    Apr 2009
    Messaggi
    13

    [Errore codice] codice banale, ma dov'è l'errore? ;(

    Salve a tutti, vorrei mostrare un codice piuttosto semplice del quale non riesco più a capire come correggerlo per ottenere ciò che voglio.
    Nella pagina web che sto creando ho tre numeri. Spingendo un apposito bottone, questi 3 numeri salgono di valore o scendono di valore.
    Sto usando una struttura ad oggetti (o almeno così credo).


    QUESTA E' LA PAGINA INDEX.PHP

    Codice PHP:
    <?php

    include ("tris.php");


    if(!isset(
    $_GET['ordine'])){
        
    $tris = new Tris);
            
    }

    else {

     
    $operazione $_GET['ordine'];
         
              
        if(
    $operazione == "inc"){
            
    $tris->set_U($tris->get_U() +1);  // LINEA 18
            
    $tris->set_D($tris->get_D() +1);
            
    $tris->set_T($tris->get_T() +1);
        }
        
        if(
    $operazione == "dec"){
            
    $tris->set_U($tris->get_U() -1);
            
    $tris->set_D($tris->get_D() -1);
            
    $tris->set_T($tris->get_T() -1);
        }

            
    }

    $UNO $tris->get_U();
    $DUE $tris->get_D();
    $TRE $tris->get_T();

    echo 
    '

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <html>

    <head>
        <title> Tris </title>
    </head>
        
    <body>


    <h1>'
    .$UNO.'</h1> <h1>'.$DUE.'</h1> <h1>'.$TRE.'</h1>
        




    [url="index.php?ordine=inc "] INCREMENTA [/url]





    [url="index.php?ordine=dec "] DECREMENTA [/url]

    </body>

    </html>

    '
    ;



    ?>


    QUESTA E' LA PAGINA TRIS.PHP

    Codice PHP:
    <?php

    class Tris {

        private 
    $uno;
        private 
    $due;
        private 
    $tre;
        

        function 
    Tris($u$d$t) {
            
    $this->uno $u;
            
    $this->due $d;
            
    $this->tre $t;
        }
       
        function 
    get_U() {
            return 
    $this->uno;
        }

        function 
    get_D() {
            return 
    $this->due;
        }

        function 
    get_T() {
            return 
    $this->tre;
        }
        
        function 
    set_U($u) {
            
    $this->uno $u;
        }
            
        function 
    set_D($d) {
            
    $this->due $d;
        }
            
        function 
    set_T($t) {
            
    $this->tre $t;
        }
    }

    ?>
    A me sembra che sia tutto corretto, la sintassi e soprattutto la logica che sta alla base del sistema... non conosco ora tutti i "segreti" del php, nel bene e nel male, però non credo di aver sbagliato qualcosa di particolare.
    Necessita che uso sessioni? O cosa?

    Quando vado a far partire la pagina index.php, la visualizzazione dei tre numeri e dei pulsanti è corretta... ma quando vado a cliccare sul pulsante (e quindi inviare tramite url l'indice), la pagina mi mostra il seguente errore:

    Notice: Undefined variable: tris in C:\Program Files\EasyPHP-5.3.8.0\www\incrementatore\index.php on line 18
    Fatal error: Call to a member function set_U() on a non-object in C:\Program Files\EasyPHP-5.3.8.0\www\incrementatore\index.php on line 18



    Grazie veramente a tutti, anche solo per l'attenzione
    Alepap

  2. #2
    Eh si, perche' tu crei un'istanza dell'oggetto in un ramo dell'if e lo usi nell'altro, quindi quando $_GET['ordine'] e' settata (cioe' si entra nel ramo else) l'oggetto $tris non esiste.

  3. #3
    Utente di HTML.it L'avatar di Alepap
    Registrato dal
    Apr 2009
    Messaggi
    13
    Quindi che sistema posso usare?

    Avevo pensato di mettere una qualche creazione della sessione nel blocco che io chiamo di "inizializzazione", che sarebbe

    Codice PHP:
    if(!isset($_GET['ordine'])){ 
         
    $tris = new Tris); 
             

    Cosa mi conviene aggiungere per far funzionare il sistema?
    Grazie mille dell'aiuto!
    Alepap

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2008
    Messaggi
    813
    beh.
    francamente non capisco la semantica della funzione tris.
    ad ogni modo puoi:
    passare tra una pagina e l'altra l'oggetto tris in questione serializzato
    metti l'oggetto tris in sessione (sconsigliato)
    passi tutti le proprietà utili dell'oggetto con il post e crei un oggetto nuovo
    non usi l'oggetto...non ha funzionalità particolari per cui tu non debba usare un array normalissimo
    Nell'anno 1968 è bastata la potenza di due Commodore 64 per lanciare con successo una navicella sulla Luna; nell'anno 2007 ci vogliono la potenza di un processore quad core 3.30 GHz e 3 Gb di RAM (requisiti minimi ufficiali) per utilizzare Windows Vista. Qualcosa deve essere andato storto!

  5. #5
    Utente di HTML.it L'avatar di las
    Registrato dal
    Apr 2002
    Messaggi
    1,221
    ti basta rivedere quell'if che controlla $_GET['ordine']

    Codice PHP:
    .....
        
    $tris = new Tris);
            
    if(isset(
    $_GET['ordine'])){{

     
    $operazione $_GET['ordine'];
         
              
        if(
    $operazione == "inc"){
            
    $tris->set_U($tris->get_U() +1);  // LINEA 18
            
    $tris->set_D($tris->get_D() +1);
            
    $tris->set_T($tris->get_T() +1);
        }
        
        if(
    $operazione == "dec"){
            
    $tris->set_U($tris->get_U() -1);
            
    $tris->set_D($tris->get_D() -1);
            
    $tris->set_T($tris->get_T() -1);
        }

            
    }

    ..... 
    Il calcolatore è straordinariamente veloce, accurato e stupido.
    L'uomo è incredibilmente lento, impreciso e creativo.
    L'insieme dei due costituisce una forza incalcolabile.
    (Albert Einstein)

  6. #6
    Utente di HTML.it L'avatar di Alepap
    Registrato dal
    Apr 2009
    Messaggi
    13
    Originariamente inviato da las
    ti basta rivedere quell'if che controlla $_GET['ordine']

    Codice PHP:
    .....
        
    $tris = new Tris);
            
    if(isset(
    $_GET['ordine'])){{

     
    $operazione $_GET['ordine'];
         
              
        if(
    $operazione == "inc"){
            
    $tris->set_U($tris->get_U() +1);  // LINEA 18
            
    $tris->set_D($tris->get_D() +1);
            
    $tris->set_T($tris->get_T() +1);
        }
        
        if(
    $operazione == "dec"){
            
    $tris->set_U($tris->get_U() -1);
            
    $tris->set_D($tris->get_D() -1);
            
    $tris->set_T($tris->get_T() -1);
        }

            
    }

    ..... 


    La tua soluzione è molto interessante, però così non succede che ogni volta che la pagina viene refreshata/ricaricata i valori del Tris vengono ridefiniti a 1, 2, 3?
    Spiego meglio sotto cosa intendo
    Alepap

  7. #7
    Utente di HTML.it L'avatar di Alepap
    Registrato dal
    Apr 2009
    Messaggi
    13
    Originariamente inviato da Hysoka
    beh.
    francamente non capisco la semantica della funzione tris.
    ad ogni modo puoi:
    passare tra una pagina e l'altra l'oggetto tris in questione serializzato
    metti l'oggetto tris in sessione (sconsigliato)
    passi tutti le proprietà utili dell'oggetto con il post e crei un oggetto nuovo
    non usi l'oggetto...non ha funzionalità particolari per cui tu non debba usare un array normalissimo
    Il significato del codice così come l'ho pensato DOVREBBE consentire di "inizializzare" il valore iniziare dell'oggetto che chiamo tris ad 1,2,3.
    Quando carico la pagina l'oggetto tris viene creato, perché per l'appunto non viene passato nessun oggetto con il get, e viene creato con i tre valori di prima... ma quando poi vado a premere il pulsante INCREMENTA non ho più bisogno che l'oggetto ricollochi i propri valori ad 1,2,3 bensì che quei valori vengano incrementati (o decrementati, vabbé) dall'apposita procedura e quindi ristampati secondo la nuova disposizione aggiornata.

    Cosa intendi per
    passare tra una pagina e l'altra l'oggetto tris in questione serializzato
    ?
    E
    metti l'oggetto tris in sessione (sconsigliato)
    perché sconsigliato? Quali difficoltà vado a trovare?

    Che intendi con il terzo consiglio? Ovvero, a che serve e come lo dovrei creare un altro oggetto?
    Io uso un oggetto Tris per facilità, perché è un oggetto facile da gestire, aggiornare e modificare... perché i valori contenuti sono facilmente visibili ed interpretabili dalla progettazione Object Oriented.
    Alepap

  8. #8
    Utente di HTML.it L'avatar di las
    Registrato dal
    Apr 2002
    Messaggi
    1,221
    Originariamente inviato da Alepap
    La tua soluzione è molto interessante, però così non succede che ogni volta che la pagina viene refreshata/ricaricata i valori del Tris vengono ridefiniti a 1, 2, 3?
    Spiego meglio sotto cosa intendo
    Pardon, non avevo capito bene cosa dovevi fare, la ragione per la quale non ti funziona è perchè tu vorresti che l'oggetto tenesse le sue proprietà da una pagina all'altra, in realtà non funziona così, ogni volta che viene richiamato lo script istanzia un nuovo oggetto Tris e di conseguenza tutte le proprietà che aveva prima vengono perse e non c'è modo di risolvere la cosa (se non usando accorgimenti articolati come quelli suggeriti da Hysoka, che però nel tuo caso mi sembrano eccessivi rispetto all'utilità di questa classe) in pratica se la classe Tris ha l'unico compito di incrementare le variabili ti consiglio di buttare via la classe e semplicemente passare i valori in get e incrementarli (direttamente nel link o nella pagine come ti viene meglio) con un semplice +1, usare una classe per incrementare un valore è un po come voler aprire una noce con un martello pneumatico .... sicuramente alla fine ci riesci, ma fai una fatica incredibile e il risultato è lo stesso che usando uno schiaccianoci.

    Il calcolatore è straordinariamente veloce, accurato e stupido.
    L'uomo è incredibilmente lento, impreciso e creativo.
    L'insieme dei due costituisce una forza incalcolabile.
    (Albert Einstein)

  9. #9
    Utente di HTML.it L'avatar di Alepap
    Registrato dal
    Apr 2009
    Messaggi
    13
    Per il momento terrò il progetto in sospeso, non avendo neanche capito bene che sistema usare per risolvere la questione... non riesco bene a capire come far lavorare bene la struttura ad oggetti con l'uso della sessione, però ci devo sbattere la testa sopra e completare il progetto
    Alepap

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.