Avatar billede hfrontdk Nybegynder
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?
Avatar billede avminarm Juniormester
23. marts 2004 - 11:03 #1
1: || betyder "eller" && betyder "og" - derfor brokker den sig med &&
Avatar billede avminarm Juniormester
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
Avatar billede hfrontdk Nybegynder
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?
Avatar billede avminarm Juniormester
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
Avatar billede hfrontdk Nybegynder
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(
Avatar billede avminarm Juniormester
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?
Avatar billede hfrontdk Nybegynder
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.
Avatar billede hfrontdk Nybegynder
23. marts 2004 - 17:15 #8
Kan jeg bruge noget unset?
Avatar billede avminarm Juniormester
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>
Avatar billede avminarm Juniormester
23. marts 2004 - 22:20 #10
men jo unset ville nok også kunne benyttes
Avatar billede hfrontdk Nybegynder
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?
Avatar billede avminarm Juniormester
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>
Avatar billede hfrontdk Nybegynder
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".
Avatar billede avminarm Juniormester
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>
Avatar billede hfrontdk Nybegynder
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?
Avatar billede hfrontdk Nybegynder
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); ?>.
Avatar billede avminarm Juniormester
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";
Avatar billede hfrontdk Nybegynder
25. marts 2004 - 22:02 #18
OK, så dvs. at maildelen skal puttes ind i min index-fil (hvor switchen er)?
Avatar billede avminarm Juniormester
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?
Avatar billede hfrontdk Nybegynder
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.
Avatar billede avminarm Juniormester
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>
Avatar billede hfrontdk Nybegynder
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;
}
Avatar billede avminarm Juniormester
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
Avatar billede hfrontdk Nybegynder
30. marts 2004 - 09:34 #24
Super - mange tak!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester