Convalida del modulo e struttura del file

1

Ho un modulo (diciamo un modulo di registrazione) e onsubmit, esso chiama una funzione per validare come segue:

$.ajax({
        url : "/ajax/validate.php",
        type : "POST",
        data : $(".form").serialize(),
        success : function(data) {
            data = $.parseJSON(data);
            $.each(data, function(i, item) {
                $('#' + i).addClass('errors');
            });
        }
    });

Il validate.php assomiglia a questo:

if ($_POST['email'] == '' || filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) == false) {
    $errors['email'] = 'Not a valid email';
}
if ($errors) {
    echo json_encode($errors);
} else {
    // insert to db
}

Ora tutto questo codice è specifico per il modulo di registrazione. Avrò molti moduli sul mio sito. La mia domanda è: creo un nuovo file (come validate.php ) per ogni singolo modulo? Come /ajax/save_profile_data.php ecc? Mantengo separate le convalide di ogni modulo o c'è un modo intelligente per avvicinarsi a questo? Non so se avere un file valido per ogni modulo sul mio sito sia il modo corretto per farlo.

    
posta SeanWM 22.03.2013 - 02:01
fonte

3 risposte

1

La risposta generale sarebbe sì - un file separato per ogni singolo modulo. Se i moduli sono diversi e devono essere convalidati in un modo diverso, ogni file avrà solo bisogno del codice per quel modulo specifico, altrimenti il tuo unico file alla fine diventerà troppo grande nel tempo. Qualcosa come /ajax/validations/register.php, /ajax/validations/login.php, /ajax/validations/profile.php, ecc.,

Potresti ottenere un vantaggio da questo facendo sì che ciascuno dei file di convalida del modulo includa altri file intermedi che contengono metodi riutilizzabili da condividere tra le diverse pagine di convalida.

Tuttavia, per la maggior parte dei progetti suggerirei di utilizzare un framework per svolgere il maggior numero di lavori possibile, alcuni dei quali consentono di creare moduli con i loro campi e di collegarli a una tabella di database tramite un mappatore di oggetti SQL, o qualcos'altro, a seconda delle tue esigenze.

    
risposta data 22.03.2013 - 04:54
fonte
1

Se si dispone di più moduli che inviano alla stessa pagina (file), è possibile utilizzare campi nascosti nel modulo per determinare l'azione da eseguire, per identificare i moduli inviando un campo di dati nascosti.

Ad esempio:

<form id='reg'>
  <input type='hidden' name='act' value='registration'>
  <!-- More HTML --> 
</form>

<form id='news'>
  <input type='hidden' name='act' value='newsletter'>
  <!-- More HTML --> 
</form>

Inoltre, aggiungi la convalida del lato client per ridurre l'elaborazione del server. A tale scopo, puoi utilizzare il plug-in di convalida jQuery

Scarica e copia nella directory del tuo sito web jquery.validate.js , additional-methods.js e libreria jQuery stessa . Nelle pagine in cui desideri utilizzare la convalida, fai riferimento a tutti questi file.

Ecco come usarlo

HTML

<form action="#" method="post" name="registration">
<input type="text" name="name" required minlength="2" maxlength="30"
            pattern="^[a-zA-Z\s]+$" placeholder="Name"
            title="Name is required, and must contain between 2 and 30 alpha characters" />
</form>
<form action="#" method="post" name="newsletter">
<input type="text" name="name" required minlength="2" maxlength="30"
            pattern="^[a-zA-Z\s]+$" placeholder="Name"
            title="Name is required, and must contain between 2 and 30 alpha characters" />
</form>

JS

$(function() { 
      $("form").each(function() {
            $(this).validate({
                  submitHandler: function (form) {
                        return false; //prevent actual submit (requirements?)
                  }
            });
      });
});
    
risposta data 01.04.2013 - 17:04
fonte
0

Se stiamo parlando di una semplice pagina web, il tuo metodo dovrebbe essere sufficiente.

Se stiamo parlando di qualcosa di una webapp che è AJAX-heavy, tuttavia, potrebbe avere senso reindirizzare tutte le chiamate AJAX a un singolo ajax.php . La chiamata dovrebbe contenere l'indicatore di azione (ad esempio {ajax-action: "validate", form-data: "..."} ).

ajax.php quindi decide cosa fare in base all'indicatore di azione, elabora la chiamata ed emette la risposta. Potrebbe essere utile, quindi, creare un file ajax_functions.php che conterrebbe tutte le funzioni che potrebbero essere invocate tramite AJAX (dividerlo se diventa troppo grande).

In questo modo, puoi diventare più flessibile con le chiamate AJAX. Ad esempio, puoi:

  • tenta di autorizzare l'utente prima di eseguire l'azione;

  • registra in modo efficiente le chiamate AJAX;

  • funzionalità AJAX astratta in Javascript in una singola funzione o classe personalizzata in base alle tue esigenze.

risposta data 01.05.2013 - 17:35
fonte

Leggi altre domande sui tag