Gå til innhold

Post fra skjema til database/mail


Anbefalte innlegg

Åhkei..

 

Dette er noe jeg har hatt store problemer med siden jeg begynte med php.

 

Jeg sender variabler med method=post til en side. Denne siden legger variablene inn i databasen, eller sender den over mail med mail(). Hva den gjør er egentlig ikke viktig.

 

Problemet er at hver gang jeg oppdaterer denne siden så får jeg "Siden kan ikke oppdateres uten å sende informasjonen på nytt." Og hvis man klikker Prøv på nytt så vil samme data sendes til mail, database eller hva det nå er som er aktuelt.

 

Dette er problem-siden.

<?php
if ($navn=="" || $epost=="" || $beskjed == ""){
echo "Du må fylle inn alle feltene.";
}
else {

$sendto = "[email protected]";
$from = "$epost";
$subject= "Tilbakemelding på siden fra: $navn";
$message = "Navn : $navn \nAv : $epost \nMelding: \n$beskjed";
$headers = "From: $from\r\n";

mail($sendto, $subject, $message, $headers);

echo "Mailen er sendt";
}
?> 

 

Problemet er da at jeg får to eller flere like mailer om noen oppdaterer og klikker prøv på nytt.

 

Det jeg lurer på er hvordan unngår man slikt?

 

All hjelp taes hjertlig i mot ;)

Lenke til kommentar
Videoannonse
Annonse

Du kan unngå det ved å bruker header("Location: side.php") etter du har behandlet variablene - men husk at siden som da behandler variablene ikke kan ha noen output.

 

F.eks.

 

skjemaet sendes til motta.php, da kan motta.php se slik ut:

<?php

$mail = mail("[email protected]", "Tittel", $_POST['beskjed']); // her sendes feltet beskjed til en mail adresse

 

if($mail){

header("Location: side.php?sendt=ok");

exit;

}else{

header("Location: side.php?sendt=feil");

exit;

}

?>

 

Som du ser så sender den også variabelen sendt, dette er veldig kjekt om du skal sette noe inn i en database - slik at brukeren ikke tror at skjemaet er sendt hvis det oppstår en feil med spørringen.

 

sendt.php kan da se slik ut:

<?php

if($_GET['sendt'] == "ok"){

echo "Mailen ble sendt!";

}else{

echo "Beklager, mailen kunne ikke sendes. Vennligst forsøk igjen!";

}

?>

Lenke til kommentar
if ($navn=="" || $epost=="" || $beskjed == ""){

echo "Du må fylle inn alle feltene.";

}

har funnet ut at du kan bruke empty istedenfor =="" slik at du kan 'forbedre' koden slik:

 

if (empty($navn) || empty($epost) || empty($beskjed)) {
echo("Du må fylle inn alle feltene");
}

 

 

dette er vel antagelig bare småpirk, men et alternativ som vil kunne gjøre koden raskere

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å
×
×
  • Opprett ny...