23. marts 2004 - 10:59
Der er
22 kommentarer og 2 løsninger
3 spm til en mailform
Jeg har lavet denne mailform: <?php if (isset($_POST["inputname"]) || isset($_POST["inputemail"]) || isset($_POST["inputmessage"])) { $inputname = $_POST['inputname']; $inputemail = $_POST['inputemail']; $inputmessage = $_POST['inputmessage']; } else { $inputname = ""; $inputemail = ""; $inputmessage = ""; } ?> <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> Navn:* <input type="text" value="<?php echo $inputname ?>" name="inputname"><br> E-mail:* <input type="text" value="<?php echo $inputemail ?>" name="inputemail"><br> Adresse: <input type="text" name="inputaddress"><br> Postnummer: <input type="text" name="inputpostcode"><br> By: <input type="text" name="inputcity"><br> Telefonnr.: <input type="text" name="inputtelephone"><br> Emne: <select name="inputsubject"> <option value="Forespørgsel">Forespørgsel <option value="Medlemskab">Medlemskab <option value="Bidrag">Bidrag </select><br> Besked:* <textarea rows="5" cols="0" name="inputmessage"><?php echo $inputmessage ?></textarea><br> <input type="submit" name="mailform" value="Send"> </form> <?php if (isset($_POST['mailform'])) { if(!empty($_POST['inputname']) && !empty($_POST['inputemail']) && !empty($_POST['inputmessage'])) { $recipient = "test@test.dk"; $subject = "$_POST[inputsubject]"; $message = "$_POST[inputmessage]\r\n\r\n"; $message .= "$_POST[inputname]\r\n"; $message .= "$_POST[inputaddress]\r\n"; $message .= "$_POST[inputpostcode] $_POST[inputcity]\r\n"; $message .= "$_POST[inputtelephone]\r\n"; $headers = "From: $_POST[inputname] <$_POST[inputemail]>\r\n"; mail ($recipient, $subject, $message, $headers); echo 'Beskeden er sendt!'; } else { echo 'Udfyld venligst alle felterne!'; } } ?> 1. Er denne linie korrekt: " if (isset($_POST["inputname"]) || isset($_POST["inputemail"]) || isset($_POST["inputmessage"])) {"? Hvis jeg udskrifter || med && så brokker den sig hvis kun ét felt er udfyldt - burde den ikke gøre det? 2. Hvis man i navn skriver "Test T. Testesen", så når jeg får mailen vil afsendernavnet være "Test T.Testesen" - hvordan undgår jeg at et punktum rykker teksten sammen? 3. Hvordan får jeg slettet variablerne sådan at den indtastede tekst ikke bibeholdes når formen er sendt?
Annonceindlæg fra Computerworld
23. marts 2004 - 11:03
#1
1: || betyder "eller" && betyder "og" - derfor brokker den sig med &&
23. marts 2004 - 11:08
#2
2: ? det lyder da underligt 3: smider selve PHP delen der mailer øverst i dit script ofg så laver alle dine valuer om fra: value="<?php echo $inputname ?>" til: value="<?php echo $_POST['inputname']; ?>" og så skal du redirecte med header(); til PHP_SELF
23. marts 2004 - 11:17
#3
1. Ja det skulle man mene, men det går den ikke. 3. Så dvs at man først skal post til PHP_SELF for at sende mailen og så derfor igen "refreshe" siden med headeren?
23. marts 2004 - 14:08
#4
1: så tror jeg ikke helt jeg er med ;o) - hvad er det der ikke er som det skal være? 3: nemlig ;o), men hvis jeg var dig ville jeg bare splitte det op ti to filer og så sende brugeren tilbage til mailformen, når mail er sendt
23. marts 2004 - 14:35
#5
1. Min fejl - beklager. Det jeg mente var at det betyder ikke noget om jeg sætter || eller && - det giver samme udslag. 3. Ja, det var måske en løsning, men jeg ville helst have det i én fil. Det er bare lige det med at slette variabler efter brug jeg ikke helt er med på. :o(
23. marts 2004 - 14:46
#6
1: Det kan ikke passe så må der være noget andet der har indflydelse - hvis det er kan det være dine "empty" prøv at bruge isset i stedet her fo hvis det ikke er isset så er de tomme! 3: hvorfor skal det være i en fil?
23. marts 2004 - 14:51
#7
1. OK, det må jeg lige prøve. 3. Det er mest af princip. :o) Men det må også kunne lade sig gøre i én.
23. marts 2004 - 17:15
#8
Kan jeg bruge noget unset?
23. marts 2004 - 22:19
#9
det her var måske en mulighed: <?php if (isset($_POST['mailform'])) { if(!empty($_POST['inputname']) && !empty($_POST['inputemail']) && !empty($_POST['inputmessage'])) { $recipient = "test@test.dk"; $subject = "$_POST[inputsubject]"; $message = "$_POST[inputmessage]\r\n\r\n"; $message .= "$_POST[inputname]\r\n"; $message .= "$_POST[inputaddress]\r\n"; $message .= "$_POST[inputpostcode] $_POST[inputcity]\r\n"; $message .= "$_POST[inputtelephone]\r\n"; $headers = "From: $_POST[inputname] <$_POST[inputemail]>\r\n"; mail ($recipient, $subject, $message, $headers); header("location: ".$_SERVER['PHP_SELF']."?msg=ok"); } else { header("location: ".$_SERVER['PHP_SELF']."?msg=error"); } } if(isset($_GET['msg'])){ if($_GET['msg'] == "ok"){ $msg = 'Beskeden er sendt!'; }else{ $msg = 'Udfyld venligst alle felterne!'; } echo $msg; } ?> <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> Navn:* <input type="text" value="<?php echo $_POST['inputname']; ?>" name="inputname"><br> E-mail:* <input type="text" value="<?php echo $_POST['inputemail']; ?>" name="inputemail"><br> Adresse: <input type="text" name="inputaddress"><br> Postnummer: <input type="text" name="inputpostcode"><br> By: <input type="text" name="inputcity"><br> Telefonnr.: <input type="text" name="inputtelephone"><br> Emne: <select name="inputsubject"> <option value="Forespørgsel">Forespørgsel <option value="Medlemskab">Medlemskab <option value="Bidrag">Bidrag </select><br> Besked:* <textarea rows="5" cols="0" name="inputmessage"><?php echo $_POST['inputmessage']; ?></textarea><br> <input type="submit" name="mailform" value="Send"> </form>
23. marts 2004 - 22:20
#10
men jo unset ville nok også kunne benyttes
24. marts 2004 - 11:29
#11
Den er ikke helt god. Den gemmer ikke det indtastede hvis man f.eks. kun skriver sit navn og vil sende.
Jeg skal bruge formen i en switch, så det dur vel heller ikke med nogle ?msg=ok variabler når siden f.eks. bliver kaldt via denne
http://www.domæne.dk/?id=kontakt?
25. marts 2004 - 07:55
#12
det kan sagtens bruges i en switch, men prøv lige med det her: <?php if(isset($_POST['mailform']) && !empty($_POST['inputname']) && !empty($_POST['inputemail']) && !empty($_POST['inputmessage'])) { $recipient = "test@test.dk"; $subject = "$_POST[inputsubject]"; $message = "$_POST[inputmessage]\r\n\r\n"; $message .= "$_POST[inputname]\r\n"; $message .= "$_POST[inputaddress]\r\n"; $message .= "$_POST[inputpostcode] $_POST[inputcity]\r\n"; $message .= "$_POST[inputtelephone]\r\n"; $headers = "From: $_POST[inputname] <$_POST[inputemail]>\r\n"; mail ($recipient, $subject, $message, $headers); header("location: ".$_SERVER['PHP_SELF']."?id=kontakt&msg=ok"); } else { header("location: ".$_SERVER['PHP_SELF']."?id=kontakt&msg=error"); } if(isset($_GET['msg'])){ if($_GET['msg'] == "ok"){ $msg = 'Beskeden er sendt!'; }else{ $msg = 'Udfyld venligst alle felterne!'; } echo $msg; } ?> <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> Navn:* <input type="text" value="<?php echo $_POST['inputname']; ?>" name="inputname"><br> E-mail:* <input type="text" value="<?php echo $_POST['inputemail']; ?>" name="inputemail"><br> Adresse: <input type="text" name="inputaddress"><br> Postnummer: <input type="text" name="inputpostcode"><br> By: <input type="text" name="inputcity"><br> Telefonnr.: <input type="text" name="inputtelephone"><br> Emne: <select name="inputsubject"> <option value="Forespørgsel">Forespørgsel <option value="Medlemskab">Medlemskab <option value="Bidrag">Bidrag </select><br> Besked:* <textarea rows="5" cols="0" name="inputmessage"><?php echo $_POST['inputmessage']; ?></textarea><br> <input type="submit" name="mailform" value="Send"> </form>
25. marts 2004 - 11:00
#13
Hvis blot jeg kopierer det ind i et dokument loader siden ikke. Sætter jeg <html> tags ind så melder den "Cannot modify header information".
25. marts 2004 - 11:46
#14
sorry det var lige pga en smutter - jeg havde ikke testet det <?php if(isset($_POST['mailform']) && !empty($_POST['inputname']) && !empty($_POST['inputemail']) && !empty($_POST['inputmessage'])) { $recipient = "test@test.dk"; $subject = "$_POST[inputsubject]"; $message = "$_POST[inputmessage]\r\n\r\n"; $message .= "$_POST[inputname]\r\n"; $message .= "$_POST[inputaddress]\r\n"; $message .= "$_POST[inputpostcode] $_POST[inputcity]\r\n"; $message .= "$_POST[inputtelephone]\r\n"; $headers = "From: $_POST[inputname] <$_POST[inputemail]>\r\n"; mail ($recipient, $subject, $message, $headers); header("location: ".$_SERVER['PHP_SELF']."?id=kontakt&msg=ok"); }elseif(isset($_POST['mailform'])) { $msg = 'Udfyld venligst alle felterne!'; } if(isset($_GET['msg']) && $_GET['msg'] == "ok"){ $msg = 'Beskeden er sendt!'; } echo $msg; ?> <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> Navn:* <input type="text" value="<?php echo $_POST['inputname']; ?>" name="inputname"><br> E-mail:* <input type="text" value="<?php echo $_POST['inputemail']; ?>" name="inputemail"><br> Adresse: <input type="text" name="inputaddress"><br> Postnummer: <input type="text" name="inputpostcode"><br> By: <input type="text" name="inputcity"><br> Telefonnr.: <input type="text" name="inputtelephone"><br> Emne: <select name="inputsubject"> <option value="Forespørgsel">Forespørgsel <option value="Medlemskab">Medlemskab <option value="Bidrag">Bidrag </select><br> Besked:* <textarea rows="5" cols="0" name="inputmessage"><?php echo $_POST['inputmessage']; ?></textarea><br> <input type="submit" name="mailform" value="Send"> </form>
25. marts 2004 - 21:31
#15
Tak, så virker den! Men jeg forsøger igennem min switch melder den headers already sent når jeg forsøger at sende efter alle felter er udfyldt. Hvordan kan det iøvrigt være du bruge elseif i stedet for else og hvorfor skal der punktummer i header lokationslinien?
25. marts 2004 - 21:50
#16
Min switch ser sådan her ud: <?php if (!isset($_GET['id'])) { $id = "forside"; }else{ $id = $_GET['id']; } switch ($id) { case "forside": $page = "forside.php"; $title = "Forside"; break; case "test": $page = "test.php"; $title = "Test"; break; case "kontakt": $page = "kontakt.php"; $title = "Kontakt"; break; } ?> <!doctype html public "-//W3C//DTD HTML 4.0 //EN"> <html> <head> <title><?php echo "$title"; ?></title> <link href="style.css" rel="stylesheet" type="text/css"> </head> <body> <div id="sidebar"> <a href="?id=forside">Forside</a><br> <a href="?id=test">Test</a><br> <a href="?id=kontakt">Kontakt</a><br> <div> <div id="content"><?php include($page); ?><div> </body> </html> Det ser ud til at den brokker sig over <?php echo "$title"; ?> og <?php include($page); ?>.
25. marts 2004 - 21:56
#17
selve PHP kode stumpen med maildelen skal du smide op aller øverst i dit dokument - før HTML- tags - der må ikke være noget output før en headerfunktion benyttes - så den kan du putte uden for sin switch. elseif er bare fordi - jeg vil have betingelsen om at der har været trykket på submit før $msg bliver sat, ellers ville den bare skrve at alle felter skal udfyldes selv om der ikke er trykket på submit. punktummerne er for at holde PHP adskildt fra "alm" kode punktummer svarer til + i PHP. Man kan godt i mange tilfælde snige sig uden om punktummerne, men det vil ikke være god kodeskik og vil i visse tilfælde kunne give problemer med koden. hvis det skal være helt korrekt burde man også skrive dette: $message = "$_POST[inputmessage]\r\n\r\n"; sådan: $message = $_POST['inputmessage']."\r\n\r\n";
25. marts 2004 - 22:02
#18
OK, så dvs. at maildelen skal puttes ind i min index-fil (hvor switchen er)?
25. marts 2004 - 22:05
#19
yep - jeg kan ikke få din kode til at "brokke" sig - den virker fint her? - hvad kommer den med af fejl?
25. marts 2004 - 22:13
#20
index.php: <?php if(isset($_POST['mailform']) && !empty($_POST['inputname']) && !empty($_POST['inputemail']) && !empty($_POST['inputmessage'])) { $recipient = "test@test.dk"; $subject = "$_POST[inputsubject]"; $message = "$_POST[inputmessage]\r\n\r\n"; $message .= "$_POST[inputname]\r\n"; $message .= "$_POST[inputaddress]\r\n"; $message .= "$_POST[inputpostcode] $_POST[inputcity]\r\n"; $message .= "$_POST[inputtelephone]\r\n"; $headers = "From: $_POST[inputname] <$_POST[inputemail]>\r\n"; mail ($recipient, $subject, $message, $headers); header("location: ".$_SERVER['PHP_SELF']."?id=kontakt&msg=ok"); } elseif(isset($_POST['mailform'])) { $msg = 'Udfyld venligst alle felterne!'; } if(isset($_GET['msg']) && $_GET['msg'] == "ok"){ $msg = 'Beskeden er sendt!'; } echo $msg; ?> <?php if (!isset($_GET['id'])) { $id = "forside"; }else{ $id = $_GET['id']; } switch ($id) { case "forside": $page = "forside.php"; $title = "Forside"; break; case "test": $page = "test.php"; $title = "Test"; break; case "kontakt": $page = "kontakt.php"; $title = "Kontakt"; break; } ?> <!doctype html public "-//W3C//DTD HTML 4.0 //EN"> <html> <head> <title><?php echo "$title"; ?></title> <link href="style.css" rel="stylesheet" type="text/css"> </head> <body> <div id="sidebar"> <a href="?id=forside">Forside</a><br> <a href="?id=test">Test</a><br> <a href="?id=kontakt">Kontakt</a><br> <div> <div id="content"><?php include($page); ?><div> </body> </html> kontakt.php <form action="<?php echo $_SERVER['PHP_SELF']; ?>?id=kontakt" method="post"> Navn:* <input type="text" value="<?php echo $_POST['inputname']; ?>" name="inputname"><br> E-mail:* <input type="text" value="<?php echo $_POST['inputemail']; ?>" name="inputemail"><br> Adresse: <input type="text" name="inputaddress"><br> Postnummer: <input type="text" name="inputpostcode"><br> By: <input type="text" name="inputcity"><br> Telefonnr.: <input type="text" name="inputtelephone"><br> Emne: <select name="inputsubject"> <option value="Forespørgsel">Forespørgsel <option value="Medlemskab">Medlemskab <option value="Bidrag">Bidrag </select><br> Besked:* <textarea rows="5" cols="0" name="inputmessage"><?php echo $_POST['inputmessage']; ?></textarea><br> <input type="submit" name="mailform" value="Send"> </form> Den ser mailen, men skriver ikke at beskeden er sendt og felterne skal udfyldes hvis de ikke er.
25. marts 2004 - 22:40
#21
sådan her: <?php if (!isset($_GET['id'])) { $id = "forside"; }else{ $id = $_GET['id']; } switch ($id) { case "forside": $page = "forside.php"; $title = "Forside"; break; case "test": $page = "test.php"; $title = "Test"; break; case "kontakt": if(isset($_POST['mailform']) && !empty($_POST['inputname']) && !empty($_POST['inputemail']) && !empty($_POST['inputmessage'])) { $recipient = "test@test.dk"; $subject = "$_POST[inputsubject]"; $message = "$_POST[inputmessage]\r\n\r\n"; $message .= "$_POST[inputname]\r\n"; $message .= "$_POST[inputaddress]\r\n"; $message .= "$_POST[inputpostcode] $_POST[inputcity]\r\n"; $message .= "$_POST[inputtelephone]\r\n"; $headers = "From: $_POST[inputname] <$_POST[inputemail]>\r\n"; mail ($recipient, $subject, $message, $headers); header("location: ".$_SERVER['PHP_SELF']."?id=kontakt&msg=ok"); } elseif(isset($_POST['mailform'])) { $msg = 'Udfyld venligst alle felterne!'; } if(isset($_GET['msg']) && $_GET['msg'] == "ok"){ $msg = 'Beskeden er sendt!'; } echo $msg; $page = "kontakt.php"; $title = "Kontakt"; break; } ?> <!doctype html public "-//W3C//DTD HTML 4.0 //EN"> <html> <head> <title><?php echo "$title"; ?></title> <link href="style.css" rel="stylesheet" type="text/css"> </head> <body> <div id="sidebar"> <a href="?id=forside">Forside</a><br> <a href="?id=test">Test</a><br> <a href="?id=kontakt">Kontakt</a><br> <div> <div id="content"><?php include($page); ?><div> </body> </html> kontakt.php: <form action="<?php echo $_SERVER['PHP_SELF']; ?>?id=kontakt" method="post"> Navn:* <input type="text" value="<?php echo $_POST['inputname']; ?>" name="inputname"><br> E-mail:* <input type="text" value="<?php echo $_POST['inputemail']; ?>" name="inputemail"><br> Adresse: <input type="text" name="inputaddress"><br> Postnummer: <input type="text" name="inputpostcode"><br> By: <input type="text" name="inputcity"><br> Telefonnr.: <input type="text" name="inputtelephone"><br> Emne: <select name="inputsubject"> <option value="Forespørgsel">Forespørgsel <option value="Medlemskab">Medlemskab <option value="Bidrag">Bidrag </select><br> Besked:* <textarea rows="5" cols="0" name="inputmessage"><?php echo $_POST['inputmessage']; ?></textarea><br> <input type="submit" name="mailform" value="Send"> </form>
26. marts 2004 - 09:28
#22
Næsten. :o) Nu kommer $msg teksterne bag ved mine divs og ikke inde i div'en med formen. Min CSS ser således ud: body { height: 100%; margin: 0; padding: 0; } #sidebar { width: 180px; height: 480px; background-color: #999999; position: absolute; left: 10px; top: 10px; } #content { width: 570px; height: 480px; background-color: #CCCCCC; position: absolute; left: 190px; top: 0; }
27. marts 2004 - 09:52
#23
du indsætter bare: if(isset($_GET['msg']) && $_GET['msg'] == "ok"){ $msg = 'Beskeden er sendt!'; } echo $msg; der hvor den skal vises
30. marts 2004 - 09:34
#24
Super - mange tak!
Vi tilbyder markedets bedste kurser inden for webudvikling