Formularz i wielokrotne wysyłanie

0

Witam serdecznie, mam problem ze swoim formularzem. Chodzi o to, że nie ma w nim zabezpieczenia na wielokrotne wysyłanie, a moje wszelkie próby nie przynoszą skutku.

Mam formularz kontaktowy z polem imię i treść oraz sprawdzam te pola tą wtyczką: https://github.com/posabsolute/jQuery-Validation-Engine

Problem polega na tym, że gdy formularz się wyśle, to mogę sobie kliknąć kilka razy odśwież, F5 czy ctrl+r i przetwarzam ponownie dane, przez co wysyłam do siebie kilka wiadomości.

Czytałem sporo na ten temat i próbowałem zablokować to poprzez sesję, pliki cookie, generowany "hash" ale nic nie działa. Potem pomyślałem, by skorzystać z Ajaxa i w jednym oknie by mi wszystko robiło, przez co po odświeżeniu znów byłby widoczny formularz.
Napisałem również do twórców, ale Ci odesłali mnie do dokumentacji, z której przynajmniej dla mnie nie wynika nic.

Jedyne o czym wiem ale czego nie próbowałem jeszcze, to poprzez przekierowanie po przesłaniu formularza na inną stronę, ale to są w sumie 4 strony przy jednym formularzu (formularz, przetworzenie, strona gdy ok, strona gdy błąd). Na stronie mam 2 różne formularze więc to już 8 stron.

Dlatego czy ktoś się bawił tą wtyczką lub zna jakieś rozwiązanie które mogłoby mi pomóc ?

Pozdrawiam serdecznie,
Patryk.

0

Nie bardzo widzę związek między wtyczką do walidacji, a niemożnością użycia ajaxa, napisania dwóch linijek do przekierowania, czy użycia hasha + sesji do odrzucenia tego samego formularza..

Standardowo - może jakieś fragmenty kodu?

0

hmm nie bardzo wiem co mam w zasadzie załączyć, mam plik kontakt.php z formularzem oraz wyslanykontakt.php z przetwarzaniem.
Formularz to standardowy formularz po prostu, w sekcji head jest dopisek z wtyczki:

 <script>
jQuery(document).ready(function(){
jQuery("#formularzkontaktowy").validationEngine();
});
	</script>

Formularz chodzi, przetwarza i wysyła. Problem jest z tym odświeżaniem.

druga opcja:

 // Called once the server replies to the ajax form validation request
            function ajaxValidationCallback(status, form, json, options){
                if (window.console) 
                    console.log(status);
                
                if (status === true) {
                    alert("the form is valid!");
                    // uncomment these lines to submit the form to form.action
                    form.validationEngine('detach');
                    form.submit();
                    // or you may use AJAX again to submit the data
                }
            }
            
            jQuery(document).ready(function(){
                jQuery("#formularzkontaktowy").validationEngine({
					ajaxFormValidation: true,
                    onAjaxFormComplete: ajaxValidationCallback,
                });
            });
        </script>

Tutaj formularz "stoi", po kliknięciu w przycisk submit, nic się nie dzieje.

ostatnia opcja:

	<script>
	jQuery(document).ready(function(){
jQuery("#formularzkontaktowy").validationEngine('attach', {
  onValidationComplete: function(form, status){
    alert("The form status is: " +status+", it will never submit");
  }  
});
});
        </script>

Tutaj po naciśnięciu przycisku submit i gdy pola są wypełnione mam komunikat z "alertu".

Nie wiem, czy jako akcję w formularzu też, mam dać ścieżkę do pliku (inkludowane/wyslanykontakt.php) czy ladny url (/wyslano/).
Tak samo czy może zawartość pliku przetwarzającego wkleić do formularza czy nie.

No i może po prostu jest jakiś inny sposób ?
Nie muszę mieć tego formularza bez przeładowania, najbardziej mi zależy na blokadzie, by nie można było odświeżać strony i by nie wysyłało się wiadomości kilka razy.
Mógłbym pominąć wyświetlanie wiadomości i w przetwarzaniu dać przekierowanie znów na formularz, ale zależy mi, by komunikat się wyświetlał.

0

Tutaj formularz "stoi", po kliknięciu w przycisk submit, nic się nie dzieje.

Sprawdź konsolę.

Tutaj po naciśnięciu przycisku submit i gdy pola są wypełnione mam komunikat z "alertu".

No i masz ładnie, teraz musisz sobie tylko sprawdzić czy status jest true, poczytać jak wysłać zawartość formy ajaxem i to zrobić.

Nie wiem, czy jako akcję w formularzu też, mam dać ścieżkę do pliku (inkludowane/wyslanykontakt.php) czy ladny url (/wyslano/).

No to jak ty nie wiesz, to nikt z nas nie będzie wiedział bardziej niż ty... Ale jeżeli /wyslano/ wskazuje na inkludowane/wyslanykontakt.php to nie ma żadnej różnicy.

0

@Edit było tu pytanie ale było zupełnie zbędne ;)


A to w miejscu jak jest ten "alert" to zamienić to na warunek sprawdzający i jeśli warunek będzie spełniony to ma zrobić coś mniej więcej takiego ?

$.ajax({  
  type: "POST",  
  url: "bin/process.php",  
  data: dataString,  
  success: function() {  
    $('#contact_form').html("<div id='message'></div>");  
    $('#message').html("<h2>Contact Form Submitted!</h2>")  
    .append("<p>We will be in touch soon.</p>")  
    .hide()  
    .fadeIn(1500, function() {  
      $('#message').append("<img id='checkmark' src='images/check.png' />");  
    });  
  }  
});  
return false;  

co do adresu to wskazuje na ten plik, więc tak też zostawię.

0

tak, mniej więcej takie. return false możesz sobie odpuścić. no i w php mam nadzieję też robisz walidację (walidację js można łatwo ominąć)? no i po stronie php zwracaj jakieś info czy udało się wysłać czy nie. zwrot przeczytasz modyfikując lekko success:

  success: function(info) {
    alert(info); // wypisze zwrot w alercie
  }

0

w takim razie czeka mnie kolejna lektura, ale dziękuję za pomoc :) a co do konsoli: wyskakuje błąd "ajax error: 200 parsererror"

1 użytkowników online, w tym zalogowanych: 0, gości: 1