PHP email foutmelding(en)

Status
Niet open voor verdere reacties.

MvD010

Gebruiker
Lid geworden
22 apr 2012
Berichten
20
Ik heb een aantal sites bezocht en geprobeerd de oplossing te vinden, maar helaas staat er zoveel dat het mij duizelt welke methode bij mij werkt. Ik heb helaas niet veel verstand van PhP. Ik had een template gekocht waarvan de mailer de volgende foutmeldingen geeft:

Deprecated: Function ereg() is deprecated in /public/sites/www.sintercity.nl/sendmail.php on line 57

Deprecated: Function eregi() is deprecated in /public/sites/www.sintercity.nl/sendmail.php on line 64

Deprecated: Function ereg() is deprecated in /public/sites/www.sintercity.nl/sendmail.php on line 71

Ik weet dat de functie ereg en eregi verouderd is en niet meer wordt gebruikt. Ik weet alleen niet hoe ik het kan vervangen. Ik heb zelf wat opties geprobeerd met preg_match maar krijg dan veel meer foutmeldingen. Hieronder de weergave van de regels uit de sendmail.php

57 } elseif ( ereg( "[][{}()*\\^$|+`~!@#%&+_+-+?+/]", $_REQUEST['name'] ) ) {

64 } elseif ( !eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$", $_REQUEST['mail']) ) {

71 } elseif ( ereg( "[][{}()*+.\\^$|]", $_REQUEST['subject'] ) ) {

Wie helpt me om ervoor te zorgen dat de mailer niet de foutmeldingen geeft? Overigens wordt de mail wel verstuurd ondanks de foutmeldingen!!

Super bedankt alvast.
 
vervang ereg of eregi door preg_match
dat is reguliere expressie. die kijkt of er een bepaald patroon is in een string een stuk tekst.
dit kost een hoop tijd. vooral omdat ereg wel erg veel tijd kost hebben ze die uit de laatste versies van php gehaald.
als vervanging kun je dus gewoon preg_match gebruiken is sneller dan eregi of ereg.
 
[table="width: 500, class: dotted"][tr][td]POSIX[/td][td]PCRE[/td][/tr]
[tr][td]ereg_replace()[/td][td]preg_replace()[/td][/tr]
[tr][td]ereg()[/td][td]preg_match()[/td][/tr]
[tr][td]eregi_replace()[/td][td]preg_replace()[/td][/tr]
[tr][td]eregi()[/td][td]preg_match()[/td][/tr]
[tr][td]split()[/td][td]preg_split()[/td][/tr]
[tr][td]spliti()[/td][td]preg_split()[/td][/tr]
[tr][td]sql_regcase()[/td][td]No equivalent[/td][/tr][/table]
http://nl.php.net/manual/en/reference.pcre.pattern.posix.php
 
Zoals ik dus al aangaf kan iedereen wel zeggen dat je ereg zomaar kunt vervangen door preg_match, maar dat gaat dus niet werken want als ik de code verander krijg ik dus allerlei nieuwe foutmeldingen. Ik heb regel 57:

57 } elseif ( ereg( "[][{}()*\\^$|+`~!@#%&+_+-+?+/]", $_REQUEST['name'] ) ) {

verandert in:

57 } elseif (preg_match("[][{}()*\\^$|+`~!@#%&+_+-+?+/]", $_REQUEST['name'] ) ) {

Na deze verandering krijg ik de onderstaande foutmelding:

Warning: preg_match() [function.preg-match]: Compilation failed: nothing to repeat at offset 9 in /public/sites/www.sintercity.nl/sendmail.php on line 57

Wie kan helpen de exacte code te geven??
 
Werkt het zo wel:
PHP:
} elseif (preg_match("/[][{}()*\\^$|+`~!@#%&+_+-+?+/]/", $_REQUEST['name'] ) ) {
Met een slash ('/') aan het begin en einde van de regex (dat moet namelijk).
 
if(!preg_match('/^[0-9]{4}[A-Za-z]{2}$/',$str))
{

}
dit is een postcode valideren. $ aan het eind betekent dat hij op 2 letters moet eindigen. dus /^$/
// moet altijd de rest niet.
 
Zolang je zelf niet weet waarop de ereg(i) expressie controleert kun je hem inderdaad niet zomaar overnemen.

Waarom zit er een expressie op de naam? Waarom een op het onderwerp?
Mijn inziens wil je daarbij alleen controleren of ze niet leeg zijn en minimaal x tekens bevatten.
Dan is een expressie erg overbodig want dat kan prima met strlen() en empty().

Voor het controleren van een geldig e-mailadres is juist wel een expressie handiger.
Dat wiel is allang uitgevonden en een zoekactie op "regexp email" zal dan ook wel redelijk wat mogelijkheden bieden.

Verder stel je hier een vraag maar verwacht je vervolgens dat wij het probleem oplossen.
In plaats daarvan kun je ook jezelf gaan verdiepen in PCRE expressies.
 
Jammer dat je toch altijd van dit soort hatelijke opmerkingen krijgt. Niet iedereen is zo goed in php en als je goed gelezen had, heb ik gewoon een template gekocht in de hoop dat alles zou werken. Als dan blijkt dat er in de php code van de mailer verouderde taal wordt gebruikt ga je te raden op een forum. Dat is precies wat ik heb gedaan en nog steeds doe. Alle hulp is daarbij welkom. Een opmerking dat ik me dan moet gaan verdiepen in PCRE expressies (wat dat ook moge zijn) heeft dan weinig nut.
Het probleem blijft helaas bestaan, dus doe ik nog één poging. Ik heb de verschillende adviezen opgevolgd en regel 57 verandert in:

} elseif (preg_match("/(^[][{}()*\\^$|+`~!@#%&+_+-+/]/", $_REQUEST['name'] ) ) {

en helaas ook dit helpt niet want krijg dan de volgende foutmelding:

Warning: preg_match() [function.preg-match]: Compilation failed: missing ) at offset 28 in /public/sites/www.sintercity.nl/sendmail.php on line 57

Wat ik hieruit begrijp is dat ik een ) mis, maar waar wordt die dan geplaatst zonder dat ik meer foutmeldingen ga krijgen.
 
} elseif (preg_match("/(^[][{}()*\\^$|+`~!@#%&+_+-+/]/", $_REQUEST['name'] ) ) {
geen hatelijke opmerkingen denk ik hoor. soms dan lijkt iets voor een php programmeur heel vanzelfsprekend. dan denken mensen van dat had je zelf kunnen bedenken.

PHP:
}elseif(preg_match("/^[]{}()*\\^$|+`~!@#%&+_+-+/",$_REQUEST['name'])){
zo zou het goed moeten zijn.
 
Helaas de volgende foutmelding verschijnt :(

Code:
Warning: preg_match() [function.preg-match]: Compilation failed: missing terminating ] for character class at offset 25 in /public/sites/www.sintercity.nl/sendmail.php on line 57
 
Ik heb voor de volledigheid maar even alle stukjes gekopieerd waarin preg_match wordt gebruikt. Het lijkt toch wel wat moeilijker dan het aanvankelijk leek.

Code:
//Validate input data.
if ( empty($_REQUEST['last']) ) {
if ( empty($_REQUEST['name']) ) {
	$pass = 1;
	$alert .= "<li>" . $emptyname . "</li>";
} elseif (preg_match("/^[]{}()*\\^$|+`~!@#%&+_+-+/",$_REQUEST['name'] ) ) {
	$pass = 1;
	$alert .= "<li>" . $alertname . "</li>";
}
if ( empty($_REQUEST['mail']) ) {
	$pass = 1;
	$alert .= "<li>" . $emptymail . "</li>";
} elseif (!preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$/", $_REQUEST['mail']) ) {
	$pass = 1;
	$alert .= "<li>" . $alertmail . "</li>";
}
if ( empty($_REQUEST['subject']) ) {
	$pass = 1;
	$alert .= "<li>" . $emptysubject . "</li>";
} elseif (preg_match("/[][{}()*+.\\^$|]/", $_REQUEST['subject'] ) ) {
	$pass = 1;
	$alert .= "<li>" . $alertsubject . "</li>";
 
Hatelijk is toch aardig overdreven, waarschijnlijk ligt het aan mijn denkwijze dat ik graag wil weten hoe iets werkt als ik het gebruik.

Wat zit er in de variabelen $alertname en $alertmail? Misschien helpt ons dat meer te achterhalen waar de expressie precies voor is. Er zitten namelijk aardig wat tekens in die voor een expressie gebruikt worden. Zo geven blokhaken een bereik aan en accolades een aantal tekens.

Het lijkt haast alsof de tekens in die rij niet voor mogen komen. Klopt dat?
Verder is het raadzaam alle $_REQUEST-variabelen te wijzigen naar $_POST i.v.m. veiligheid.

Probeer dan dit eens:
PHP:
preg_match('/^[^a-zA-Z\s]+$/', $_POST['name'])
{
}
Deze gaat af wanneer de naam iets anders dan a t/m z (+ hoofdletters) of een spatie bevat.
 
Ja het is voor een PHP-er erg eenvoudig, maar zoals ik al eerder aangaf ik heb er weinig tot geen verstand van. Heb een template gekocht en krijg nu al dit soort foutmeldingen, waar ik helemaal gek van wordt. Het kwam een beetje over alsof iedereen dat toch zou moeten weten, maar goed. Misschien handig als ik het hele bestand even hier neer zet. Kijken of me dat lukt, want ik blijf fout na foutmelding krijgen!

PHP:
<?php 
/*--------------------------------------------------------------------------------------------------------
Start Captcha Code Session
--------------------------------------------------------------------------------------------------------*/
session_start();

if(isset($_POST['submit']))
{
	if(empty($_SESSION['woow_code'] ) ||
	  strcasecmp($_SESSION['woow_code'], $_POST['woow_code']) != 0)
	{
	//Note: the captcha code is compared case insensitively.
	//if you want case sensitive match, update the check above to
	// strcmp()
		$errors .= $alertcode;
	}
}

/*--------------------------------------------------------------------------------------------------------
Set the AJAX Messages
--------------------------------------------------------------------------------------------------------*/
$errormessage = 'Oeps! Er is iets niet goed gegaan..!'; 
$hiddenfield = "Je hebt een verborgen veld ingevuld! Probeer het opnieuw!";

$emptyname =  'Vul hier je naam in!';
$emptymail = 'Vul hier je emailadres in!';
$emptysubject = 'Vul hier het onderwerp in!';
$emptymessage = 'Schrijf hier je vraag of opmerking!';
$emptycode = 'Vul hier de code in!';
$alertname =  'Gebruik alleen letters om je naam in te vullen!';
$alertmail = 'Vul je email in volgens dit voorbeeld: <i>naam@naam.com</i>.';
$alertsubject = 'Gebruik alleen letters om het onderwerp in te vullen!';
$alertcode = 'Verkeerde code, probeer opnieuw!';

$thanks = 'Jouw bericht is verzonden. Wij zullen jouw bericht zo spoedig mogelijk beantwoorden. Hartelijk dank..!';

/*--------------------------------------------------------------------------------------------------------
Begin AJAX contact form validation
--------------------------------------------------------------------------------------------------------*/

//Setting used variables.
$alert = '';
$pass = 0;

// Sanitizing the data.
function clean_var($variable) {
    $variable = strip_tags(stripslashes(trim(rtrim($variable))));
  return $variable;
}

//Validate input data.
if ( empty($_REQUEST['last']) ) {
if ( empty($_REQUEST['name']) ) {
	$pass = 1;
	$alert .= "<li>" . $emptyname . "</li>";
} elseif (preg_match("/^[]{}()*\\^$|+`~!@#%&+_+-+/",$_REQUEST['name'] ) ) {
	$pass = 1;
	$alert .= "<li>" . $alertname . "</li>";
}
if ( empty($_REQUEST['mail']) ) {
	$pass = 1;
	$alert .= "<li>" . $emptymail . "</li>";
} elseif (!preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$/", $_REQUEST['mail']) ) {
	$pass = 1;
	$alert .= "<li>" . $alertmail . "</li>";
}
if ( empty($_REQUEST['subject']) ) {
	$pass = 1;
	$alert .= "<li>" . $emptysubject . "</li>";
} elseif (preg_match("/[][{}()*+.\\^$|]/", $_REQUEST['subject'] ) ) {
	$pass = 1;
	$alert .= "<li>" . $alertsubject . "</li>";
}
if ( empty($_REQUEST['message']) ) {
	$pass = 1;
	$alert .= "<li>" . $emptymessage . "</li>";
}
if ( empty($_REQUEST['woow_code']) ) {
	$pass = 1;
	$alert .= "<li>" . $emptycode . "</li>";
} elseif (($_POST['woow_code']) != $_SESSION['woow_code']) {
	$pass = 1;
	$alert .= "<li>" . $alertcode . "</li>";
}

	//If error, print the error messages.
	if ( $pass==1 ) {
		echo "<script>$(\".message\").hide(\"slow\").show(\"slow\").animate({opacity: 1.0}, 3000).hide(\"slow\"); </script>";
		echo "" . $errormessage . "";
		echo "<ul>";
		echo $alert;
		echo "</ul>";

	// If the input data is valid.
	} elseif (isset($_REQUEST['message'])) {
	    
		//Send email.
		$EmailTo = "info@sintercity.nl"; //Your email address
		$EmailFrom = Trim(stripslashes($_POST['name']));
		$Subject = Trim(stripslashes($_POST['subject']));
		$Name = Trim(stripslashes($_POST['name'])); 
		$Email = Trim(stripslashes($_POST['mail'])); 
		$Message = Trim(stripslashes($_POST['message']));
		$headers .= "From: $Email" . "\r\n";
		$Body = "";
		$Body .= "Name: ";
		$Body .= $Name;
		$Body .= "\n";
		$Body .= "Email: ";
		$Body .= $Email;
		$Body .= "\n";
		$Body .= "Subject: ";
		$Body .= $Subject;
		$Body .= "\n";
		$Body .= "Message: ";
		$Body .= $Message;
		$Body .= "\n";
		$success = mail($EmailTo, $Subject, $Body, $headers);

		//Success message. 
		echo "<script>$(\".message\").hide(\"slow\").show(\"slow\").animate({opacity: 1.0}, 5000).hide(\"slow\"); $(':input').clearForm() </script>";
		echo $thanks;
		die();
		echo "<br/><br/>" . $message;
		
	}
	
} else {
	
	echo "<script>$(\".message\").hide(\"slow\").show(\"slow\"); </script>";
	echo $hiddenfield;
	
}
?>
 
Probeer deze eens:
PHP:
<?php 
/*--------------------------------------------------------------------------------------------------------
Start Captcha Code Session
--------------------------------------------------------------------------------------------------------*/
session_start();

if(isset($_POST['submit']))
{
	if(
		empty($_SESSION['woow_code'] ) ||
		strcasecmp($_SESSION['woow_code'], $_POST['woow_code']) != 0
	)
	{
		//Note: the captcha code is compared case insensitively.
		//if you want case sensitive match, update the check above to
		// strcmp()
		$errors .= $alertcode;
	}
}

/*--------------------------------------------------------------------------------------------------------
Set the AJAX Messages
--------------------------------------------------------------------------------------------------------*/
$errormessage	= 'Oeps! Er is iets niet goed gegaan..!'; 
$hiddenfield	= 'Je hebt een verborgen veld ingevuld! Probeer het opnieuw!';

$emptyname		= 'Vul hier je naam in!';
$emptymail		= 'Vul hier je emailadres in!';
$emptysubject	= 'Vul hier het onderwerp in!';
$emptymessage	= 'Schrijf hier je vraag of opmerking!';
$emptycode		= 'Vul hier de code in!';
$alertname		= 'Gebruik alleen letters om je naam in te vullen!';
$alertmail		= 'Vul je email in volgens dit voorbeeld: <i>naam@naam.com</i>.';
$alertsubject	= 'Gebruik alleen letters om het onderwerp in te vullen!';
$alertcode		= 'Verkeerde code, probeer opnieuw!';

$thanks 		= 'Jouw bericht is verzonden. Wij zullen jouw bericht zo spoedig mogelijk beantwoorden. Hartelijk dank..!';

/*--------------------------------------------------------------------------------------------------------
Begin AJAX contact form validation
--------------------------------------------------------------------------------------------------------*/

//Setting used variables.
$alert	= '';
$pass	= 0;

// Sanitizing the data.
function clean_var($variable)
{
	$variable = strip_tags(stripslashes(trim(rtrim($variable))));
	return $variable;
}

//Validate input data.
if ( empty($_POST['last']) )
{
	if ( empty($_POST['name']) )
	{
		$pass = 1;
		$alert .= '<li>'. $emptyname .'</li>';
	}
	elseif (!preg_match('/^[a-zA-Z ]+$/',$_POST['name'] ) )
	{
		$pass = 1;
		$alert .= '<li>' . $alertname . '</li>';
	}
	if ( empty($_POST['mail']) )
	{
		$pass = 1;
		$alert .= '<li>' . $emptymail . '</li>';
	}
	elseif (!preg_match('/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$/', $_POST['mail']) )
	{
		$pass = 1;
		$alert .= '<li>' . $alertmail . '</li>';
	}
	if ( empty($_POST['subject']) )
	{
		$pass = 1;
		$alert .= '<li>' . $emptysubject . '</li>';
	}
	elseif (!preg_match('/^[a-zA-Z ]+$/', $_POST['subject'] ) )
	{
		$pass = 1;
		$alert .= '<li>' . $alertsubject . '</li>';
	}
	if ( empty($_POST['message']) )
	{
		$pass = 1;
		$alert .= '<li>' . $emptymessage . '</li>';
	}
	if ( empty($_POST['woow_code']) )
	{
		$pass = 1;
		$alert .= '<li>' . $emptycode . '</li>';
	}
	elseif (($_POST['woow_code']) != $_SESSION['woow_code'])
	{
		$pass = 1;
		$alert .= '<li>' . $alertcode . '</li>';
	}
	//If error, print the error messages.
	if ( $pass == 1 )
	{
		echo '<script>$(".message").hide("slow").show("slow").animate({opacity: 1.0}, 3000).hide("slow"); </script>';
		echo '' . $errormessage . '';
		echo '<ul>';
		echo $alert;
		echo '</ul>';
	// If the input data is valid.
	}
	elseif (isset($_POST['message']))
	{
		//Send email.
		$EmailTo	= "info@sintercity.nl"; //Your email address
		$EmailFrom	= clean_var($_POST['name']);
		$Subject	= clean_var($_POST['subject']);
		$Name		= clean_var($_POST['name']);
		$Email		= clean_var($_POST['mail']);
		$Message	= clean_var($_POST['message']);
		$headers 	.= "From: $Email" . "\r\n";
		$Body		.= "Name: ". $Name ."\n";
		$Body		.= "Email: ". $Email ."\n";
		$Body		.= "Subject: ". $Subject ."\n";
		$Body		.= "Message: ". $Message ."\n";
		$success	= mail($EmailTo, $Subject, $Body, $headers);
		//Success message. 
		echo '<script>$(".message").hide("slow").show("slow").animate({opacity: 1.0}, 5000).hide("slow"); $(":input").clearForm();</script>';
		echo $thanks;
		die();
		echo "<br/><br/>" . $message;
	}
}
else
{
	echo '<script>$(".message").hide("slow").show("slow"); </script>';
	echo $hiddenfield;
}
?>
 
YESSSSS, ik weet niet wat je gedaan hebt, maar de mailer geeft geen foutmeldingen meer !!!!!!!!!!!!!

Het enige wat nu nog gebeurt is dat het mail formulier niet sluit, maar ik weet niet of dat in die code stond. Normaal gesproken ging het formulier weg!!

Maar helemaal geweldig dat het nu dus werkt. Dit had ik natuurlijk zelf NOOIT gevonden.
 
Laatst bewerkt:
De expressies heb ik aangepast zodat ik controleert of er alleen letters in staan.

Dat het formulier niet sluit heeft waarschijnlijk met de code in regel 36 te maken.
Vermoedelijk krijg je een javascript error.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan