aog Skrevet 27. juni 2004 Del Skrevet 27. juni 2004 (endret) Hei. Jeg har et skjema som ser slik ut etter at det er fylt ut. <?php $til = "[email protected]"; $topic = "Produkter/Jobb"; $melding = "Navn: $navn\n\n\n"; $melding .= "Telefon: $nr\n\n\n"; $melding .= "E-post: $epost\n\n\n"; $melding .= "Alder: $alder\n\n\n"; $melding .= "Ønsker å bli kontaktet: $når\n\n\n"; $melding .= "Har dette som mål: $mål\n\n\n"; mail($til, $topic, $melding,''); ?> <div> Takk for at du fylte ut dette skjemaet.<br> Vi skal prøve å ta kontakt når det passer best for deg.<br> <br> <br> <strong>Navn:</strong><br> <?php echo $_POST["navn"]; ?> <br><br> <strong>Telefon:</strong><br> <?php echo $_POST["nr"]; ?> <br><br> <strong>E-post:</strong><br> <?php echo $_POST["epost"]; ?> <br><br> <strong>Alder:</strong><br> <?php echo $_POST["alder"]; ?> <br><br> <strong>Ønsker å bli knotaktet:</strong><br> <?php echo $_POST["når"]; ?> <br><br> <strong>Har dette som mål:</strong><br> <?php echo $_POST["mål"]; ?> <br><br> </div> Problemet er at dersom personen som har fylt ut skjemaet refresher siden, så vil jeg få 2 like mailer eller mer, det kommer ann på hvor mange ganger siden blir refreshet. Er det noe jeg kan gjøre, eller hva skal jeg gjøre? Jeg vet det går ann å gjøre noet, men hva og hvordan? Takker for all hjelpen jeg får... Endret 30. juni 2004 av aog Lenke til kommentar
Binary Skrevet 27. juni 2004 Del Skrevet 27. juni 2004 En løsning er å bare vise siden der det står: "Takk for at du fylte ut dette skjemaet.<br> Vi skal prøve å ta kontakt når det passer best for deg.<br>" i noen sekunder, så sender du dem tilbake til start. Da kan de refreshe så mye de vil uten at en mail blir sendt. Bruk gjerne <form method="post" action="mail.php"> også, siden det da dukker opp en advarsel når man refresher. Lenke til kommentar
???????? Skrevet 27. juni 2004 Del Skrevet 27. juni 2004 Bruk header("Location: ..."), da blir ikke mailen sendt to ganger, uansett om de trykker "oppdater". Legg merke til at du også burde gjøre noen forbedringer på scriptet ditt, legg til en funksjon som sjekker om mailen blir sendt eller ikke. if(!mail($til, $topic, $melding,'')){ dersom mailen ikke kan sendes så burde den lagres i en database eller fil - på den måten "forsvinner" ikke som f.eks. blir avvist av serveren. } Lenke til kommentar
aog Skrevet 27. juni 2004 Forfatter Del Skrevet 27. juni 2004 if(!mail($til, $topic, $melding,'')){dersom mailen ikke kan sendes så burde den lagres i en database eller fil - på den måten "forsvinner" ikke som f.eks. blir avvist av serveren. } Hvorfor skulle den bli avist? ..jeg bare spørr.. Det er jo altid samme e-post adressen som blir send til.. Men... Kan jeg ikke legge inn en knap som du må trykke på for å sende skjemate? ..istede for å sende med engang.. 1. Du fyller ut skjema 2. trykker Ok 3. leser gjennom 4. trykker send, (eller tilbake for å redigere), og du blir vist til hovedsiden. Noen som kan vise meg hvordan jeg gjøre det? Går det ann å gjøre det? Lenke til kommentar
jrz Skrevet 28. juni 2004 Del Skrevet 28. juni 2004 joda. det lar seg enkelt gjøre. en måte vil jo være å bare sende useren til ett nytt form. der man først, øverst på 'siden' kan lese gjennom det man skal sende, også lagrer du alle variablene i hidden fields, og har en knapp der du kan velge å sende, avbryte eller endre ting. Lenke til kommentar
aog Skrevet 28. juni 2004 Forfatter Del Skrevet 28. juni 2004 joda. det lar seg enkelt gjøre. en måte vil jo være å bare sende useren til ett nytt form. der man først, øverst på 'siden' kan lese gjennom det man skal sende, også lagrer du alle variablene i hidden fields, og har en knapp der du kan velge å sende, avbryte eller endre ting. hvordan? Bruk header("Location: ..."), da blir ikke mailen sendt to ganger, uansett om de trykker "oppdater". Prøvde det... det førte til at siden refreshet seg selv. (Jeg bruker php include, og har ikke header og greier i filene som jeg inkluderer..) ...derfor fungerte ikke det.. godt mulig jeg gjorde noe feil, men... Er det ikke noe måte å disable "Refresh"? Lenke til kommentar
Torbjørn Skrevet 28. juni 2004 Del Skrevet 28. juni 2004 en Refresh er ikke noe man kan disable nei, og godt er det. en Location header er den absolutt mest elegante løsningen på dette problemet (og den som brukes rundt omkring) en "bekrefte mail"-side løser ikke problemet, den bare utsetter det. Lenke til kommentar
jrz Skrevet 28. juni 2004 Del Skrevet 28. juni 2004 (endret) hmm.. du kan jo lagre alle sendte mailer med ett avsender og overskrift i ett array, og bruke in_array() mot mail sendingen.. eller bruke unix time og hindre i tilfelle differansen på sist sendte mail er for liten.. men, ja. som torbjørn sier, header location Endret 28. juni 2004 av zyrtech_ Lenke til kommentar
aog Skrevet 28. juni 2004 Forfatter Del Skrevet 28. juni 2004 (endret) QUOTE Bruk header("Location: ..."), da blir ikke mailen sendt to ganger, uansett om de trykker "oppdater". Prøvde det... det førte til at siden refreshet seg selv. Det virker ikke.. Går det ikke ann å lage en knapp som sender mailen samtidig som du blir sendt til startsiden? Endret 28. juni 2004 av aog Lenke til kommentar
jrz Skrevet 28. juni 2004 Del Skrevet 28. juni 2004 if (isset($_POST["submit"])) { if (sende mailen) { header("Location: http://www.example.com/"); /* Redirect browser */ } } else { // print form } slik du tenkte ? Lenke til kommentar
Torbjørn Skrevet 28. juni 2004 Del Skrevet 28. juni 2004 QUOTE Bruk header("Location: ..."), da blir ikke mailen sendt to ganger, uansett om de trykker "oppdater". Prøvde det... det førte til at siden refreshet seg selv. Det virker ikke.. Går det ikke ann å lage en knapp som sender mailen samtidig som du blir sendt til startsiden? det er jo det vi prøver å fortelle deg: det er det location header gjør. Lenke til kommentar
aog Skrevet 28. juni 2004 Forfatter Del Skrevet 28. juni 2004 Dette har jeg i toppen på mail2.php <meta HTTP-EQUIV="REFRESH" content="3; url="http://www.server.com/index.php"> Slik? Dersom jeg har det slik så blir siden refreshet hvert tredje sekund, og jeg får mail for hver gang. Det er jo ikke det jeg ønsker. Lenke til kommentar
jrz Skrevet 28. juni 2004 Del Skrevet 28. juni 2004 æsj. hvorfor refresher du så ofte? du kan jo lagre ip adressen til brukeren, og nekte å sende mer enn 1 ? Lenke til kommentar
Torbjørn Skrevet 28. juni 2004 Del Skrevet 28. juni 2004 (endret) <?php mail(); header('Location: http://www.server.com/index.php'); ?> EDIT: holdt på å gjøre en stor blemme. Endret 28. juni 2004 av Torbjørn Lenke til kommentar
aog Skrevet 28. juni 2004 Forfatter Del Skrevet 28. juni 2004 æsj. hvorfor refresher du så ofte? du kan jo lagre ip adressen til brukeren, og nekte å sende mer enn 1 ? hehe... ja, men hvordan? Jeg kan ikke dette.. Lenke til kommentar
aog Skrevet 28. juni 2004 Forfatter Del Skrevet 28. juni 2004 <?phpmail(); header('Location: http://www.server.com/index.php'); ?> EDIT: holdt på å gjøre en stor blemme. Warning: Cannot modify header information - headers already sent by (output started at.....) Jeg forstår ingenting.. Lenke til kommentar
jrz Skrevet 28. juni 2004 Del Skrevet 28. juni 2004 les litt du.. header på php.net vil du feks gi brukeren beskjed om at mailen ble sendt, så kan du kjøre en sleep før den header location'en Lenke til kommentar
aog Skrevet 28. juni 2004 Forfatter Del Skrevet 28. juni 2004 Når jeg bruker <?php mail($til, $topic, $melding,''); header('Location: http://www.server.com/index.php'); ?> ..så får jeg denne meldingen: Warning: Cannot modify header information - headers already sent by (output started at /home/server/public_html/aog/hl/index.php:4) in /home/server/public_html/aog/hl/mail2.php on line 63 Lenke til kommentar
dabear Skrevet 28. juni 2004 Del Skrevet 28. juni 2004 Dette betyr at du har sendt ut noe til brukeren før du bruker header funksjonen. Altså: <?php echo 'ettellerannet'; header('Location: enplass'); ?> Eller <html> <?php header('Location: enplass'); ?> For å hindre dette må du gjøre om litt på koden din, eller alternativt se på http://no2.php.net/manual/en/function.ob-start.php Lenke til kommentar
Torbjørn Skrevet 28. juni 2004 Del Skrevet 28. juni 2004 vit hva headers er. HTTP trafikk består av headers og innhold. innhold er f.eks html som vises på en htmlside, men kan også være binære bildedata hvis du laster ned et bilde. Headers sendes før innholdet, og php lurer deg til å tro at det ikke finnes. Trikset er at alt av headers må gjøres unna før det kommer noe innhold, det er slik HTTP er definert. Php gjør slik at den automatisk viser alle headers idet du begynner å sende innhold (html). Ønsker du å endre headers (vha header-funksjonen), så må det gjøres *før* det kommer noe output. Hvis ikke får du feilen at headers already er sent, (nynorsk), og det er da naturlig nok for sent å komme med ønsker om nye headers. Finn hvor output starter og kjør header() kallet før det. 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å