Avatar billede cozey Nybegynder
30. marts 2009 - 18:07 Der er 10 kommentarer og
1 løsning

Ekstra felter i php mailform?

Godaften.
Jeg har fundet en god mailform, med mlighed for at vedhæfte filer, men jeg vil gerne have tre ekstra felter: "adresse" "postnummer" og "telefonnummer". Jeg kan ikke lige helt overskue hvordan jeg sætter det ind ind PHP-koden, så den sender det med. Her er koden:

<?php
if ($_SERVER['REQUEST_METHOD']=="POST"){

  // we'll begin by assigning the To address and message subject
  $to="cozey@sol.dk";
  $subject="E-mail with attachment";

  // get the sender's name and email address
  // we'll just plug them a variable to be used later
  $from = stripslashes($_POST['fromname'])."<".stripslashes($_POST['fromemail']).">";

  // generate a random string to be used as the boundary marker
  $mime_boundary="==Multipart_Boundary_x".md5(mt_rand())."x";

  // now we'll build the message headers
  $headers = "From: $from\r\n" .
  "MIME-Version: 1.0\r\n" .
      "Content-Type: multipart/mixed;\r\n" .
      " boundary=\"{$mime_boundary}\"";

  // here, we'll start the message body.
  // this is the text that will be displayed
  // in the e-mail
  $message="This is an example";

  // next, we'll build the invisible portion of the message body
  // note that we insert two dashes in front of the MIME boundary
  // when we use it
  $message = "This is a multi-part message in MIME format.\n\n" .
      "--{$mime_boundary}\n" .
      "Content-Type: text/plain; charset=\"iso-8859-1\"\n" .
      "Content-Transfer-Encoding: 7bit\n\n" .
  $message . "\n\n";

  // now we'll process our uploaded files
  foreach($_FILES as $userfile){
      // store the file information to variables for easier access
      $tmp_name = $userfile['tmp_name'];
      $type = $userfile['type'];
      $name = $userfile['name'];
      $size = $userfile['size'];

      // if the upload succeded, the file will exist
      if (file_exists($tmp_name)){

        // check to make sure that it is an uploaded file and not a system file
        if(is_uploaded_file($tmp_name)){
   
            // open the file for a binary read
            $file = fopen($tmp_name,'rb');
   
            // read the file content into a variable
            $data = fread($file,filesize($tmp_name));

            // close the file
            fclose($file);
   
            // now we encode it and split it into acceptable length lines
            $data = chunk_split(base64_encode($data));
        }
   
        // now we'll insert a boundary to indicate we're starting the attachment
        // we have to specify the content type, file name, and disposition as
        // an attachment, then add the file content.
        // NOTE: we don't set another boundary to indicate that the end of the
        // file has been reached here. we only want one boundary between each file
        // we'll add the final one after the loop finishes.
        $message .= "--{$mime_boundary}\n" .
            "Content-Type: {$type};\n" .
            " name=\"{$name}\"\n" .
            "Content-Disposition: attachment;\n" .
            " filename=\"{$fileatt_name}\"\n" .
            "Content-Transfer-Encoding: base64\n\n" .
        $data . "\n\n";
      }
  }
  // here's our closing mime boundary that indicates the last of the message
  $message.="--{$mime_boundary}--\n";
  // now we just send the message
  if (@mail($to, $subject, $message, $headers))
      echo "Message Sent";
  else
      echo "Failed to send";
} else {
?>
<p>Send an e-mail with an attachment:</p>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"
  enctype="multipart/form-data" name="form1">
  <p>From name: <input type="text" name="fromname"></p>
  <p>From e-mail: <input type="text" name="fromemail"></p>
  <p>File: <input type="file" name="file1"></p>
  <p>File: <input type="file" name="file2"></p>
  <p><input type="submit" name="Submit" value="Submit"></p>
</form>
<?php } ?>

Håber i kan hjælpe. på forhånd tak.

/Daniel
Avatar billede jakobdo Ekspert
30. marts 2009 - 20:56 #1
I formen, tilføjer du disse felter:

<p>From address: <input type="text" name="fromaddress"></p>
<p>From zipcode: <input type="text" name="fromzip"></p>
<p>From phone: <input type="text" name="fromphone"></p>

Og i din mail-kode, tilføjer du:

$message="This is an example";
$message.="From address: ".$_POST['fromaddress']."\n";
$message.="From zipcode: ".$_POST['fromzip']."\n";
$message.="From phone: ".$_POST['fromphone']."\n";
Avatar billede larma Nybegynder
30. marts 2009 - 23:27 #2
Om du ikke har noen sjekk på om feltene er utfylt eller ikke, kan det også være smart å legge til noen sjekks før du samler dataene fra inputfeltene:

if (!empty($_POST['fromaddress'])) {
  $message .= "From address: " . trim($_POST['fromaddress']) . "\n";
}
if (!empty(.$_POST['fromzip'])) {
  $message .= "From zipcode: " . trim($_POST['fromzip']) . "\n";
}
if (!empty($_POST['fromphone'])) {
  $message .= "From phone: " . trim($_POST['fromphone']) . "\n";
}
Avatar billede cozey Nybegynder
31. marts 2009 - 19:29 #3
Super, takker.
Har lige et enkelt spørgsmål mere.

Hvad får jeg en Check box ind også?... hvor jeg vil medsende værdien... alt "nej" hvis unchecked og "Ja" hvis checked?

På forhånd tak.
Avatar billede jakobdo Ekspert
31. marts 2009 - 20:16 #4
Din form:
<p>Checkbox: <input type="checkbox" name="fromcheckbox"></p>

Din email:
if(isset(.$_POST['fromcheckbox'])) {
  $message .= "From checkbox: JA\n";
}else{
  $message .= "From checkbox: NEJ\n";
}
Avatar billede cozey Nybegynder
31. marts 2009 - 20:37 #5
Den giver følgende:
Parse error: syntax error, unexpected '.', expecting T_STRING or T_VARIABLE or '$'
Avatar billede cozey Nybegynder
31. marts 2009 - 20:42 #6
Det kan evt. være fordi jeg har sat det ind på en anden måde end det der er skrevet tidligere.
Her er min kode:

<?php
if ($_SERVER['REQUEST_METHOD']=="POST"){

  // we'll begin by assigning the To address and message subject
  $to="vindue@proinmotion.dk";
  $subject="Tilmelding af vindue";

  // get the sender's name and email address
  // we'll just plug them a variable to be used later
  $from = stripslashes($_POST['fromname'])."<".stripslashes($_POST['fromemail']).">";

  // generate a random string to be used as the boundary marker
  $mime_boundary="==Multipart_Boundary_x".md5(mt_rand())."x";

  // now we'll build the message headers
  $headers = "From: $from\r\n" .
  "MIME-Version: 1.0\r\n" .
      "Content-Type: multipart/mixed;\r\n" .
      " boundary=\"{$mime_boundary}\"";

  // here, we'll start the message body.
  // this is the text that will be displayed
  // in the e-mail
  $adress = stripslashes($_POST['adress']);
  $postnum = stripslashes($_POST['postnum']);
  $city = stripslashes($_POST['city']);
  $tele = stripslashes($_POST['tele']);
  $message="Navn: ".$from." \n\nadresse: ".$adress." \n\npostnummer: ".$postnum." \n\ntelefon: ".$tele." \n\nBy: ".$city."";

  // next, we'll build the invisible portion of the message body
  // note that we insert two dashes in front of the MIME boundary
  // when we use it
  $message = "This is a multi-part message in MIME format.\n\n" .
      "--{$mime_boundary}\n" .
      "Content-Type: text/plain; charset=\"iso-8859-1\"\n" .
      "Content-Transfer-Encoding: 7bit\n\n" .
  $message . "\n\n";

  // now we'll process our uploaded files
  foreach($_FILES as $userfile){
      // store the file information to variables for easier access
      $tmp_name = $userfile['tmp_name'];
      $type = $userfile['type'];
      $name = $userfile['name'];
      $size = $userfile['size'];

      // if the upload succeded, the file will exist
      if (file_exists($tmp_name)){

        // check to make sure that it is an uploaded file and not a system file
        if(is_uploaded_file($tmp_name)){
   
            // open the file for a binary read
            $file = fopen($tmp_name,'rb');
   
            // read the file content into a variable
            $data = fread($file,filesize($tmp_name));

            // close the file
            fclose($file);
   
            // now we encode it and split it into acceptable length lines
            $data = chunk_split(base64_encode($data));
        }
   
        // now we'll insert a boundary to indicate we're starting the attachment
        // we have to specify the content type, file name, and disposition as
        // an attachment, then add the file content.
        // NOTE: we don't set another boundary to indicate that the end of the
        // file has been reached here. we only want one boundary between each file
        // we'll add the final one after the loop finishes.
        $message .= "--{$mime_boundary}\n" .
            "Content-Type: {$type};\n" .
            " name=\"{$name}\"\n" .
            "Content-Disposition: attachment;\n" .
            " filename=\"{$fileatt_name}\"\n" .
            "Content-Transfer-Encoding: base64\n\n" .
        $data . "\n\n";
      }
  }
  // here's our closing mime boundary that indicates the last of the message
  $message.="--{$mime_boundary}--\n";
  // now we just send the message
  if (@mail($to, $subject, $message, $headers))
      echo "Vinduet blev tilmeldt. Du vil blive kontaktet snarest muligt!";
  else
      echo "Der opstod en fejl";
} else {
?>
<FONT face="tahoma" size="2">
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"
  enctype="multipart/form-data" name="form1">
  <p>Navn:&nbsp;&nbsp;&nbsp; <input type="text" name="fromname"></p>
  <p>E-mail:&nbsp; <input type="text" name="fromemail"></p>
  <p>Adresse: <input type="text" name="adress"></p>
  <p>Postnr.:&nbsp; <input type="text" name="postnum"></p>
  <p>By:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <input type="text" name="city"></p>
  <p>Telefon:&nbsp;&nbsp; <input type="text" name="tele"></p>
  <p>Billede 1: <input type="file" name="file1"></p>
  <p>Billede 2: <input type="file" name="file2"></p>
  <p>Ja tak, jeg vil gerne modtage nyhedsbrevet<input type="checkbox" name="fromcheckbox" checked>
  <p><input type="submit" name="Submit" value="Tilmeld"></p>
</form>
</font>
<?php } ?>


hvor skal det sættes ind henne?
Avatar billede jakobdo Ekspert
31. marts 2009 - 20:42 #7
Du skal lige fjerne . fra linjen:
if(isset(.$ <---
Avatar billede larma Nybegynder
31. marts 2009 - 20:43 #8
Du skal se på den ene if'en som jeg postet:
if (!empty(.$_POST['fromzip'])) {
  $message .= "From zipcode: " . trim($_POST['fromzip']) . "\n";
}

$_POST['fromzip'] hadde en punktum forran seg som beklagligvis ikke skal være der: Rettes til:

if (!empty($_POST['fromzip'])) {
  $message .= "From zipcode: " . trim($_POST['fromzip']) . "\n";
}

Ellers ser jeg at det samme har skjedd ved den siste kommentarn fra jakobdo. Rettet til:

if(isset($_POST['fromcheckbox'])) {
  $message .= "From checkbox: JA\n";
}else{
  $message .= "From checkbox: NEJ\n";
}
Avatar billede cozey Nybegynder
01. april 2009 - 02:29 #9
jakobdo>>>
Super, virker perfekt. tusind tak. Smid et svar så jeg kan godkende.

Larma>>>
Også tusind tak for hjælpen.
Avatar billede jakobdo Ekspert
01. april 2009 - 09:46 #10
Svar!
Avatar billede jakobdo Ekspert
01. april 2009 - 20:27 #11
Takker for point.
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