Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    6

    dichiarare e richiamare variabili all'interno di una classe

    Ciao a tutti,
    io ho creato una pagina chiamata classe_ricerca.php contenente questo codice:
    Codice PHP:
    <?php
    class Ricerca
    {
    /********DICHIARO 3 VARIABILI COMUNI A TUTTI I METODI DELLA CLASSE********/
      
    public $magg_uno "
                  <table>
                      <tr>
                           <th colspan='5'>
                    RICERCA PER TITOLO EFFETTUATA

                    Parametro di ricerca: <strong class='trovato'>
    $titolo

                    
    $albi albi trovati[/b]
                 </th>
                      </tr>
                      <tr>
                           <th>Numero</th>
                        <th>Titolo</th>
                        <th>Testi</th>
                        <th>Disegni</th>
                        <th>Stampa</th>
                      </tr>"
    ;
      public 
    $uno "
                  <table>
                  <tr>
                       <th colspan='5'>
                    RICERCA PER TITOLO EFFETTUATA

                        Parametro di ricerca: <strong class='trovato'>
    $titolo

                    
    $albi albo trovato[/b]
                     </th>
                  </tr>
                  <tr>
                       <th>Numero</th>
                    <th>Titolo</th>
                    <th>Testi</th>
                    <th>Disegni</th>
                    <th>Stampa</th>
                  </tr>"
    ;
      public 
    $zero "
                  <table>
                  <tr>
                       <th colspan='5'>
                    RICERCA PER TITOLO EFFETTUATA

                    Parametro di ricerca: <strong class='trovato'>
    $titolo

                    Spiacente, nessuna corrispondenza[/b]
                     </th>
                  </tr>
                  <tr>
                       <th>Numero</th>
                    <th>Titolo</th>
                    <th>Testi</th>
                    <th>Disegni</th>
                    <th>Stampa</th>
                  </tr>"
    ;
    /***********METODO COSTRUTTORE***********/ 
     
    function Ricerca()
     {
      require_once(
    "db_login_2.php");
      
    $connect mysql_connect($db_host$db_user$db_password);
      if(!
    $connect)
      {
        die(
    mysql_error());  
      }
      else{echo 
    "connessione riuscita</br>";}
      
    $data mysql_select_db($db_database);
      if(!
    $data)
      {
        die(
    mysql_error());
      }
      else{echo 
    "database ".strtoupper($db_database)." selezionato</br>";}
     }
    /***********METODO DI RICERCA PER TITOLO***********/ 
     
    function titolo()
     {
      
    $titolo htmlentities($_GET["titolo"]);
      
    $titolo mysql_real_escape_string($titolo);
      
    $cerca "SELECT numeri,titoli,nome_testi,cognome_testi,
                nome_disegni,cognome_disegni,tipo
                FROM numeri
                JOIN testi ON (numeri.id_testi=testi.id_testi)
                JOIN disegni ON (numeri.id_disegni=disegni.id_disegni)
                JOIN stampa ON (numeri.id_stampa=stampa.id_stampa)
                WHERE numeri.titoli LIKE '%
    $titolo%'
                ORDER BY numeri.numeri"
    ;
      
    $result mysql_query($cerca);
      if(!
    $result)
      {
       die(
    mysql_error());
      }
      
    $albi mysql_num_rows($result);

      if(
    $albi 1)
      {
       echo 
    $this->magg_uno;
      }
      else if(
    $albi === 1)
      {
       echo 
    $this->uno;
      }
      else
      {
       echo 
    $this->zero;
      }
      
      while(
    $row mysql_fetch_array($resultMYSQL_ASSOC))
      {
       
    $tit strtoupper($row["titoli"]);
       
    $num $row["numeri"];
       
    $tes1 $row["nome_testi"];
       
    $tes2 $row["cognome_testi"];
       
    $dis1 $row["nome_disegni"];
       
    $dis2 $row["cognome_disegni"];
       
    $sta $row["tipo"];
        
       echo 
    "<tr>";
       echo 
    "<td>$num</td>";
       echo 
    "<td class='trovato'>$tit</td>";
       echo 
    "<td>$tes1 $tes2</td>";
       echo 
    "<td>$dis1 $dis2</td>";
       echo 
    "<td>$sta</td>";
       echo 
    "</tr>";
      }
      echo 
    "</table>";
      
    mysql_close($connect);
     }
    }
     
    ?>
    e una pagina chiamata ricerca_dati.php contentente questo:
    Codice PHP:
    <!DOCTYPE html>
    <html>
          <head>
                      [......]
          </head>
              <body>
                  <header>
                        <h1>Ricerca albo</h1>
                </header>
              <?php
              
            $titolo 
    htmlentities($_GET["titolo"]);
            
    $titolo mysql_real_escape_string($titolo);
            
            
    $self htmlentities($_SERVER['PHP_SELF']);
            
    $form '
                <form action="'
    .$self.'" method="GET">
                  <fieldset>
                    <legend>Cerca per titolo (o parte di esso)</legend>
                    <label for="titolo">
                      Titolo:<input type="text" id="titolo" name="titolo">
                    </label>
                    <input type="submit" value="Ricerca">
                  </fieldset>
                  <input type="submit" value="Ricerca">
                  
                </form>
                '
    ;
    /**********QUI INCLUDO IL FILE CLASSE_RICERCA.PHP**********/
              
    require("classe_ricerca.php");
              
    $Ricerca = new Ricerca();
              if(
    $titolo === '')
              {
               echo 
    $form;
             }
             else if(
    $titolo != '')
             {
              
    $Ricerca->titolo();
              echo 
    $form;
             }
                      
    ?>
          </body>
    </html>
    ma ciò che ottengo aprendo il file ricerca_dati.php dal browser è solo una pagina bianca ad eccezione del codice html inserito prima del php, praticamente fino al titolo "Ricerca albo".
    mentre invece modificando il file classe_ricerca.php in questo modo funziona benissimo:
    Codice PHP:
    <?php
    class Ricerca
    {
    /***********METODO COSTRUTTORE***********/ 
     
    function Ricerca()
     {
      require_once(
    "db_login_2.php");
      
    $connect mysql_connect($db_host$db_user$db_password);
      if(!
    $connect)
      {
        die(
    mysql_error());  
      }
      else{echo 
    "connessione riuscita</br>";}
      
    $data mysql_select_db($db_database);
      if(!
    $data)
      {
        die(
    mysql_error());
      }
      else{echo 
    "database ".strtoupper($db_database)." selezionato</br>";}
     }
    /***********METODO DI RICERCA PER TITOLO***********/ 
     
    function titolo()
     {
      
    $titolo htmlentities($_GET["titolo"]);
      
    $titolo mysql_real_escape_string($titolo);
      
    $cerca "SELECT numeri,titoli,nome_testi,cognome_testi,
                nome_disegni,cognome_disegni,tipo
                FROM numeri
                JOIN testi ON (numeri.id_testi=testi.id_testi)
                JOIN disegni ON (numeri.id_disegni=disegni.id_disegni)
                JOIN stampa ON (numeri.id_stampa=stampa.id_stampa)
                WHERE numeri.titoli LIKE '%
    $titolo%'
                ORDER BY numeri.numeri"
    ;
      
    $result mysql_query($cerca);
      if(!
    $result)
      {
       die(
    mysql_error());
      }
      
    $albi mysql_num_rows($result);
    /********DICHIARO LE 3 VARIABILI DIRETTAMENTE ALL'INTERNO DEL METODO********/
      
    $magg_uno "
                  <table>
                      <tr>
                           <th colspan='5'>
                    RICERCA PER TITOLO EFFETTUATA

                    Parametro di ricerca: <strong class='trovato'>
    $titolo

                    
    $albi albi trovati[/b]
                 </th>
                      </tr>
                      <tr>
                           <th>Numero</th>
                        <th>Titolo</th>
                        <th>Testi</th>
                        <th>Disegni</th>
                        <th>Stampa</th>
                      </tr>"
    ;
      
    $uno "
                  <table>
                  <tr>
                       <th colspan='5'>
                    RICERCA PER TITOLO EFFETTUATA

                        Parametro di ricerca: <strong class='trovato'>
    $titolo

                    
    $albi albo trovato[/b]
                     </th>
                  </tr>
                  <tr>
                       <th>Numero</th>
                    <th>Titolo</th>
                    <th>Testi</th>
                    <th>Disegni</th>
                    <th>Stampa</th>
                  </tr>"
    ;
      
    $zero "
                  <table>
                  <tr>
                       <th colspan='5'>
                    RICERCA PER TITOLO EFFETTUATA

                    Parametro di ricerca: <strong class='trovato'>
    $titolo

                    Spiacente, nessuna corrispondenza[/b]
                     </th>
                  </tr>
                  <tr>
                       <th>Numero</th>
                    <th>Titolo</th>
                    <th>Testi</th>
                    <th>Disegni</th>
                    <th>Stampa</th>
                  </tr>"
    ;
      if(
    $albi 1)
      {
       echo 
    $magg_uno;
      }
      else if(
    $albi === 1)
      {
       echo 
    $uno;
      }
      else
      {
       echo 
    $zero;
      }
      
      while(
    $row mysql_fetch_array($resultMYSQL_ASSOC))
      {
       
    $tit strtoupper($row["titoli"]);
       
    $num $row["numeri"];
       
    $tes1 $row["nome_testi"];
       
    $tes2 $row["cognome_testi"];
       
    $dis1 $row["nome_disegni"];
       
    $dis2 $row["cognome_disegni"];
       
    $sta $row["tipo"];
        
       echo 
    "<tr>";
       echo 
    "<td>$num</td>";
       echo 
    "<td class='trovato'>$tit</td>";
       echo 
    "<td>$tes1 $tes2</td>";
       echo 
    "<td>$dis1 $dis2</td>";
       echo 
    "<td>$sta</td>";
       echo 
    "</tr>";
      }
      echo 
    "</table>";
      
    mysql_close($connect);
     }
    }
     
    ?>
    In pratica ho solo dichiarato le variabili all'interno del metodo invece che fuori. Ma mi domando, dov'è che ho sbagliato prima? Anche perché così è vero che ho risolto, ma volendo aggiungere altri metodi di ricerca all'interno della classe, dovrei ogni volta ridichiarare le 3 variabili all'interno di ogni metodo.
    Grazie per l'attenzione.

  2. #2
    Potrebbe essere dovuto al parametro "global" mancante all'interno del metodo. Se vuoi "vedere" le variabili anche fuori dal metodo devi settarle come global

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    1,453
    Io non capisco, ma se non sapete usarle perchè vi ostinate ad usare le classi
    per fare orrori di procedurale buttati li

  4. #4
    Originariamente inviato da RoTeam
    Io non capisco, ma se non sapete usarle perchè vi ostinate ad usare le classi
    per fare orrori di procedurale buttati li
    Perchè ci piace imparare

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    6
    si vabbè RoTeam, ora che sappiamo che sei immensamente più bravo ed edotto di noi potresti dirci qualcosa di anche solo vagamente utile ed interessante, che so tipo dov'è l'errore/orrore di cui parli?
    thanks.

  6. #6
    L'atteggiamento di RoTeam può sembrare odioso... ma devo confessare che ho pensato la stessa ed identica cosa.

    Ci sono errori a iosa e l'impiego di strumenti sbagliati... non saprei da dove partire...
    http://www.miniscript.it
    Se ti sono stato di aiuto in qualche modo in questo forum iscriviti alla fan page di Miniscript - il mio blog di programmazione web.

  7. #7
    Originariamente inviato da oly1982
    L'atteggiamento di RoTeam può sembrare odioso... ma devo confessare che ho pensato la stessa ed identica cosa.

    Ci sono errori a iosa e l'impiego di strumenti sbagliati... non saprei da dove partire...
    Non è odioso

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    570
    Originariamente inviato da oly1982
    L'atteggiamento di RoTeam può sembrare odioso... ma devo confessare che ho pensato la stessa ed identica cosa.

    Ci sono errori a iosa e l'impiego di strumenti sbagliati... non saprei da dove partire...
    concordo con oly e RoTeam... quello è usare le classi per il puro gusto di farlo...

    non vi è alcuna traccia di alcun design pattern, nemmeno un banalissimo model view controller.

    tutto quello che mi sento di consigliare è un libro sui design pattern, perchè quel codice purtroppo così com'è è solo da prendere e buttare.


    ps: ragazzi prendete l'abitudine a commentare metodi e classi, o il vostro codice sarà immantenibile da qui a tre mesi
    sometimes it's just like teaching pigs how to fly

  9. #9
    Ormai che ci siamo ed il danno è fatto...
    Può essere utile creare una classe che gestisce la creazione dei tag html? Io mi sto creando una classe x non scrivere tutte le volte l'html nel codice ma lo richiamo dalla classe tipo cosi:

    Codice PHP:
    public class html
    {
      public var 
    $openTag "<";  //apertura del tag
      
    public var $closeTag ">";  //chiusura del tag
      
    public var $nameTag;         //nome del tag da creare
      
    public var $attributes = Array(); //attributi

      
    function creaTag($nameTag$attributes)
      {
         return 
    $this->openTag $this->nameTag $this->attributes $this->closeTag;
      }  


    Puo andare una cosa del genere come concetto di classe?

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    570
    no, se devi scrivere un helper ti conviene tanto per cominciare fare sì che i metodi siano statici, visto che non vi è alcuna ragione di instanziare la classe.


    Codice PHP:

    /**
     * questa classe è un helper usato per generare codice html
     */ 
    class Html
    {

        
    /**
         * questo metodo restituisce un tag html
         * @param string $tag
         * @param string $content
         * @param array $attributes
         * @return string
         */
        
    static public function tag($tag$content$attributes = array())
        {
            
    $return '<'.$tag.' '.self::extractAttributes($attributes);

            if (
    $content === false)
                
    $return .= '/>';
            else
                
    $return .= '>'.$content.'</'.$tag.'>';

            return 
    $return;
        }

        
    /**
         * estrae gli attributi dall'array e li restituisce in forma di stringa
         * @param string $attributes
         * @return string
         */
        
    static private function extractAttributes($attributes)
        {
            
    $return = array();
            foreach (
    $attributes as $attr => $value) {
                
    $return[] = $attr.'="'.$value.'"';
            }

            return 
    implode(' '$return);
        }

        
    /**
         * questo metodo restituisce un tag img
         * @param string $src l'indirizzo dell'immagine
         * @param string $alt
         * @param array $additionalAttributes ulteriori attributi dell'immmagine
         * @return string
         */
        
    static public function img($src$alt NULL$additionalAttributes = array())
        {
            return 
    self::tag('img'falsearray_merge($additionalAttributes, array('src' => $src'alt' => $alt)));
        }

    questo è un helper scritto in maniera più sensata...
    premetto che il codice è stato scritto di getto, quindi se vuoi usarlo controllalo prima...
    sometimes it's just like teaching pigs how to fly

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.