miXer Skrevet 18. februar 2011 Del Skrevet 18. februar 2011 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
nree Skrevet 18. februar 2011 Del Skrevet 18. februar 2011 Scriptet som sender mailen sender brukeren videre med header('Location: ' . $_SERVER['PHP_SELF']); Blir siden refreshet hele tiden etter mailen er forsøkt sendt, eller er det kun hvis brukeren gjør det manuelt? Lenke til kommentar
miXer Skrevet 19. februar 2011 Forfatter Del Skrevet 19. februar 2011 Siden blir kun refreshet hvis bruker gjør det selv Lenke til kommentar
xqus Skrevet 19. februar 2011 Del Skrevet 19. februar 2011 Jeg tipper det er pga. med innholdet så blir ikke headeren din sendt. Det gjør at dersom en bruker refresher så sendes post data på nytt, og mailen sendes enda en gang. Lenke til kommentar
miXer Skrevet 19. februar 2011 Forfatter Del Skrevet 19. februar 2011 Jeg tipper det er pga. med innholdet så blir ikke headeren din sendt. Det gjør at dersom en bruker refresher så sendes post data på nytt, og mailen sendes enda en gang. Ok, greit å vite, men hvorfor? Hvordan kan jeg gå rundt dette? Lenke til kommentar
xqus Skrevet 19. februar 2011 Del Skrevet 19. februar 2011 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
miXer Skrevet 20. februar 2011 Forfatter Del Skrevet 20. februar 2011 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
JarlG Skrevet 20. februar 2011 Del Skrevet 20. februar 2011 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. Lenke til kommentar
miXer Skrevet 20. februar 2011 Forfatter Del Skrevet 20. februar 2011 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
JarlG Skrevet 20. februar 2011 Del Skrevet 20. februar 2011 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
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå