Hey,

Ik krijg een foutmelding bij het versturen van een contactform in IE. Na het drukken op de verzendknop, komt er een scherm naar boven "bericht van webpagina" waar de volledige html broncode van de contact-pagina in vermeld staat. Als je dan op OK duwt, ga je alsnog naar de bedankt-pagina, en wordt de vraag doorgestuurd. Iemand raad hoe ik dit vervelend foutief pop-up scherm in IE kan kwijt raken?

Dit is de code:


Contactform:

<form action="php/contact.php" method="post" id="frmContact">
<h5>Bedrijfsnaam *</h5>
<input name="txtBedrijfsnaam" type="text" class="txbx" value="" /><br />
<h5>Contactpersoon *</h5>
<input name="txtName" type="text" class="txbx" value="" /><br />
<h5>Email *</h5>
<input name="txtEmail" type="text" class="txbx" value="" /><br />
<h5>Telefoon of GSM *</h5>
<input name="txtTelefoon" type="text" class="txbx" value="" /><br />
<h5>BTW-nummer *</h5>
<input name="txtBTW" type="text" class="txbx" value="" /><br />
<h5>Vraag betreft *</h5>
<select name="txtSubject" id="myOpt" class="txbx">
  <option value="Aanvraag algemene informatie">Aanvraag algemene informatie</option>
  <option value="Aanvraag documentatie">Aanvraag documentatie</option>
  <option value="Aanvraag wisselstukken">Aanvraag wisselstukken</option>
  <option value="Aanvraag log-in webshop">Aanvraag log-in webshop</option>
  <option value="Aanvraag verkoopcondities">Aanvraag verkoopcondities</option>
  <option value="Nieuwsbrief of Promotie">Nieuwsbrief of Promotie</option>
  <option value="Andere vraag">Andere vraag</option>
</select> 
<div class="erabox">
<h5>Uw vraag </h5>
<textarea name="txtText" class="txbx era" ></textarea><br />
<p>Velden met een * zijn verplicht.</p>
<input type="submit" class="sendbtn" name="btnSend" id="btnSend" value="Verzenden">

<div id="spanMessage">
</div>
</div>
</form>


Contact.php:

<?php
include_once './lib.php';
include_once './config.php';
if(!isPostBack()) die('Please send contact form via POST method...');

// Email address verification, do not edit.
function isEmail($Email) {
	return(preg_match("/^[-_.[:alnum:]]+@((([[:alnum:]]|[[:alnum:]][[:alnum:]-]*[[:alnum:]])\.)+(ad|ae|aero|af|ag|ai|al|am|an|ao|aq|ar|arpa|as|at|au|aw|az|ba|bb|bd|be|bf|bg|bh|bi|biz|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|com|coop|cr|cs|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|edu|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gh|gi|gl|gm|gn|gov|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|in|info|int|io|iq|ir|is|it|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|mg|mh|mil|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|museum|mv|mw|mx|my|mz|na|name|nc|ne|net|nf|ng|ni|nl|no|np|nr|nt|nu|nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|pro|ps|pt|pw|py|qa|re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw)$|(([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5])\.){3}([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5]))$/i",$Email));
}

$Name = htmlspecialchars($_POST['txtName']);
$Email = htmlspecialchars($_POST['txtEmail']);
$Subject = htmlspecialchars($_POST['txtSubject']);;
$preText .= "<strong>Bedrijfsnaam:</strong> ".htmlspecialchars($_POST['txtBedrijfsnaam'])."<br />";
$preText .= "<strong>Contactpersoon:</strong> $Name <br />";
$preText .= "<strong>Email:</strong> $Email <br />";
$preText .= "<strong>Telefoon:</strong> ".htmlspecialchars($_POST['txtTelefoon'])."<br />";
$preText .= "<strong>BTW:</strong> ".htmlspecialchars($_POST['txtBTW'])."<br />";
$preText .= "<strong>Vraag betreft:</strong> ".htmlspecialchars($_POST['txtSubject'])."<br />";
$preText .= "<strong>Vraag:</strong><br />";
$Text = htmlspecialchars($_POST['txtText']);

$Text = $preText . $Text;

if(!sendmail::send($Email , $contactEmail , $Text , $Subject ));
   header('Location: http://www.xxx.be/xxx/bedankt.html');?>


Config.php:

<?php
// Write contact email reciever here
$contactEmail = "[email protected]";  
$email_subject = "$myOpt";
// Write Subscribe email reciever here
$subscribeEmail = "[email protected]";

?>


Lib.php:

<?php
class sendmail
{	public static function send($from , $to , $message, $subject)
	{
		$headers  = 'MIME-Version: 1.0' . "\r\n";
		$headers .= 'Content-type: text/html; charset=UTF-8' . "\r\n";

		$headers .= "From:" . $from;
		if(mail($to,$subject,$message,$headers))
		return true;
		else
		return false;
	}
}

function checkEmailAddress($email){
	return preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/",$email);
}
function isPostBack()
{
return ($_SERVER['REQUEST_METHOD'] == 'POST');
}
?>


Wel grappig om 2 niet gelijke controles te gebruiken voor de syntax van een mailadres, en dan beide niet waterdicht
Ivo P op 02/04/2014 22:04:09

Wel grappig om 2 niet gelijke controles te gebruiken voor de syntax van een mailadres, en dan beide niet waterdicht


en dat terwijl het veel makkelijker kan:
<?php
if(!filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo "Dit is geen correct e-mailadres";
}
?>

Maar het probleem met de popup / alert zal vast door een stukje javascript veroorzaakt worden. Wellicht kun je dat eens posten?
niet helemaal, want dan wordt ook bijvoorbeeld "admin@localhost" geaccepteerd als mail adres.

http://wiki.pfz.nl/invoer-validatie/#regular-expressions-is-het-een-geldig-email-adres

Daar wordt aangegeven om nog een controle met een preg_match te doen.


Daar wordt nog gebruik gemaakt van {2,6} voor de top level. Dat is met de komst dit jaar van TLD's als .academy, .builders en .technology achterhaald.

Ik zou dat aanpassen naar iets als "2 of meer tekens in een tld."

Ik zal dadelijk ook het wiki artikel eens aanpassen naar de huidige tld's (al wordt daar al wel op vooruit gelopen).
In elk geval is het opsommen van alle mogelijke tld's als controle niet zo handig. Zo'n lijst kan per dag achterhaald raken door nieuwe extensies of nieuw ontstane landen of gebiedsdelen.
Ivo, het ligt aan de PHP versie die je gebruikt: http://3v4l.org/pHGnQ
PHP 5.2.9 t/m PHP 5.2.13 en PHP 5.3.0 t/m PHP 5.3.2 vinden foo@localhost wel geldig
PHP 5.2.0 t/m 5.2.8 en PHP 5.2.14 t/m 5.2.17 en PHP 5.3.3 t/m 5.6.0 vinden foo@localhost niet geldig.

Ik mag hopen dat niemand nog iets lager dan PHP 5.3.3 op zijn host heeft staan en mochten ze dat wel hebben, dan raad ik ze zeker aan de beheerder te vragen om te updaten en anders naar een andere host over te stappen.
ik word oud :-)

Ik heb me steeds afgevraagd waarom dat filter die beperking kende. Maar dat is dus verbeterd!
Dit is de javascript ...



/* ---------------------------------------------------------------------- */
/*	Contact Form
/* ---------------------------------------------------------------------- */

$(function(){

$("#btnSend").click(function(){

$.ajax({type:'POST', url: 'php/contact.php', data:$('#frmContact').serialize(), success: function(response) {
$("#spanMessage").html('Please Wait...');


	 if(parseInt(response)>0)
	   {
		 $("#spanMessage").html('<div class="alert alert-success"><button type="button" class="close" data-dismiss="alert">&times;</button><strong>Bedankt voor uw vraag!</strong></div>');
	   }
	   else{
		 alert(response);
		 $("#spanMessage").html('<div class="alert alert-error"><button type="button" class="close" data-dismiss="alert">&times;</button><strong>Er is iets verkeerd gegaan! </strong> Probeer opnieuw.</div>');
	   }
	   
		 
}});


});



});
 


[size=xsmall]Toevoeging op 03/04/2014 20:04:04:[/size]

Misschien heeft het iets te maken met die >0 die in de js staat? In de originele versie stond er "1" als echo in de contact.php, nu verwijs ik in de contact.php naar een andere bedankingspagina. Alleszinds het bedankingsberichtje van in de js wordt niet getoond, na het drukken op verzenden, kom je op de bedankingspagina terecht. (behalve dus in IE met een vervelende alert).
Ik heb het vermoeden dat jij dit script helemaal niet wilt. Jij wilt toch gewoon dat als er op verzenden gedrukt wordt er een nieuwe pagina wordt ingeladen waarbij de gegevens uit het formulier naar de server worden verstuurd?
Jawel, het scriptje is super, alleen gaat er telkens iets mis in IE. Het is heel vervelend en komt niet professioneel over als je voortdurend die alert krijgt bij het verzenden. Ik vraag me gewoon af hoe ik dit kan verwijderen?
die alert lijkt volgens jouw javascript te verschijnen als
if(parseInt(response)>0) niet geldt:

dus response wordt geparsed naar een in kleiner of gelijk aan 0.

Dus de vraag is dan, wat response eigenlijk is.

Je doet al een alert(response): dus wat is de inhoud van response en in hoeverre lijkt dat op een geheel getal groter dan 0?


[size=xsmall]Toevoeging op 04/04/2014 11:07:25:[/size]

Dit is de alert die ik krijg in IE. In safari etc werkt het prima.
Misschien moet ik die response in de js weghalen omdat ik in de contact.php verwijs naar een aparte pagina?

 
if(!sendmail::send($Email , $contactEmail , $Text , $Subject ));
   header('Location: http://www.xxx.be/xxx/bedankt.html');?>

Reageren