Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    rendere la validazione di un form una funzione

    Oggi sono in vena di domande.

    Finora per validare un form ho utilizzato questo metodo: controllo le variabili una per una inizializzando un messaggio di errore e un contatore degli errori stessi. Ogni volta che viene trovato un errore il messaggio viene aggiunto alla stringa e il contatore di errori viene aggiornato.
    Siccome mi rendo conto che come metodo fa abbastanza schifo vi sarei grato se mi spiegaste come faccio a rendere il mio codice di esempio una funzione.

    codice:
    $mesErr = '';
    $errori = 0;
    if (preg_match("#[a-z]{5,10}#i",$_POST['nome']))  
    	$nome = $_POST['nome'];
    else
    {
    	$mesErr.='Il nome deve contenere solo lettere (minimo 5 e massimo 10)
    ';
    	$errori++;
    }
    if ($_POST['numero'] >=1 && $_POST['numero'] <= 10)
    $numero =  $_POST['numero']; 
    else
    { 
    $mesErr.='il numero deve essere tra 1 e 10
    ';
    $errori++;
    }
    if (preg_match("#[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}#",$_POST['data'])) 
    $data =  $_POST['data']; 
    else{
    $mesErr.='non è una data valida
    ';
    $errori++;
    }
    // Se c'è stato almeno un errore stampo la stringa ed esco dal codice
    if ($errori != 0)
    {
    echo $mesErr;
    exit;
    }
    else
    {
    // altrimenti procedo col mio script
    // qui ovviamente stampo solo a video le mie tre variabili se sono corrette
    echo $nome.' '.$numero.' '.$data;
    }

  2. #2

    Re: rendere la validazione di un form una funzione

    Codice PHP:
    function Controlla($Cosa,&$errMsg,&$numErr)
    {
        
    $flag true;
        switch(
    $Cosa)
        {
        case 
    "nome":
            if(!
    preg_match("#[a-z]{5,10}#i",$_POST['nome']))
            {
                
    $errMsg .= "Il nome deve contenere solo lettere (minimo 5 e massimo 10)
    "
    ;
                
    $numErr++;
                
    $flag false;
            }
        break;
        case 
    "numero":
            if(
    $_POST['numero'] <|| $_POST['numero'] > 10)
            {
                
    $errMsg .= "Il numero deve essere tra 1 e 10
    "
    ;
                
    $numErr++;
                
    $flag false;
            }
        break;
        case 
    "data":
            if(!
    preg_match("#[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}#",$_POST['data']))
            {
                
    $errMsg .= "Non &egrave; una data valida
    "
    ;
                
    $numErr++;
                
    $flag false;
            }
        break;
        }
        return 
    $flag;
    }
    $mesErr "";
    $errori 0;
    if(
    Controlla("nome",$mesErr,$errori)) $nome $_POST['nome'];
    if(
    Controlla("numero",$mesErr,$errori)) $numero $_POST['numero'];
    if(
    Controlla("data",$mesErr,$errori)) $data $_POST['data'];
    // Se c'è stato almeno un errore stampo la stringa ed esco dal codice
    if ($errori != 0)
    {
    echo 
    $mesErr;
    exit;
    }
    else
    {
    // altrimenti procedo col mio script
    // qui ovviamente stampo solo a video le mie tre variabili se sono corrette
    echo $nome.' '.$numero.' '.$data;


  3. #3
    Ti ringrazio tanto. Sei stato molto gentile.
    Se qualcuno di voi usa altri sistemi (anche senza avere la pazienza di luke31 per scrivermi tutto il codice ma solo spiegandomi teoriacamente il proprio procedimento) si faccia avanti. Essendo agli inizi vorrei acquisire lo "stile" giusto di programmazione.

  4. #4
    Allora ragazzi, ho fatto prove tutta la mattina e ho scritto questo codice.
    Ho trasformato la mia validazione in una funzione e sto cercando di usare le sessioni per mantenere i dati nel form nel caso la validazione fallisca. Il problema è che li mantiene anche troppo, nel senso che vorrei che nel caso non ci siano errori dopo che avviene l'inserimento i campi del form venissero resettati invece rimangono i dati appena inseriti. Mi dite cosa sbaglio.

    Questo è il form.

    Codice PHP:
    <form action="elaboraform2.php" method="post">
    nome: <input type="text" name="nome" value="<?php echo isset($_SESSION['nome']) ? $_SESSION['nome'] : '' ?>" />

    numero: <input type="text" name="numero" value="<?php echo isset($_SESSION['numero']) ? $_SESSION['numero'] : '' ?>" />

    data: <input type="text" name="data" value="<?php echo isset($_SESSION['data']) ? $_SESSION['data'] : '' ?>" />

    <input type="submit" value="Invia">
    e questa è la pagina che controlla i dati e poi esegue la query.

    Codice PHP:
    function valida() {
        
    $mesErr '';
        
    $errori 0;
        
    $_SESSION['nome'] = $_POST['nome'];
        if (!
    preg_match("#^[a-z]{5,10}$#i",$_POST['nome']))  
        {
            
    $mesErr.='Il nome deve contenere solo lettere (minimo 5 e massimo 10)
    '
    ;
            
    $errori++;
        }
        
        
    $_SESSION['numero'] = $_POST['numero']; 
        if (
    $_POST['numero'] <|| $_POST['numero'] > 10)
        { 
        
    $mesErr.='il numero deve essere tra 1 e 10
    '
    ;
        
    $errori++;
        }
        
        
    $_SESSION['data'] = $_POST['data']; 
        if (!
    preg_match("#[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}#",$_POST['data'])) 
        {
        
    $mesErr.= 'non è una data valida
    '
    ;
        
    $errori++;
        }
        
        if (
    $errori 0)
        {
        echo 
    $mesErr.'
    '
    ;
        echo 
    "<a href=\"invioform2.php\">torna alla pagina di inserimento</a>";
        exit;
        }
        else
        {
        
    $query "insert into validazioneform(nome,numero,miadata) values('$_SESSION[nome]',$_SESSION[numero],'$_SESSION[data]') ";
        
        
    mysql_query($query) or die(mysql_error());
        if (
    mysql_affected_rows() > 0)  
            
    header("Location: inserimentook2.php"); 
        else  
        echo 
    'no inserimento';
        }
    }
    valida(); 
    ovviamente in tutte e due le pagine c'è il session_start() in cima.
    Confido in voi.

  5. #5
    Allora,forse ho risolto.
    Nella pagina che si chiama inserimentook2.php a cui reindirizzo il mio script in caso di successo della query per evitare inserimenti doppi in caso di refresh ho aggiunto in cima.
    Codice PHP:
    <?php
    session_start
    ();
    unset(
    $_SESSION['nome']);
    unset(
    $_SESSION['numero']);
    unset(
    $_SESSION['data']);
    ?>
    Sembra funzionare bene ma non sono sicuro se è sufficiente oppure se devo aggiungere session_destroy, $_SESSION['nome_variabile'] = array() per ogni mia variabile e cose del genere.
    Mi chiarite la cosa?

  6. #6
    Utente di HTML.it L'avatar di neida
    Registrato dal
    Feb 2005
    Messaggi
    1,478
    Non è conveniente usare la funzione generica unset()
    quando puoi sfruttare delle istruzioni specifiche dedicate alle sessioni.

    Codice PHP:
    $_SESSION = array(); //desetta TUTTE le variabili di sessione
    session_destroy(); //elimina la sessione 

  7. #7
    forse ha altre variabili salvate in sessione che non devono andare perdute...
    www.gext.it

  8. #8
    Come dice tarini ho altre variabili in sessione che devo mantenere, quindi il metodo giusto per cancellare solo quelle tre quale sarebbe se unset non va bene?

    Dovrei fare così?

    Codice PHP:
    $_SESSION['nome'] = array();
    $_SESSION['numero'] = array();
    $_SESSION['data'] = array(); 
    Ne approfitto anche per chiedervi se secondo voi il metodo di validazione del form che uso è corretto come logica.

  9. #9
    Utente di HTML.it L'avatar di neida
    Registrato dal
    Feb 2005
    Messaggi
    1,478
    Avevo inteso che desideravi eliminate tutte le variabili di sessione, non solo quelle indicate.

    Nel tuo caso allora dovrebbe andar bene: unset($_SESSION['nome']) così come avevi fatto prima, mentre per eliminare tutto: $_SESSION = array() seguito da session_destroy().

    Relativamente al metodo di validazione ti consiglio di pravarne più di uno. Personalmente prefeirsco una struttura try/catch gestita con uno switch. Ma, la cosa migliore è provare...

  10. #10
    Originariamente inviato da neida
    Avevo inteso che desideravi eliminate tutte le variabili di sessione, non solo quelle indicate.

    Nel tuo caso allora dovrebbe andar bene: unset($_SESSION['nome']) così come avevi fatto prima, mentre per eliminare tutto: $_SESSION = array() seguito da session_destroy().

    Relativamente al metodo di validazione ti consiglio di pravarne più di uno. Personalmente prefeirsco una struttura try/catch gestita con uno switch. Ma, la cosa migliore è provare...

    Al momento non ci sono altre variabili di sessione perchè sto combattendo con la validazione dei form ma in futuro dovrò aggiungere le variabili di sessione per il login degli utenti.

    Il try catch lo conosco solo di nome, vedrò di documentarmi.
    Un'ultima domanda, questo try catch si può usare anche con php 4 o funziona solo con php 5?

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 © 2024 vBulletin Solutions, Inc. All rights reserved.