Hallo,
Niet zo heel erg bekend met PHP-scripts en daarom kan ik dit probleem niet triggeren:

Op een site van een van mijn klanten staat een reserveringsformulier (www.daytonadasburg.com/reservering/index.php)
Basis heb ik ooit ergens gevonden (misschien op dit forum??) aangepast en functioneert al jaren naar volle tevredenheid.
Tot voor enkele maanden geleden; hotelbaas gaf te kennen dat hij soms dezelfde reserveringen meerdere malen achter elkaar ontving - lastig.
Als ik in de inbox kijk dan zie ik idd soms dezelfde reserveringen 3-5 binnenkomen met enkele seconden vertraging.
Maar niet altijd...
Ticket aangemaakt bij hostingbedrijf; hopende dat zij misschien een oplossing of reden van fout kenden- niet dus...
Hun reply: "...Wellicht dat je developer hier eens naar kan kijken om te zien of er ergens een timeout wordt bereikt waardoor het script een 2e email genereert..."
Is wel een hint maar ik heb te weinig kennis van PHP om dat te tackelen.
Misschien dat via dit forum een oplossing gevonden kan worden.

Het formulier is, zoals eerder vermeld, te vinden op : www.daytonadasburg.com/reservering/index.php
Ik heb hier geen mogelijkheid om het script zelf bij te sluiten...of zie ik iets over het hoofd?

Ik zie wel uit naar de reacties.
Het kan veel oorzaken hebben. Kan je de *relevante* code hier plaatsen, tussen code-tags?
Als het formulier is verzonden en je doet een pagina reload, krijg je een melding.
Als je dan doorgaat wordt het formulier opnieuw verzonden.

Gebruik deze code bovenaan de pagina code :

 <?php
session_start();
//https://stackoverflow.com/questions/13889198/php-avoid-browser-reposting-post-on-page-refresh/13889283#13889283
if( strcasecmp( $_SERVER['REQUEST_METHOD'],"POST" ) === 0 )
{
	$_SESSION['postdata'] = $_POST;
	header("Location: ".$_SERVER['PHP_SELF']."?".$_SERVER['QUERY_STRING']);
	exit();
}

if ( !$_SESSION['postdata'] )
{
	header("Location: forum_login.php");
	exit();
}

if( isset( $_SESSION['postdata'] ) )
{
	$_POST = $_SESSION['postdata'];
	unset($_SESSION['postdata']);
}

?>


Deze regel aanpassen of weglaten naar eigen situatie :

header("Location: forum_login.php");
Het PHP script:
>>>

<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);

ob_start();
session_start();

// Config Gedeelte
$cfg['url'] = "http://www.daytonadasburg.com";		// Site waarnaar je terug gaat als je een bericht hebt achtergelaten
$cfg['naam'] = "Hotel Daytona Dasburg";			// Webmaster naam
$cfg['email'] = "[email protected]";		// Webmaster E-mail
$cfg['spam'] = 2;									// Anti Spam Tijd in Minuten ( Voer "0" om de Spam Beveiliging uit te zetten )
$cfg['text'] = TRUE;								// Bij Fout Text Rood maken ( TRUE voor aan, FALSE voor uit )
$cfg['input'] = TRUE;								// Bij Fout Border om Vakje Rood maken ( TRUE voor aan, FALSE voor uit )
$cfg['HTML'] = TRUE;								// Een HTML email ( TRUE voor aan, FALSE voor uit )
$cfg['CAPTCHA'] = TRUE;								// CAPTCHA ( TRUE voor aan, FALSE voor uit )
$cfg['onderwerp'] = "reservering";


// Hieronder niks meer veranderen
// E-mail Checker / Validator
function checkmail($email)
{
	if(preg_match("/^[_\.0-9a-zA-Z-]+@([0-9a-zA-Z][0-9a-zA-Z-]+\.)+[a-zA-Z]{2,6}$/i", $email))
	{
		return TRUE;
	}
    return FALSE;
}

$formulier = TRUE;

if(!isset($_COOKIE['formulier']))
{
	if(isset($_POST['wis']) && ($_SERVER['REQUEST_METHOD'] == "POST"))
	{
		foreach($_POST as $key => $value)
		{
			unset($value);
		}
		header("Location: ".$_SERVER['PHP_SELF']."");
	}
		
	if(isset($_POST['verzenden']) && ($_SERVER['REQUEST_METHOD'] == "POST"))
	{$aFout = array();
		$datum_aankomst = trim($_POST['datum_aankomst']);
		$datum_vertrek = trim($_POST['datum_vertrek']);
		$naam = trim($_POST['naam']);
		$adres = trim($_POST['adres']);
		$postcode = trim($_POST['postcode']);
		$plaats = trim($_POST['plaats']);
		$telefoon = trim($_POST['telefoon']);
		$email = trim($_POST['email']);
		$aantal_personen = trim($_POST['aantal_personen']);
		$samenstelling = trim($_POST['samenstelling']);
		$ontbijt = trim($_POST['ontbijt']);
		$alacarte = trim($_POST['alacarte']);
		$dagmenu = trim($_POST['dagmenu']);
		$speksteengrillen = trim($_POST['speksteengrillen']);
		$speenvarken = trim($_POST['speenvarken']);
		$BBQ = trim($_POST['BBQ']);
		$opmerking = trim($_POST['opmerking']);
		
		if($cfg['CAPTCHA'])
        {
			$code = $_POST['code'];
		}
				
		if(empty($datum_aankomst))
		{
			$aFout[] = "Er is geen aankomstdatum ingevuld.";
			unset($datum_aankomst);
			$fout['text']['datum_aankomst'] = TRUE;
			$fout['input']['datum_aankomst'] = TRUE;
		}
		
		if(empty($datum_vertrek))
		{
			$aFout[] = "Er is geen vertrekdatum ingevuld.";
			unset($datum_vertrek);
			$fout['text']['datum_vertrek'] = TRUE;
			$fout['input']['datum_vertrek'] = TRUE;
		}

		if(empty($naam))
		{
			$aFout[] = "Er is geen naam ingevuld.";
			unset($naam);
			$fout['text']['naam'] = TRUE;
			$fout['input']['naam'] = TRUE;
		}
		
		if(empty($adres))
		{
			$aFout[] = "Er is geen adres ingevuld.";
			unset($adres);
			$fout['text']['adres'] = TRUE;
			$fout['input']['adres'] = TRUE;
		}
		
		if(empty($postcode))
		{
			$aFout[] = "Er is geen postcode ingevuld.";
			unset($postcode);
			$fout['text']['postcode'] = TRUE;
			$fout['input']['postcode'] = TRUE;
		}
		
		if(empty($plaats))
		{
			$aFout[] = "Er is geen plaats ingevuld.";
			unset($plaats);
			$fout['text']['plaats'] = TRUE;
			$fout['input']['plaats'] = TRUE;
		}		

		if(empty($telefoon))
		{
			$aFout[] = "Er is geen telefoonnummer ingevuld.";
			unset($telefoon);
			$fout['text']['telefoon'] = TRUE;
			$fout['input']['telefoon'] = TRUE;
		}
		
		if(empty($email))
		{
			$aFout[] = "Er is geen e-mail adres ingevuld.";
			unset($email);
			$fout['text']['email'] = TRUE;
			$fout['input']['email'] = TRUE;
		}
		elseif(checkmail($email) == 0)
		// Wanneer je PHP 5.2 > gebruikt
		//elseif(!filter_var($email, FILTER_VALIDATE_EMAIL)) 
		{
			$aFout[] = "Er is geen correct e-mail adres ingevuld.";
			unset($email);
			$fout['text']['email'] = TRUE;
			$fout['input']['email'] = TRUE;
		}
		
		if(empty($aantal_personen))
		{
			$aFout[] = "Het aantal personen is niet ingevuld.";
			unset($aantal_personen);
			$fout['text']['aantal_personen'] = TRUE;
			$fout['input']['aantal_personen'] = TRUE;
		}

		if(empty($samenstelling))
		{
			$aFout[] = "De groepssamenstelling is niet ingevuld.";
			unset($samenstelling);
			$fout['text']['samenstelling'] = TRUE;
			$fout['input']['samenstelling'] = TRUE;
		}

		if($cfg['CAPTCHA'])
		{
			if(strtoupper($code) != $_SESSION['captcha_code'])
			{
				$aFout[] = "Er is geen correcte code ingevuld.";
				$fout['text']['code'] = TRUE;
				$fout['input']['code'] = TRUE;
			}
		}
		if(!$cfg['text'])
		{
			unset($fout['text']);
		}
		if(!$cfg['input'])
		{
			unset($fout['input']);
		}
		if(!empty( $aFout ))
		{
			$errors = '
			<div id="errors">
			<ul>';
			foreach($aFout as $sFout)
			{
				$errors .= "	<li>".$sFout."</li>\n";
			}
			$errors .= "</ul>
			</div>";
		}
		else
		{
			$formulier = FALSE;
			
##########################		
## html - non-html form ##		
##########################
	
			if($cfg['HTML'])
			{
				// Headers
				$headers = "From: \"Hotel Daytona\" <".$cfg['email'].">\r\n"; 
				$headers .= "Reply-To: \"".$naam."\" <".$email.">\n";
				$headers .= "Return-Path: Mail-Error <".$cfg['email'].">\n";
				$headers .= "MIME-Version: 1.0\n";
				$headers .= "Content-Transfer-Encoding: 8bit\n";
				$headers .= "Content-type: text/html; charset=iso-8859-1\n";
				
				$bericht='
				<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
				<html>
				<head>
				</head>
				<body>
				<br />
				Naam: <b>'.$naam.'</b><br />
				Email: <b><a href="mailto:'.$email.'">'.$email.'</a></b><br />
				Datum aankomst:<b> '.$datum_aankomst.'</b><br />
				Datum vertrek:<b> '.$datum_vertrek.'</b><br /><br />
				<i>Groep</i><br />
				Aantal personen:<b> '.$aantal_personen.'</b><br />
				Samenstelling groep:<b> '.$samenstelling.'</b><br />
				<br />
				<i>Gegevens contactpersoon</i>
				<br />
				Adres:<b> '.$adres.'</b><br />
				Postcode:<b> '.$postcode.'</b><br />
				Plaats/Land:<b> '.$plaats.'</b><br />
				Telefoon:<b> '.$telefoon.'</b><br /><br />
				<i>Restaurant</i><br />
				Ontbijt:<b> '.$ontbijt.'</b><br />
				A la carte:<b> '.$alacarte.'</b><br />
				Dagmenu:<b> '.$dagmenu.'</b><br />
				Speksteengrillen:<b> '.$speksteengrillen.'</b><br />
				Speenvarken:<b> '.$speenvarken.'</b><br />
				BBQ:<b> '.$BBQ.'</b><br />
				<br />
				Bericht:<br />
				<b>'.$opmerking.'</b>
				<br />
				<br />
				<br />
				--------------------------------------------------------------------------<br />
				<b>Datum:</b> '.date("d-m-Y @ H:i:s").'<br />
				<b>IP:</b>'.$_SERVER['REMOTE_ADDR'].'</a><br />
				<b>Host:</b> '.gethostbyaddr($_SERVER['REMOTE_ADDR']).'<br />
				</body>
				</html>';
			}
					
			if(mail($cfg['email'], "Hotel Daytona ".$cfg['onderwerp'], $bericht, $headers)) 
			{
				if(isset($_POST['stuurkopie']))
				{
					$headers = "From: \"Copy reservering van:\" <".$naam.">\r\n"; 
					$headers .= "Reply-To: \"".$naam."\" <".$email.">\n";
					$headers .= "Return-Path: Mail-Error <".$email.">\n";
					$headers .= "MIME-Version: 1.0\n";
					$headers .= "Content-Transfer-Encoding: 8bit\n";
					$headers .= "Content-type: text/html; charset=iso-8859-1\n";
					
					mail($email, "Hotel Daytona Dasburg ".$cfg['onderwerp'], $bericht, $headers);
				
				}
				
				unset($naam, $email, $bericht);
				setcookie("formulier", 1, time() + ( $cfg['spam'] * 60 ) );
		
				echo "
				<p>
				Uw bericht is succesvol verzonden, er word zo snel mogelijk gereageerd.<br />
				<br />
				Met vriendelijke groeten,<br />
				<b>Jan en Hilly Koelewijn</b><br />
				<b>".$cfg['naam']."</b>
				</p>
				";	
			}
			else
			{
				echo "Er is een fout opgetreden bij het verzenden van de email";
			}
			##header("refresh:100;url=".$cfg['url']."");##
		}
	}
	if($formulier)
	{

###################	
## het formulier ##	
###################
	?>
	
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <link href="style.css" rel="stylesheet" type="text/css" />
        
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
        <meta http-equiv="Content-Language" content="nl" />
    </head>
    
    <body>
    <div id="container">   
    <?php
	if(isset($errors)) {
		echo $errors;
	}
	?>

        <form method="post" action="<?php $_SERVER['PHP_SELF']; ?>">
        <label <?php if(isset($fout['text']['datum_aankomst'])) { echo 'class="fout"'; } ?>>Datum aankomst:</label>
        <input type="text" id="nieuw" name="datum_aankomst" maxlength="40" <?php if(isset($fout['input']['datum_aankomst'])) { echo 'class="fout'; } ?> value="<?php if (!empty($datum_aankomst)) { echo stripslashes($datum_aankomst); } ?>" size="36"/><br />
        <label <?php if(isset($fout['text']['datum_vertrek'])) { echo 'class="fout"'; } ?>>Datum vertrek:</label>
        <input type="text" id="nieuw" name="datum_vertrek" maxlength="40" <?php if(isset($fout['input']['datum_vertrek'])) { echo 'class="fout'; } ?> value="<?php if (!empty($datum_vertrek)) { echo stripslashes($datum_vertrek); } ?>" size="36"/><br />
<i>Inchecken tussen 16u00u en 18u00, anders even telefonisch melden.</i>
<h4>Contactpersoon</h4>
        <label <?php if(isset($fout['text']['naam'])) { echo 'class="fout"'; } ?>>Naam:</label>
        <input type="text" id="naam" name="naam" maxlength="30" <?php if(isset($fout['input']['naam'])) { echo 'class="fout"'; } ?> value="<?php if (!empty($naam)) { echo stripslashes($naam); } ?>"size="36" /><br />
        <label <?php if(isset($fout['text']['adres'])) { echo 'class="fout"'; } ?>>Adres:</label>
        <input type="text" id="adres" name="adres" maxlength="30" <?php if(isset($fout['input']['adres'])) { echo 'class="fout"'; } ?> value="<?php if (!empty($adres)) { echo stripslashes($adres); } ?>"size="36" /><br />
        <label <?php if(isset($fout['text']['postcode'])) { echo 'class="fout"'; } ?>>Postcode:</label>
        <input type="text" id="postcode" name="postcode" maxlength="30" <?php if(isset($fout['input']['postcode'])) { echo 'class="fout"'; } ?> value="<?php if (!empty($postcode)) { echo stripslashes($postcode); } ?>"size="36" /><br />
        <label <?php if(isset($fout['text']['plaats'])) { echo 'class="fout"'; } ?>>Plaats / Land:</label>
        <input type="text" id="plaats" name="plaats" maxlength="30" <?php if(isset($fout['input']['plaats'])) { echo 'class="fout"'; } ?> value="<?php if (!empty($plaats)) { echo stripslashes($plaats); } ?>"size="36" /><br />
        <label <?php if(isset($fout['text']['telefoon'])) { echo 'class="fout"'; } ?>>Telefoonnummer:</label>
        <input type="text" id="telefoon" name="telefoon" maxlength="30" <?php if(isset($fout['input']['telefoon'])) { echo 'class="fout"'; } ?> value="<?php if (!empty($telefoon)) { echo stripslashes($telefoon); } ?>"size="36" /><br />
        <label <?php if(isset($fout['text']['email'])) { echo 'class="fout"'; } ?>>Email:</label>
        <input type="text" id="email" name="email" maxlength="255" <?php if(isset($fout['input']['email'])) { echo 'class="fout"'; } ?> value="<?php if (!empty($email)) { echo stripslashes($email); } ?>"size="36" /><br />
<h4>Groep</h4>
        <label <?php if(isset($fout['text']['aantal_personen'])) { echo 'class="fout"'; } ?>>Aantal personen:</label>
        <input type="text" id="aantal_personen" name="aantal_personen" maxlength="30" <?php if(isset($fout['input']['aantal_personen'])) { echo 'class="fout"'; } ?> value="<?php if (!empty($aantal_personen)) { echo stripslashes($aantal_personen); } ?>"size="36" /><br />
        <label <?php if(isset($fout['text']['samenstelling'])) { echo 'class="fout"'; } ?>>Samenstelling groep:</label>
        <input type="text" id="samenstelling" name="samenstelling" maxlength="30" <?php if(isset($fout['input']['samenstelling'])) { echo 'class="fout"'; } ?> value="<?php if (!empty($samenstelling)) { echo stripslashes($samenstelling); } ?>"size="36" /><br />
<i>A.u.b. aangeven : m/v - stel/single</i>
<h4>Restaurant</h4>
        <label <?php if(isset($fout['text']['ontbijt'])) { echo 'class="fout"'; } ?>>Ontbijt:</label>
        <input type="text" id="ontbijt" name="ontbijt" maxlength="30" <?php if(isset($fout['input']['ontbijt'])) { echo 'class="fout"'; } ?> value="<?php if (!empty($ontbijt)) { echo stripslashes($ontbijt); } ?>"size="36" /><br />
        <label <?php if(isset($fout['text']['alacarte'])) { echo 'class="fout"'; } ?>>À la carte:</label>
        <input type="text" id="alacarte" name="alacarte" maxlength="30" <?php if(isset($fout['input']['alacarte'])) { echo 'class="fout"'; } ?> value="<?php if (!empty($alacarte)) { echo stripslashes($alacarte); } ?>"size="36" /><br />
        <label <?php if(isset($fout['text']['dagmenu'])) { echo 'class="fout"'; } ?>>Dagmenu:</label>
        <input type="text" id="dagmenu" name="dagmenu" maxlength="30" <?php if(isset($fout['input']['dagmenu'])) { echo 'class="fout"'; } ?> value="<?php if (!empty($dagmenu)) { echo stripslashes($dagmenu); } ?>"size="36" /><br />
        <label <?php if(isset($fout['text']['speksteengrillen'])) { echo 'class="fout"'; } ?>>Speksteengrillen:<br/>
		(min.4 pers.)</label><input type="text" id="dagmenu" name="speksteengrillen" maxlength="30" <?php if(isset($fout['input']['speksteengrillen'])) { echo 'class="fout"'; } ?> value="<?php if (!empty($speksteengrillen)) { echo stripslashes($speksteengrillen); } ?>"size="36" /><br /><br />
        <label <?php if(isset($fout['text']['speenvarken'])) { echo 'class="fout"'; } ?>>Speenvarken a/h spit:<br /> (min.15 pers.)</label>
        <input type="text" id="speenvarken" name="speenvarken" maxlength="30" <?php if(isset($fout['input']['speenvarken'])) { echo 'class="fout"'; } ?> value="<?php if (!empty($speenvarken)) { echo stripslashes($speenvarken); } ?>"size="36" /><br /><br />
        <label <?php if(isset($fout['text']['BBQ'])) { echo 'class="fout"'; } ?>>B.B.Q.:<br /> (min.4 pers.)</label>
        <input type="text" id="BBQ" name="BBQ" maxlength="30" <?php if(isset($fout['input']['BBQ'])) { echo 'class="fout"'; } ?> value="<?php if (!empty($BBQ)) { echo stripslashes($BBQ); } ?>"size="36" /><br /><br/>
		<i>A.u.b. aangeven: ja / nee of laat veld leeg<br>
		Ook graag hieronder extra aangeven indien iemand een dieet volgt</i>
		<br><br>     
        <label <?php if(isset($fout['text']['opmerking'])) { echo 'class="fout"'; } ?>>Opmerking:</label>
        <textarea id="opmerking" name="opmerking" <?php if(isset($fout['input']['opmerking'])) { echo 'class="fout"'; } ?> cols="35" rows="3"><?php if (!empty($opmerking)) { echo stripslashes($opmerking); } ?></textarea><br /><br />

		<?php
        if($cfg['CAPTCHA'])
        {
        ?>
        <label>Code:</label>
        <img style="margin-left:3px" src="captcha.php" alt="" /><br />
        
        <label <?php if(isset($fout['text']['code'])) { echo 'class="fout"'; } ?>>Vul code in:</label>
        <input type="text" id="code" name="code" maxlength="4" size="4" <?php if(isset($fout['input']['code'])) { echo 'class="captcha fout"'; } ?> /><br />
        <?php 
        }
        ?>
        <label for="stuurkopie">Stuur mij een kopie</label><input type="checkbox" id="stuurkopie" name="stuurkopie" value="1" /><br />
        
        <label></label>
        <input type="submit" id="verzenden" name="verzenden" value="Verzenden" />
        <input type="submit" id="wis" name="wis" value="Wis velden" />
        </form>
	</div>
        
</body>   
</html>
	<?php
	}
}
else 
{
	echo "
	<p>
	U kunt maar eens in de ".$cfg['spam']." minuten een e-mail versturen!<br />
	</p>";
    ##header("refresh:100;url=".$cfg['url']."");##
}
?>


Graag de relevante code (tot ongeveer 20 regels) tussen codetags. Zie ook het opmaakcodeoverzicht in de Veelgestelde vragen.
Overigens; bij relaod en opnieuw trachten te versturen wordt deze geblokkeerd omdat er slechts 1 x per 2 minuten een bericht mag worden verzonden.

[size=xsmall]Toevoeging op 16/09/2021 12:07:43:[/size]

...sorry, ik mis de "veelgestelde vragen"...

[size=xsmall]Toevoeging op 16/09/2021 12:12:21:[/size]

- Ariën - op 16/09/2021 11:59:29

Graag de relevante code (tot ongeveer 20 regels) tussen codetags. Zie ook het opmaakcodeoverzicht in de Veelgestelde vragen.

...sorry, ik kan "veelgestelde vragen"niet vinden, noch"opmaak codeoverzicht"
Hele script telt 386 regels(?)
Onderaan staat de link [ur;=https://www.phphulp.nl/veel-gestelde-vragen/]daarheen[/url]. :-)
Graag de code wat compacter maken tot +/- 20 regel, we willen graag helpen, maar het is erg veel werk voor ons om straks tegen de 400 regels door te spitten.
maak een script genaamd success.php
met als inhoud

                <p>
                Uw bericht is succesvol verzonden, er word zo snel mogelijk gereageerd.<br />
                <br />
                Met vriendelijke groeten,<br />
                <b>Jan en Hilly Koelewijn</b><br />
                <b>".$cfg['naam']."</b>
                </p>


En op regel 265 vervang je de gelijkluidende echo door

<?php header('Location: success.php', true, 303); ?>

Daarmee voorkom je dat iemand op Refresh kan klikken. (of ja, hij klikt wel op refresh,maar verstuurt dan niet meer opnieuw de formdata.)

[size=xsmall]Toevoeging op 17/09/2021 13:28:17:[/size]

aanvulling: ik zie nog een $cfg in die html staan.
Dat moet je dan nog even oplossen.
Lieden, bedankt voor jullie input.
Ik heb nu 2 wijzigingen doorgevoerd:
1: vóór start script een stukje wat zou moeten voorkomen dat na refresh het formulier nogmaals verzonden wordt
2: De reactie van hotelier als nieuw php-tje zodat er een "ander"script draait.
"cfg['naam']" simpelweg vervangen door de naam.
Script wordt zondag op maandag ge-upload en dan zullen we week eens afwachten; kijken wat er gebeurd.
Fijn om te horen dat je het script aangepast hebt.
Ik heb je vorige bericht even aangepast met code-tags en wat uitleg. Lees graag even het [color=red]rode[/color] blok onder je bericht.
Ariën, bedankt voor je moeite én ik heb het blok gelezen.

Reageren