[Submit & Sessioni] Come evitare submit multipli dovuto a refresh di pagina.

Buonasera a tutti,

sono nuovo in questo forum e sono felice di farne parte  :)

Senza ulteriori indugi punto dritto al mio quesito.

Premetto che ho realizzato un sito web (non ancora lanciato) e che sono un neofita di PHP. Con questo intendo dire che mi sono servito solamente di ciò che era utile per i miei scopi. :)

Allora, ho una pagina php con un form all'interno per l'invio di un email. Lo script php preposto al controllo dei campi risiede nella stessa pagina e il form non ha un action specificata.

Non posso adottare la tecnica della funzione header("Location: ..."); per ovvi motivi. Quindi la pagina quando invia l'email, non effettua nessun redirect.

Come posso evitare i submit multipli dovuti a refresh di pagina?

Grazie a tutti.

inviato 5 anni fa
wartpro
X 0 X
Non posso adottare la tecnica della funzione header("Location: ..."); per ovvi motivi. Quindi la pagina quando invia l'email, non effettua nessun redirect.

Questo punto non mi è chiaro. La tecnica dell'header si applica anche ad un unico script che mostra il form, lo controlla ed invia la mail. Il redirect deve essere effettuato dopo l'invio della mail (e non in caso di segnalazione degli errori) e può puntare sia ad un secondo script che mostra un messaggio di successo, sia allo stesso unico script.

Guarda l'ultimo script di esempio che trovi in questa pagina:

http://www.phpnews.it/corsi/corso-php-mysql/inserimento-dei-dati/

 :bye:

risposto 5 anni fa
Gianni Tomasicchio
X 0 X

Ciao Gianni grazie per la risposta.

Con "Non posso adottare la tecnica della funzione..." intendevo dire che non lo posso fare perchè lo script php che esegue i controlli risiede sotto il form, quindi essendoci output presenti prima di questa funzione non posso adottarla.

La mia pagina è fatta nel seguente modo, ti faccio un esempio semplificato:

<?php
session_start();
?>

<html>
<body>

<form action="" method="post">
 <!--
        varie input
 -->
</form>

<?php

  if(isset($_POST['pulsante_conferma'])) {

    $email = $_POST['email']; // Recupero i dati

    $errore = "<script type="text/javascript"> ... </script>" // Questa è una modale che appare in caso di errore
      if($email == "") {

          echo $errore;

       } elseif () { // ...seguono altri controlli, ad esempio sull'inserimento corretto di un indirizzo email e altro..

       } else {

            // Invio la mail e visualizzo sempre una modale come sopra con però la scritta "Mail inviata"

       }
}
?>
</body>
</html>
<?php
session_destroy();
?>

Ecco così è strutturata la pagina:

- Apro la sessione

- Segue il cotenuto html

- Poi lo script che controlla e in caso visualizza l'errore oppure invia

- Seguono le chiusure dei vari tag e sessione

risposto 5 anni fa
wartpro
X 0 X

Se non vuoi cambiare la struttura del file puoi inserire l'istruzione ob_start() come prima riga dello script ed il gioco è fatto, potrai effettuare senza problemi il redirect quando vuoi.

 :bye:

risposto 5 anni fa
Gianni Tomasicchio
X 0 X

Sei un santo! Non sai che grossa mano mi hai dato. Adesso ho risolto il problema del redirect.

Potrò quindi reindirizzare ad un'altra pagina l'utente dopo che avrà inviato l'email...quindi...problema del submit multiplo risolto.

Avrei un'altra cosa da chiedere, riguarda il "return" (uso questo termine ma forse non è propriamente esatto) dei dati in caso l'utente sbagli a digitare nei campi di testo..

..posto un altro thread oppure posso chiedere?

Sempre se non è disturbo. Ti ringrazio tantissimo ancora!

risposto 5 anni fa
wartpro
X 0 X

altro thread  :bye:

risposto 5 anni fa
Gianni Tomasicchio
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda