Dove devo inserire i dati nel database?

1

Sto facendo un modulo di iscrizione PHP piuttosto standard che convaliderà i dati che l'utente ha inserito e poi reindirizzerà a una pagina con un messaggio di successo. Vorrei memorizzare questi dati in un database. Devo inserire queste informazioni nel database prima di reindirizzare la pagina o dopo che è stata reindirizzata?

    
posta fdsa 29.06.2012 - 00:07
fonte

4 risposte

4

Il modello per il caso di successo:

  1. Leggi la richiesta POST
  2. Convalida i dati POST
  3. Pre-process dati POST
  4. Conservare
  5. Redirect
  6. Leggi la richiesta GET
  7. Visualizza messaggio di successo

E nel caso di fallimento:

  1. Leggi la richiesta POST
  2. Convalida i dati POST (in caso di esito negativo, vai a 5.)
  3. Pre-processare i dati POST (se fallito, vai a 5.)
  4. Store (fallisce)
  5. Visualizza messaggio di errore

Nel tuo codice, questa struttura sembra un po 'così (pseudocodice, ovviamente):

if (is_post_request) {
    data = empty_data()
    try {
        data = read_post_data()
        validate(data)
        preprocess(data)
        store(data)
        redirect()
        exit
    }
    catch (ex) {
        display_form(data, error_message = ex)
    }
}
else {
    data = empty_data()
    display_form(data, error_message = NULL)
}

Il motivo per cui stai reindirizzando è che vuoi evitare un secondo aggiornamento del database quando l'utente si ricarica. Per questo motivo, è necessario il primo store e then reindirizzamento. In effetti, ti consiglio di prendere l'abitudine di chiamare exit immediatamente dopo ogni reindirizzamento. Non ha senso fare qualsiasi cosa nella richiesta corrente una volta reindirizzato (tranne la pulizia, come la chiusura degli handle di file aperti).

Il motivo per cui non reindirizza nel caso di errore è perché nulla è stato ancora archiviato - se l'utente ricarica, si ripeterà nuovamente lo stesso errore. Se dovessi reindirizzare nel caso di errore, dovresti portare i messaggi di errore sul reindirizzamento, il che è possibile ma non proprio carino, e avresti un viaggio di andata e ritorno non necessario.

    
risposta data 29.06.2012 - 10:02
fonte
3

Risposta breve: effettua l'aggiornamento del database prima del reindirizzamento.

Dovresti sempre utilizzare il modello get-post-redirect quando l'utente invia un modulo che altera dati dell'applicazione. (Puntano su @WyattBarnett e @PieterB per rispondere ai commenti.) Per funzionare bene con i browser, solo le richieste GET devono visualizzare una pagina per l'utente e le richieste GET non dovrebbero mai avere effetti collaterali come le modifiche al database, i messaggi di posta elettronica, ecc. .

Quindi invia POST ** il modulo a uno script di elaborazione, che gestisce la convalida, scrive sul database, invia email, qualunque cosa ... e reindirizza a un'altra pagina, che verrà richiesta con GET e non ne farà nessuna cose. Mostra solo cose.

** Leggi REST per un approccio ai metodi http che va oltre GET e POST. Probabilmente non è necessario per questa applicazione, però.

    
risposta data 29.06.2012 - 01:42
fonte
0

Potresti evitare di reindirizzare, Potresti avere il campo Azione modulo inviare alla pagina corrente e avere uno snippet di PHP più in alto nella pagina per fare attenzione all'invio del modulo, salvare i dati e mostrare un messaggio di ringraziamento.

Ad esempio:

<?php
if($_POST['submit'] == 'Sign up')
{
// place some code here to save the details and thank the user
}
?>

<form action='sign_up.php' method='post'>
<form>
    
risposta data 29.06.2012 - 00:14
fonte
-1

Inserisci i dati nel database dopo che un individuo si è registrato usando un metodo post e poi reindirizza usando l'intestazione ('location: whateverpage.php? message = success') e sull'altra pagina usa

if(isset($_GET['message']) == 'success') {
//Show some message
}
    
risposta data 29.06.2012 - 07:13
fonte

Leggi altre domande sui tag