iframe og php
Hej EksperterJeg har lavet en webside som ikke skal reloades. Index siden er en lang side hvor man smooth scroller ved hjælp af anchor-links. (ret fancy).
Jeg har lavet en kontakt form i bunden. Jeg har lavet den sådan at javascript laver en "usynlig" iframe (for at undgå history) og min form sender variabler til php mailsender i iframen. Php mailsender sender en mail og hvis den bliver sendt, kalder den funktion (sendt/ikke sendt) fra index-siden og returnerer et svar på index-siden. Derved reloader index-siden ikke, og men bliver ved anchorpointen for kontakt. Smart!
Problemet er at mit php script ikke modtager variablerne rigtig.
Hver gang formen bliver processed, returnerer den ikke-sendt. Mit javascript til iframen er:
<script type="text/javascript">
var IFrameObj; // our IFrame object
function callToServer() {
if (!document.createElement) {return true};
var IFrameDoc;
var URL = 'send.php';
if (!IFrameObj && document.createElement) {
// create the IFrame and assign a reference to the
// object to our global variable IFrameObj.
// this will only happen the first time
// callToServer() is called
try {
var tempIFrame=document.createElement('iframe');
tempIFrame.setAttribute('id','RSIFrame');
tempIFrame.style.border='0px';
tempIFrame.style.width='0px';
tempIFrame.style.height='0px';
IFrameObj = document.body.appendChild(tempIFrame);
if (document.frames) {
// this is for IE5 Mac, because it will only
// allow access to the document object
// of the IFrame if we access it through
// the document.frames array
IFrameObj = document.frames['RSIFrame'];
}
} catch(exception) {
// This is for IE5 PC, which does not allow dynamic creation
// and manipulation of an iframe object. Instead, we'll fake
// it up by creating our own objects.
iframeHTML='\<iframe id="RSIFrame" style="';
iframeHTML+='border:0px;';
iframeHTML+='width:0px;';
iframeHTML+='height:0px;';
iframeHTML+='"><\/iframe>';
document.body.innerHTML+=iframeHTML;
IFrameObj = new Object();
IFrameObj.document = new Object();
IFrameObj.document.location = new Object();
IFrameObj.document.location.iframe = document.getElementById('RSIFrame');
IFrameObj.document.location.replace = function(location) {
this.iframe.src = location;
}
}
}
if (navigator.userAgent.indexOf('Gecko') !=-1 && !IFrameObj.contentDocument) {
// we have to give NS6 a fraction of a second
// to recognize the new IFrame
setTimeout('callToServer()',10);
return false;
}
if (IFrameObj.contentDocument) {
// For NS6
IFrameDoc = IFrameObj.contentDocument;
} else if (IFrameObj.contentWindow) {
// For IE5.5 and IE6
IFrameDoc = IFrameObj.contentWindow.document;
} else if (IFrameObj.document) {
// For IE5
IFrameDoc = IFrameObj.document;
} else {
return true;
}
IFrameDoc.location.replace(URL);
return false;
}
function handleResponseTrue() {
var responseMessage = document.getElementById('responseMessage');
var message = '<p>Beskeden blev sendt! Tak, tak tak!<\/p>'
responseMessage.innerHTML = message;
responseMessage.style.display = 'block';
}
function handleResponseFalse() {
var responseMessage = document.getElementById('responseMessage');
var message = '<p>Beskeden blev ikke sendt! Det kan skyldes fejl i den indtastede e-mail adresse. Prøv igen!<\/p>'
responseMessage.innerHTML = message;
responseMessage.style.display = 'block';
}
function handleResponseFault() {
var responseMessage = document.getElementById('responseMessage');
var message = '<p>Der er et eller andet galt med den her server. Prøv igen om lidt tid.<\/p>'
responseMessage.innerHTML = message;
responseMessage.style.display = 'block';
}
</script>
Mit php mailscript er:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>MINUS21</title>
<?php
error_reporting(E_NOTICE);
function valid_email($str)
{
return ( ! preg_match("/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix", $str)) ? FALSE : TRUE;
}
if($_REQUEST['name']!='' && $_REQUEST['e_mail']!='' && $_REQUEST['sub_ject']!='' && valid_email($_REQUEST['e_mail'])==TRUE)
{
$to = 'EMAIL ADRESSE';
$headers = 'From: '.$_REQUEST['e_mail'].''. "\r\n" .
'Reply-To: '.$_REQUEST['e_mail'].'' . "\r\n" .
$subject = "Mailform";
$message = htmlspecialchars($_REQUEST['message']);
if(mail($to, $subject, $message, $headers))
{//we show the good guy only in one case and the bad one for the rest.
echo '<script type="text/javascript">window.parent.handleResponseTrue()</script>';
}
else {
echo '<script type="text/javascript">window.parent.handleResponseFault()</script>';
}
}
else {
echo '<script type="text/javascript">window.parent.handleResponseFalse()</script>';
}
?>
</head>
<body>
</body>
</html>
Håber på lidt hjælp da jeg har deadline mandag.
På forhånd tak
/Nicoolai