Beste forumleden,

OP mijn contact formulier krijg ik volgende error:

Fatal error: Uncaught Error: Call to undefined function ereg() in /customers/3/1/3//httpd.www/pages/contact.php:55
Stack trace: #0 /customers/3/1/3//httpd.www/index.php(145): require() #1 {main} thrown in /customers/3/1/3//httpd.www/pages/contact.php on line 55


Via volgende pagina (https://www.phphulp.nl/php/script/snippets/contact-script/1653/contactscript/865/)
vond ik volgend gedeelte:

// Daarna een controle met een reguliere expressie uitvoeren:
    if (ereg("^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@([a-zA-Z0-9-]+\.)+([a-zA-Z]{2,4})$", $emailadres)) {
        return TRUE;
    } 


Dit heb ik nu kunnen oplossen maar volgende error krijg ik nog steeds:

Parse error: syntax error, unexpected 'else' (T_ELSE), expecting end of file in /customers/3/1/3//httpd.www/pages/contact.php on line 124


Geen idee wat er mis zou kunnen gaan.

Mijn fout zit in lijn 124 (hier op lijn 9):

<?php
/* ..... */
if(!empty($error_msg))
	{ 
    //Een van de velden werd niet goed ingevuld 
	echo "<div class=\"style1\"><b>Het bericht kon niet worden verzonden door volgende redenen:</b></div><br>"; 
    echo $error_msg; 
    echo "<br><div class=\"style1\">Klik op <a href=javascript:history.back(1)><b>Ga terug</b></a> en vul alle velden in.</span><br><br>"; 
	}
else 
	{  
    $recipient = "[email protected]"; //Het email adres van de persoon die vragen moet ontvangen.
    $subject = "Contact."; //Subject van de mail.  
    $header = "From: " . $_POST['naam'] . "  " . $_POST['voornaam'] ." <[email protected]>\r\nReply-to: <" . $_POST['MAILFROM'] . ">";
	$mail_body = "Contact:\n----------\n\n";
	$mail_body .= "Vooraam: " . $_POST['voornaam'] . "\n"; 
	$mail_body .= "Naam: " . $_POST['naam'] . "\n";  
    $mail_body .= "E-mail: " . $_POST['MAILFROM'] . "\n";
	
	$mail_body .= "Inhoud: " . $_POST['inhoud'] . "\n";
	$mail_body .= "Onderwerp: " . $_POST['SUBJECT'] . "\n";
	$mail_body .= "IP-adres: " .$_SERVER["REMOTE_ADDR"]. "\n";
	$mail_body .= "Browser: " .$_SERVER["HTTP_USER_AGENT"]. "\n";
	$mail_body .= "Referer: " .$_SERVER["HTTP_REFERER"]. "\n";
	$mail_body .= "Host: " .$_SERVER['HTTP_HOST']. "\n";
	$mail_body .= "Tijd: " . date("d-m-Y") . " " . date("H:i") . "\n\n"; 
    $mail_body .= "Bericht:\n"; 
    $mail_body .= $_POST['field'];   
	mail($recipient, $subject, $mail_body, $header); //verzenden email
	echo "<div class=\"style1\"><b>Beste " .$_POST['naam']. ", uw bericht is succesvol verzonden.</b></div><br>
	<div class=\"style1\">Er zal zo spoedig mogelijk contact met u opgenomen worden.</div><br><br>"; 
    echo "<div class=\"style1\"><a class=\"main\" href='javascript:history.back(1)'>< Ga terug</a></div>"; 
	}
} 
else 
{ 
?> 

<form action="" method="POST" name="contact"> 
  <table border="0" align="left" width="50%" class="style1">
		    <input type='hidden' id='antispam' name='antispam' value='' />
			<script type='text/javascript'>
			document.getElementById('antispam').value='IkWilGeenSpam'; 
            </script>
    <tr>
...	
ereg() bestaat al tegenwoordig niet meer, dit moet je dus omschrijven naar preg_match.

Waar komt die else van lijn 34 t/m 36 vandaan? Die lijkt nog loos, of we missen een stuk van je code.
Ja tuurijk, is maar een deel van de code.
Het probleem me de ereg() functie is intussen opgelost.

Hier mijn volledige pagina code, het is de else op lijn 119 die voor problemen zorgt volgens de error:

<?php
if(!defined("site")) {
	echo "<br /><center>Access denied!</center> \n";
} else {
 // Start Google CAPCHA
    function post_captcha($user_response) {
        $fields_string = '';
        $fields = array(
            'secret' => '',
            'response' => $user_response
        );
        foreach($fields as $key=>$value)
        $fields_string .= $key . '=' . $value . '&';
        $fields_string = rtrim($fields_string, '&');

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, 'https://www.google.com/recaptcha/api/siteverify');
        curl_setopt($ch, CURLOPT_POST, count($fields));
        curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, True);

        $result = curl_exec($ch);
        curl_close($ch);

        return json_decode($result, true);
    }

    // Call the function post_captcha
    $res = post_captcha($_POST['g-recaptcha-response']);
	// Stop Google CAPCHA
?>
<div class="title">Contact</div><br />


<? 
$vervuild   = FALSE; // TRUE als het formulier geen fouten bevat


if(!empty($_POST['Submit']))
{ 

// START: Antie spam.
if ($_POST['antispam'] != 'IkWilGeenSpam' )
	{ $error_msg .='<div class="style1">- <b>Ik wil geen spam!</b></div>'; }
// STOP: Antie spam.

if(strlen($_POST['voornaam']) == 0)
	{ $error_msg .="<div class=\"style1\">- Voer astublieft uw voornaam in.</div>"; } 

if(strlen($_POST['naam']) == 0)
	{ $error_msg .="<div class=\"style1\">- Voer astublieft uw naam in.</div>"; } 
	
if(!ereg("^[_a-zA-Z0-9-]+(\.[*@([a-zA-Z0-9-]+)*@([a-zA-Z0-9-]+\.)+([a-zA-Z]{2,4})$", $_POST['MAILFROM']))
	{ $error_msg .="<div class=\"style1\">- Voer astublieft een geldig email adres in.</div>"; }

// Eerst een snelle controle uitvoeren: 
    // een e-mailadres moet uit minimaal 7 tekens bestaan:
    if (strlen($_POST['MAILFROM']) < 7) {
        return FALSE;
    }
    // Daarna een controle met een reguliere expressie uitvoeren:
    if (ereg("^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@([a-zA-Z0-9-]+\.)+([a-zA-Z]{2,4})$", $_POST['MAILFROM'])) {
        return TRUE;
    } else {
        return FALSE;
    }

            if (!is_email($_POST['MAILFROM'])) {
                $error_msg .= "<strong>" . htmlentities($_POST['MAILFROM']) . "</strong> is geen geldig e-mailadres. ";
                $vervuild  = TRUE;
            }
        }


if(strlen($_POST['inhoud']) == 0)
	{ $error_msg .="<div class=\"style1\">- Duid astublieft de inhoud aan.</div>"; } 

if(strlen($_POST['SUBJECT']) == 0)
	{ $error_msg .="<div class=\"style1\">- Voer astublieft uw onderwerp in.</div>"; }
 
if(strlen($_POST['field']) == 0)
	{ $error_msg .="<div class=\"style1\">- Voer astublieft uw bericht in.</div>"; } 
	
if (!$res['success'])
	{ $error_msg .="<div class=\"style1\" style=\"line-height: 16pt;\">- Vink alstublieft de CAPTCHA box aan.</div><br/>"; }
	
if(!empty($error_msg))
	{ 
    //Een van de velden werd niet goed ingevuld 
	echo "<div class=\"style1\"><b>Het bericht kon niet worden verzonden door volgende redenen:</b></div><br>"; 
    echo $error_msg; 
    echo "<br><div class=\"style1\">Klik op <a href=javascript:history.back(1)><b>Ga terug</b></a> en vul alle velden in.</span><br><br>"; 
	}
else 
	{  
    $recipient = "[email protected]"; //Het email adres van de persoon die vragen moet ontvangen.
    $subject = "Contact."; //Subject van de mail.  
    $header = "From: " . $_POST['naam'] . "  " . $_POST['voornaam'] ." <[email protected]>\r\nReply-to: <" . $_POST['MAILFROM'] . ">";
	$mail_body = "Contact:\n----------\n\n";
	$mail_body .= "Vooraam: " . $_POST['voornaam'] . "\n"; 
	$mail_body .= "Naam: " . $_POST['naam'] . "\n";  
    $mail_body .= "E-mail: " . $_POST['MAILFROM'] . "\n";
	
	$mail_body .= "Inhoud: " . $_POST['inhoud'] . "\n";
	$mail_body .= "Onderwerp: " . $_POST['SUBJECT'] . "\n";
	$mail_body .= "IP-adres: " .$_SERVER["REMOTE_ADDR"]. "\n";
	$mail_body .= "Browser: " .$_SERVER["HTTP_USER_AGENT"]. "\n";
	$mail_body .= "Referer: " .$_SERVER["HTTP_REFERER"]. "\n";
	$mail_body .= "Host: " .$_SERVER['HTTP_HOST']. "\n";
	$mail_body .= "Tijd: " . date("d-m-Y") . " " . date("H:i") . "\n\n"; 
    $mail_body .= "Bericht:\n"; 
    $mail_body .= $_POST['field'];   
	mail($recipient, $subject, $mail_body, $header); //verzenden email
	echo "<div class=\"style1\"><b>Beste " .$_POST['naam']. ", uw bericht is succesvol verzonden.</b></div><br>
	<div class=\"style1\">Er zal zo spoedig mogelijk contact met u opgenomen worden.</div><br><br>"; 
    echo "<div class=\"style1\"><a class=\"main\" href='javascript:history.back(1)'>< Ga terug</a></div>"; 
	}
} 
else 
{ 
?> 

<form action="" method="POST" name="contact"> 
  <table border="0" align="left" width="50%" class="style1">
		    <input type='hidden' id='antispam' name='antispam' value='' />
			<script type='text/javascript'>
			document.getElementById('antispam').value='IkWilGeenSpam'; 
            </script>
    <tr>
	
		<td width="30%">
		  <b>Voornaam:</b> <font color="#CC0000">*</font></td>
		<td width="20%">
		    <input name="voornaam" type="text" size="29"></td>
	</tr>
	<tr>
	
		<td width="30%">
		  <b>Naam:</b> <font color="#CC0000">*</font></td>
		<td width="20%">
		    <input name="naam" type="text" size="29"></td>
	</tr>
	<tr>
		
		<td width="30%">
		  <b>E-mail:</b> <font color="#CC0000">*</font></td>
		<td width="20%">
		    <input name="MAILFROM" type="text" size="29"></td>
	</tr>
	<tr>
		
		<td width="30%">
		  <b>Inhoud:</b> <font color="#CC0000">*</font></td>
		<td width="20%">
		<select name="inhoud">
		<option value="" selected="selected">(maak een keuze)</option>
		<option value="Andere">Andere</option>
		</select></td>
	</tr>
	<tr>
		
		<td width="30%">
		  <b>Onderwerp:</b> <font color="#CC0000">*</font></td>
		<td width="20%">
		    <input name="SUBJECT" type="text" size="29" maxlength="30"></td>
	</tr>
	<tr>
		
		<td colspan="2">
		  <b>Bericht:</b> <font color="#CC0000">*</font><br>
		   <div align="left"><textarea name="field" cols="42" rows="6"></textarea></div>
		  <br>
		  
		  <div align="right">
		  Velden met een <font color="#CC0000">*</font> zijn verplicht in te vullen.&nbsp;&nbsp;</div>

          <br />
          
		     <div align="right">
			 <input type="Submit" name="Submit" value="Verzenden">
             <noscript>
             <input type="button" name="buiten gebruik" value="Buiten gebruik!">
             </noscript>
		    &nbsp;
		      <input type="reset" name="cmdWissen" value="Wis">&nbsp&nbsp;</div></td>
	</tr>
	</table> 
</form>
<?php 
} 
?> 
<?php
}
?>
Je hebt blijkbaar een }else{ na een }else{ staan, en dat kan uiteraard niet.
Probeer het probleem eens te isoleren door wat code tijdelijk weg te halen, zodat je een betere overzicht hebt welke statements je hebt.

Je kan ook per accolade er een //comment achterzetten die vertelt waar het bij hoort, en als je netjes TAB gebruikt, moet je het ook snel kunnen zien.
Wel, ik heb een aantal keer een if voor de error messages:

if(strlen($_POST['inhoud']) == 0)
	{ $error_msg .="EROOR BERICHT"; } 


En dan een else voor de mail_body:

else 
	{  
    $recipient = "[email protected]"; //Het email adres van de persoon die vragen moet ontvangen.
    $subject = "Contact."; //Subject van de mail.  
    $header = "From: " . $_POST['naam'] . "  " . $_POST['voornaam'] ." <[email protected]>\r\nReply-to: <" . $_POST['MAILFROM'] . ">";
	$mail_body = "Contact:\n----------\n\n";
	$mail_body .= "Vooraam: " . $_POST['voornaam'] . "\n"; 
	$mail_body .= "Naam: " . $_POST['naam'] . "\n";  
    $mail_body .= "E-mail: " . $_POST['MAILFROM'] . "\n";
	
	$mail_body .= "Inhoud: " . $_POST['inhoud'] . "\n";
	$mail_body .= "Onderwerp: " . $_POST['SUBJECT'] . "\n";
	$mail_body .= "IP-adres: " .$_SERVER["REMOTE_ADDR"]. "\n";
	$mail_body .= "Browser: " .$_SERVER["HTTP_USER_AGENT"]. "\n";
	$mail_body .= "Referer: " .$_SERVER["HTTP_REFERER"]. "\n";
	$mail_body .= "Host: " .$_SERVER['HTTP_HOST']. "\n";
	$mail_body .= "Tijd: " . date("d-m-Y") . " " . date("H:i") . "\n\n"; 
    $mail_body .= "Bericht:\n"; 
    $mail_body .= $_POST['field'];   
	mail($recipient, $subject, $mail_body, $header); //verzenden email
	echo "<div class=\"style1\"><b>Beste " .$_POST['naam']. ", uw bericht is succesvol verzonden.</b></div><br>
	<div class=\"style1\">Er zal zo spoedig mogelijk contact met u opgenomen worden.</div><br><br>"; 
    echo "<div class=\"style1\"><a class=\"main\" href='javascript:history.back(1)'>< Ga terug</a></div>"; 
	}
} 


En vervolgens nog een else (en daar zit wss de fout) voor het formulier zelf:

<?php
else
{
?>
<form action="" method="POST" name="contact"> 
  <table border="0" align="left" width="50%" class="style1">
    <tr>
	
		<td width="30%">
		  <b>Voornaam:</b> <font color="#CC0000">*</font></td>
		<td width="20%">
		    <input name="voornaam" type="text" size="29"></td>
	</tr>
	<tr>
    ...

?>

Vroeger werkte dit zonder probleem.
"if" en "else" zijn toch niet veranderd in functie??
Nee, maar bij elke else hoort één if, en elke if kan maar één else hebben.

Als je meer gevallen wilt onderscheiden dan de conditie in dat ene if-statement zul je:
- ofwel meerdere condities moeten toevoegen met } elseif (<conditie #2>) {, en zo voor elke conditie een apart elseif-blok maken,
- ofwel een apart if-statement maken

Daarbij helpt het als je je code netjes inspringt, dat wil zeggen, spaties of tabs invoegt aan het begin van je regels, zodat je direct kunt zien in welk accolade-blok je zit.

PHP interesseert het geen biet wat je hiermee doet, maar als de code syntactisch niet klopt dan levert dit gewoon een foutmelding op.
De werking van if-elseif-else is overigens nooit aangepast.
Nu staat er enkel een else na een else, daarom geeft hij een error.

wat moet ik hiervan maken?

een elseif met welke conditie?
Ik heb geen zin om om dit moment +/- 200 regels door te spitten. Maar in een goede editor zoals Netbeans kan je prima zien welke statements bij elkaar horen.

Als je het niet vindt kan je proberen de code (na het maken van een backupje) te isoleren door wat statements weg te halen.
Keven Vanovertveldt op 10/01/2019 21:56:02

Het probleem me de ereg() functie is intussen opgelost.


Geen idee hoe je dat hebt opgelost, maar in je code van 10/01/2019 21:56:02 staat nog steeds ereg() functies.

Thomas van den Heuvel op 10/01/2019 23:12:04

[quote="Keven Vanovertveldt op 10/01/2019 20:53:58"]Via volgende pagina (https://www.phphulp.nl/php/script/snippets/contact-script/1653/contactscript/865/)
vond ik volgend gedeelte:

Ook code heeft een houdbaarheidsdatum. Zo is dat script 12 jaar oud. Dan is de kans aanwezig dat er verouderde / achterhaalde / niet werkende technieken in verwerkt zitten.
[/quote]
Zou om die reden dit script maar herschrijven.

Reageren