Gå til innhold

[Løst] Mail form sender mailen ved refresh av siden


Anbefalte innlegg

Hei

 

Jeg har et merkelig problem. Jeg har en php side med en form, denne fungerer fint.

Hvis jeg bare har formen på siden så fungerer alt og mailen blir ikke sendt enda engang ved refresh av siden.

Men dersom jeg legger inn masse informasjon på siden sammen med formen så blir mailen sendt enda en gang ved refresh.

Mailen blir sendt enda en gang ved refresh av siden med koden jeg gir under, men dersom jeg tar vekk en av divene eller alle divene med informasjon så blir ikke mailen sendt enda en gang ved refresh av siden

 

Hvorfor er det slik? Hvordan kan jeg få en slutt på dette?

 

Kode:

<!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=ISO-8859-1" />
<title>test</title>
<link href="test.css" rel="stylesheet" type="text/css" />
<script type="text/javascript">
function checkForm(binForm) {
// input fields
var name = binForm.name.value;
var phone = binForm.phone.value;
var mail = binForm.mail.value;
var message = binForm.message.value;
// error variables
var errName = document.getElementById('errName');
var errPhone = document.getElementById('errPhone');
var errMail = document.getElementById('errMail');
var errMessage = document.getElementById('errMessage');
var errExists = false;

//check form
if (name == "") {
	errName.innerHTML = "*";
	errExists = true;
}
else
	errName.innerHTML = "";
if (phone == "") {
	errPhone.innerHTML = "*";
	errExists = true;
}
else
	errPhone.innerHTML = "";
if (mail == "") {
	errMail.innerHTML = "*";
	errExists = true;
}
else
	errMail.innerHTML = "";
if (message == "") {
	errMessage.innerHTML = "*";
	errExists = true;
}
else
	errMessage.innerHTML = "";

if (!errExists)
	return true;
else
	return false;
}
</script>
<style type="text/css">
#errName, #errPhone, #errMail, #errMessage {
	color: #FF0000;
}
</style>
</head>

<body>
<br />
<div id="outerwrapper">
   	<div id="linjalheader"></div>
	<div id="header">
	</div>
	<div id="nav">
       	<div id="linkwrapperleft">
           	<a href="index.html" class="navlinkleft">Forside</a>
           </div>
           <div id="linkwrapper">
           	<a href="omoss.html" class="navlink">Om oss</a>
           </div>
           <div id="linkwrapper">
           	<a href="tjenester.html" class="navlink">Tjenester</a>
           </div>
           <div id="linkwrapper"  style="width:180px;">
           	<a href="samarbeidspartnere.html" class="navlink">Samarbeidspartnere</a>
           </div>
           <div id="activelinkwrapperright">
           	Kontakt oss
           </div>
    </div>
	<div id="content" style="padding: 40px; width: 670px; height: 900px;">

<div>
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
</div>
<div>
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
</div>
<div>
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
</div>

<div>
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
</div>
<div style="float:left; width:670px;">
<?php
if (isset($_POST['name'])) //form er utfylt
{
$name = utf8_decode($_POST['name']);
$phone = utf8_decode($_POST['phone']);
$mail = utf8_decode($_POST['mail']);
$message = utf8_decode($_POST['message']);
$mailname = "TilNavn";
$mailto = "TilMail";

$subject = "Kontakt oss ($name <$mail>)";
$headers = "From: $name <$mail>\n";
$headers .= "Return-Path: <$mail>\n";
$headers .= "MIME-Version: 1.0\n";
$headers .= "Content-Type: text/html; charset=ISO-8859-1\n";

mail($mailto, $subject, $message, $headers);
header('Location: ' . $_SERVER['PHP_SELF']);
}
?>
<form action="kontaktoss.php" method="post" onsubmit="return checkForm(this);">
Navn<br />
<input type="text" id="name" name="name" /> <span id="errName"></span><br /><br />
Telefonnummer<br />
<input type="text" id="phone" name="phone" /> <span id="errPhone"></span><br /><br />
Epost adresse<br />
<input type="text" id="mail" name="mail" /> <span id="errMail"></span><br /><br />
Beskjed<br />
<textarea id="message" name="message" rows="10" cols="40"></textarea> <span id="errMessage"></span><br />
<input type="submit" value="Send forespørsel" />
</form>
	</div>

	</div>
       <p align="center" style="font-size:12px;"><br />Copyright © 2011 test</p>
</div>
</body>
</html>

Lenke til kommentar
Videoannonse
Annonse

Vel.

 

HTTP headere (som er det header() funksjonen i PHP sender) er den aller første delen av svaret klienten mottar fra serveren. Det betyr at alle kall til funksjoner som modifiserer headere må gjøres FØR output gjøres.

 

Riktig:

<?php
header('Location: http://example.com');
echo "Hello world";

 

Galt:

<?php
echo "Hello world";
header('Location: http://example.com');

 

Siste eksempelet vil faktisk produsere en feilmelding, men det er ikke i alle konfigurasjoner disse er synlige.

 

I ditt tilfelle betyr det at du bare kan flytte PHP koden helt øverst i filen.

 

Og som en "side note":

Anbefaler at du leser http://www.phpro.org/tutorials/PHP-Security.html. Punkt 2 og 4 er spesielt gjeldene for akkurat dette scriptet.

Lenke til kommentar

Vel.

 

HTTP headere (som er det header() funksjonen i PHP sender) er den aller første delen av svaret klienten mottar fra serveren. Det betyr at alle kall til funksjoner som modifiserer headere må gjøres FØR output gjøres.

 

Riktig:

<?php
header('Location: http://example.com');
echo "Hello world";

 

Galt:

<?php
echo "Hello world";
header('Location: http://example.com');

 

Siste eksempelet vil faktisk produsere en feilmelding, men det er ikke i alle konfigurasjoner disse er synlige.

 

I ditt tilfelle betyr det at du bare kan flytte PHP koden helt øverst i filen.

 

Og som en "side note":

Anbefaler at du leser http://www.phpro.org...-Security.html. Punkt 2 og 4 er spesielt gjeldene for akkurat dette scriptet.

 

Hei

 

Takk for fint svar, men det hjalp desverre ikke å flytte header koden øverst i php koden. Mailen ble like hærlig sendt enda en gang ved refresh av siden.

Slik er php koden min nå:

<?php
if (isset($_POST['name'])) //form er utfylt
{
       header('Location: ' . $_SERVER['PHP_SELF']);

       $name = utf8_decode($_POST['name']);
       $phone = utf8_decode($_POST['phone']);
       $mail = utf8_decode($_POST['mail']);
       $message = utf8_decode($_POST['message']);
       $mailto = "ToMail";

       $subject = "Kontakt oss ($name <$mail>)";
       $headers = "From: $name <$mail>\n";
       $headers .= "Return-Path: <$mail>\n";
       $headers .= "MIME-Version: 1.0\n";
       $headers .= "Content-Type: text/html; charset=ISO-8859-1\n";

       mail($mailto, $subject, $message, $headers);
}
?>

Lenke til kommentar

Du har jo ikke flyttet header(); øverst i koden. Blokken den er øvest i, er først og fremst ikke første blokk, i tillegg er det sendt masse html utenfor <?php ?> før gjeldende blokk.

 

Hvis jeg gjør slik som du vil, flytter header() koden før if testen eller i begynnelsen av dokumentet eller rett etter body taggen så kjører siden en redirect loop hele tiden. Derfor har jeg ikke satt den utenfor.

Og grunnen til at jeg har en masse html kode utenfor php koden både før og etter er jo forde det skal komme frem på siden uansett om formen er fylt ut eller ikke. Og jeg sparer et par linjer, og jeg syns det blir mer oversiktlig på denne måten.

Lenke til kommentar

Altså er kodestrukturen dårlig. Løsning: restrukturer og omkod med henhold til funksjonalitet og funksjoner som kreves (f.eks. header();) slik at det fungerer. header(); sin informasjon må være først i strømmen av data som skal fra webserveren til klienten, altså besøkende.

 

Virker som du ikke har forstått hva som sendes til klient, og hva som ikke sendes. Alt utenfor <?php ?>, altså HTML, sendes til klient, samt alt som echo'es. I tillegg har vi visse funksjoner som sender informasjon, deriblant header()-funksjonen, som kreves at er første biten med informasjon som nettleseren (klienten) mottar. Det finnes flere funksjoner som sender informasjon, og har sine 'krav', på samme måte.

 

Conditionals (if-statement), loops, og andre språklige strukturer sendes ikke til klient, men brukes for å behandle og skreddersy hva som skal sendes til klient. Altså trenger ikke header(); komme før alt av if's og loops.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...