Schneller fix:
Wenn es hilft kannst du auch einfach in deiner datenbank einen unique index ueber mehrere zellen machen die zusammen immer eindeutig sein muessen, in deinem fall wahrscheinlich [unterkunft_id, email, anreise]. Dann einfach ein INSERT IGNORE machen, und nur der erste request landet in der datenbank.
Zuverlaessigerer fix:
statt jedesmal neu name, email, telefon zu speichern ich wuerde im hintergrund immer einen neuen benutzer anlegen, wenn es sich um eine neue email handelt und dann nur die benutzer_id mit jeder anfrage speichern. Damit vermeidest du schonmal probleme wenn telefon leicht abweicht (123-456, 1 234 56, 123456) und kannst leichter pruefen ob der user schonmal was geschickt hast. Ausserdem hast du alle kunden zentral an einem platz, und verteilst keine kontaktinfos ueber verschiedene tables.
Ich mache bei solchen kontaktanfragen immer ajax-request, und dabei wird der submit-button auf 'disabled' gesetzt solange der request noch laeuft, und leute koennen nichtmehr dopplelklicken.
//in deinem globalen javascript file:
//mimmt ein beliebigen normales html form und verschickt es via ajax im hintergrund:
function sendAjaxForm($form) {
var url = $form.attr('action');
var data = $form.serializeArray();
var method = $form.attr('method');
var xhr = $.ajax({
url: url,
type: method,
data:data
});
//return the xhr object, so you can attach other functions to the success events:
return xhr;
}
Alles anzeigen
//in deiner formular seite:
<form id="buchungsanfrage" ....></form>
//im document ready block
$( document ).ready(function() {
var $form = $('#buchungsanfrage');
//bind events
$form.on('submit', function(){
$submitBtn = $form.find('[type=submit]');
//button abschalten
$submitBtn.attr('disabled', 'disabled');
var xhr = sendAjaxForm($form);
xhr.done(function( data ) {
//user weiterleiten und "danke fuer ihre anfrage" meldung zeigen. Wenn du auf der selben seiten bleiben willst, wuerde ich die formulardaten loeschen damit sie nicht mochmal geschickt werden
});
xhr.fail(function(jqXHR, textStatus, errorThrown) {
// ajax fehlgeschlagen
});
xhr.always(function() {
// ajax request fertig, button freigeben
$submitBtn.removeAttr('disabled');
});
});
});
Alles anzeigen
(sorry, formatierung ist verlorengegangen)