Visualizzazione dei risultati da 1 a 5 su 5

Discussione: dubbio classe form

  1. #1

    dubbio classe form

    Salve a tutti. Per scopo didattico stò creando una piccola applicazione che comprende un frontend e un back end. Avendo l'esigenza di usare dei form ad esempio per i contatti, login, modifica etcetc, volevo creare una classe per generare automaticamente il form basandomi sulla struttura della tabella del database. Premetto che una cosa simile l'avevo già fatta però era tutta in procedurale e quindi era un gran minestrone di codice e la creazione del campo html si basava su uno switch case, cosa non molto comoda ne tantomeno elegante. Ora volendo riproporla in forma oop eliminando lo switch:case qualcuno avrebbe qualche consiglio utile per partire?
    Fare o non fare....non c'è provare!

  2. #2
    Siamo in sintonia sto cercando di fare la stessa cosa. Stufo di fare e rifare applicazioni con form e query sul DB 1000 volte, ho deciso di tagliare la testa a toro e fare una volta per tutte una gestione sui form che controllino i dati a prescindere da come il form è costruito. Mi sono costruito una lista di parametri che userà lo script quando effettuerà il controllo cosi:

    Codice PHP:
    /*************************************************
       Questo file deve contenere un array con

       i parametri tramite i quali verrà eseguito

       il controllo sui campi. Es.:

       "request" => "y" sarà un campo obbligatorio

       "valueType" => "numeric" sarà un valore numerico

    **************************************************/


     
    $inputClass[0] = array( 
                                      
    "request" => "y" 
                                      
                                      
    "valueType" => "text",

                                      
    "inputType" => "text"
                                    
    )
                               ;

     
    $inputClass[1] = array( 
                                      
    "request" => "y" 
                                      
                                      
    "valueType" => "text",

                                      
    "inputType" => "text"
                                    
    )
                               ;




     
    $inputClass[2] = array( 
                                      
    "request" => "y" 
                                      
                                      
    "valueType" => "numeric",

                                      
    "inputType" => "text"
                                    
    )
                               ; 
    Ovviamente poi la includo nel file che esegue il controllo, dove eseguo un ciclo dove sfogliando l'array mi comporto in base ai parametri stabiliti:

    Codice PHP:
    $p 0// controlla gli errori

      
    for($i=0$i<$nInput$i++)
           
           {  
               
    //metto in sessione i valori del modulo inviato
               
    $_SESSION["$i"]["value"] = $arrayType[$i];  

               
    $ID $i;
               
    $valore $arrayType[$i];

               
    //assegno ad ogni attributo il proprio valore (es. richiesto = SI)
               
    $request $inputClass[$i]["request"];
               
               
    $valueType $inputClass[$i]["valueType"];

               
    $inputType $inputClass[$i]["inputType"];



               
    //se deve essere compilato ed è vuoto
               
    if ($valore == "" and $request == "y")
               {
                     
    //imposto il colore rosso alle celle desiderate
                     
    $_SESSION["$i"]["cella"] = "bgcolor='#ff0000'";

                     
    //imposto il messaggio di errore
                     
    $_SESSION["$i"]["ErrorMessage"] = "Inserire un valore";

                     
    $p 1;  //si è verificato un errore quindi $p = 1                 
                              
               
    }


               
    //se deve essere numerico e non lo è
               
    if($valueType == "numeric")
               {

                 if(!
    getIntValue($valore))
                  {

                     
    //imposto il messaggio di errore
                     
    $_SESSION["$i"]["ErrorMessage"] = "Inserire un numero di telefono";
                     
    $_SESSION["$i"]["cella"] = "bgcolor='#ff0000'";
                     
                     
    $p 1//si è verificato un errore quindi $p = 1 
                  
    }
               }
           }

       if(
    $p == 1//CI SONO ERRORI RIPRESENTO IL FORM
        
    {
          include(
    "form.php");
        }

        
       if(
    $p == 0//NO ERRORI VADO AVANTI

        
    {
            
    //DECIDO COSA FARE COI DATI, SE MANDARLI AL DB O PER EMAIL...BO?
        

    Ci sto ancora lavorando, spero di aver stimolato la tua fantasia, ciao

  3. #3
    Mi sembra che sia una cosa un po' diversa da quello stavo pensando di fare . Se leggo giusto li fai una sorta di validazione dell'input di un form giusto? Qui invece stavo cercando di fare lo step prima, cioè la creazione automatica del form stesso...sò che non è un vanto ma ti posto il codice che ho fatto un anno e passa fà quando ho iniziato con php:
    Codice PHP:
    //query di selezione generica dalla tabella utenti
    $result mysql_query('select * from utenti');
    //controllo esito
    if (!$result) {
        die(
    'Query failed: ' mysql_error());
    }

    //conteggio del numero di campi recuperati e appoggio ad una variabile contatore
    $n mysql_num_fields($result);
    //controllo l'esito dei campi recuperati
        
    if (!$n) {
            echo 
    "Nessun campo recuperato
    \n"
    ;
        }
    //ciclo per creare l'array dei campi
    for($i $i $n$i++ )  {
          
    //assegno il nome dei campi ad una variabile d'appoggio
        
    $column[] = mysql_fieldname($result$i);
    // controllo :V
        
    echo $column[$i];
          }
    //elimino le voci non necessarie all'interno dell'array
         
    unset($column[array_search('UID'$column)]);
    //altro controllo :V
              
    print_r ($column);
    //qui dovrei metterci una reindicizzazione dell'array :V
    foreach ($column as $val){
        
    $newcol[] = $val;
    }
    //ancora un altro controllo!!quanti sono? :V
    print_r ($newcol);
    //ciclo tutti gli elementi dell'array per stabilire i casi da applicare
        
    foreach ($newcol as $key => $field){
            
        switch (
    $field){
            case 
    'Nome':
            echo
    '[*]
                  <label for=nome>Nome</label>
                  <input id=nome name=nome type=text required autofocus>
                  '
    ;
            break;
            case 
    'Cognome':
            echo
    '[*]
                   <label for=cognome>Cognome</label>
                   <input id=cognome name=cognome type=text required>
                  '
    ;
            break;
            case 
    'DataNascita':
            echo
    '[*]
                 <label for="Datanas">Data di Nascita</label>
                 <input id="Datanas" name="datanas" type="text" required>
                 '
    ;
            break;
            case 
    'Indirizzo':
            echo 
    '[*]
                    <label for=Indirizzo>Indirizzo</label>
                    <textarea id=indirizzo name=indirizzo rows=2 required></textarea>
                       '
    ;
            break;
            case 
    'CAP':
            echo 
    '[*]
                    <label for=cap>CAP</label>
                    <input id=cap name=cap type=text>
                  '
    ;
            break;
            
            case 
    'Tel':
            echo 
    '[*]
                    <label for=telefono>Telefono</label>
                    <input id=telefono name=Telefono type=tel required>
                  '
    ;
            break;
            case 
    'Cell':
            echo 
    '[*]
                   <label for=cellulare>Cellulare</label>
                   <input id=cellulare name=Cellulare type=tel required>
                 '
    ;
            break;
            case 
    'Mail':
            echo 
    '[*]
                    <label for=email>Email</label>
                    <input id=email name=email type=email placeholder="esempio_mail@dominio.com" required>
                 '
    ;
            break;
            
            case 
    'IDC':
            echo
    '[*]
                 <label for="citta_">Città_</label>
                 <select id="citta" name="citta">'
    ;
        
      
    $vettore[]=select($newcol);
    foreach (
    $vettore as $value ){
    echo 
    "<option value={$value['ID']} >{$value['SRC']}</option>";
    }

            echo 
    '</select>
                  '
    ;
            break;
            case 
    'IDR':
            echo 
    '[*]
        <label for="regione">Regione</label>
        <select id="regione" name="regione">'
    ;
       
        

    echo 
    "<option value=\"$IDR\"";echo ">$regione</option>";
                
                echo
    '</select>
                     '
    ;
            
             break;
            case 
    'IDS':
            echo 
    '[*]
        <label for="nazione">Nazione</label>
        <select id="nazione" name="nazione" required>'
    ;
        
        
    echo 
    "<option value=\"$IDS\"";
    if(
    $Stato=="Italia") echo " selected";
    echo 
    ">$Stato</option>";
                
    //echo'<option value="\'$IDS\'">\'$Stato\'</option>';


                
    echo'</select>
                     '
    ;
            break;
            case 
    'User':
            echo 
    '[*]
                   <label for="User">Username</label>
                   <input id="User" name="User" type="text" required>
                   '
    ;
            break;
            case 
    'Password':
            echo 
    '[*]
                   <label for="Pwd">Password</label>
                   <input id="Pwd" name="Pwd" type="password" required>
                   '

    Come puoi vedere è un minestrone fuori di testa e siccome è poco elegante e sicuramente anche poco funzionale cercavo qualche spunto per riscrivere una classe da 0 da implementare in stò progettino , grazie comunque per lo spunto
    Fare o non fare....non c'è provare!

  4. #4
    Bravo mi hai aiutato a fare lo step prima in effetti l'avevo accantonato perchè non avevo idea di come farlo grazie

  5. #5
    Utente di HTML.it L'avatar di Grino
    Registrato dal
    Oct 2004
    Messaggi
    739
    Se vuoi lavorare bene, secondo me non ti basta una classe. Hai bisogno di diverse classi che danno orgine a svariati oggetti che cooperando dando luogo al risultato che cerchi. Alla fine potresti anche realizzare una classe che aggrega (delegando) le funzionalità delle altre, dandoti un'interfaccia dedicata ai form più semplice, ma per ora ti manca tutto il substrato su cui realizzarla. Come dire:

    Mi piacerebbe una classe palazzo, ma se non definisci prima la classe porta, mattone, malta e quant'altro quanto è dura realizzare il palazzo? E se poi qualcosa non funziona? Che fai rimetti mano a tutta la classe? E se un giorno decidi di adottare una porta più bella? Devi rimettere mano a tutto la classe palazzo? Mentre ti basterebbe a parità d'interfaccia cambiare una classe porta con un'altra?

    Citando una frase dal film "Una settimana da Dio":
    "Pensa bene a quello che desideri... teppista!"

    Inizia a pensare gli elementi costituivi, a come vuoi che interagiscano fra loro in modo da definirne l'interfaccia pubblica (i metodi), e quindi prova!

    Se le cose fossero così semplici allora mi piacerebbe ralizzare una classe "Tutto".

    Siamo sempre troppo gelosi delle nostre grandi piccole opere! - Grino inedito.
    Lavori e Lavoretti

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.