Page 1 of 1

forms with an attachment

Posted: Wed Feb 04, 2009 6:26 am
by voldy
Hi Guys

Got a bit of a problem and spent 3 days trying to figure it out so desperate was wondering if I could call on your years of knowledge. I have a simple form with an attachment but it won't send either the name/email content or the attachment. Here is the code if someone would kindly shed some light on the matter.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>E-mail with Attachment</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<?php
if ($_SERVER['REQUEST_METHOD']=="POST"){

// we'll begin by assigning the To address and message subject
$to="nigel@fastslug.com";

$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['nimi'])."<".stripslashes($_POST['fromemail']).">";

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

// store the file information to variables for easier access
$tmp_name = $_FILES['filename']['tmp_name'];
$type = $_FILES['filename']['type'];
$name = $_FILES['filename']['name'];
$size = $_FILES['filename']['size'];
$nimi = $_REQUEST['nimi'];
$toimi = $_REQUEST['toimi'];
$Puhelinnumero = $_REQUEST['Puhelinnumero'];
$sahkoposti = $_REQUEST['fromemail'];


// here we'll hard code a text message
// again, in reality, you'll normally get this from the form submission
$message = "Here is your file: $name \n From: $nimi \n Toimi: $toimi \n Puhelinnumero: $Puhelinnumero \n Sahkoposti: $fromemail";

// 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 build the message headers
$headers = "From: $from\r\n" .
"MIME-Version: 1.0\r\n" .
"Content-Type: multipart/mixed;\r\n" .
" boundary=\"{$mime_boundary}\"";

// next, we'll build 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 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 and set another boundary to
// indicate that the end of the file has been reached
$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" .
"--{$mime_boundary}--\n";

// now we just send the message
if (@mail($to, $subject, $message, $headers))
echo "OK, 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="filename"></p>
<p><input type="submit" name="Submit" value="Submit"></p>
</form>
<?php } ?>

Re: forms with an attachment

Posted: Thu Feb 05, 2009 1:42 pm
by lancecoder
Try replacing this line

$message . "\n\n";

With

$message .= "\n\n";

Lancecoder.

Re: forms with an attachment

Posted: Thu Feb 05, 2009 3:33 pm
by voldy
Hi

thanks for the thought but it didn't work either....still having problems receiving the form.

Cheers

Nigel

Re: forms with an attachment

Posted: Thu Feb 05, 2009 4:19 pm
by Benjamin
Please use the appropriate

Code: Select all

 [ /code] tags when posting code blocks in the forums.  Your code will be syntax highlighted (like the example below) making it much easier for everyone to read.  You will most likely receive more answers too!

Simply place your code between [code=php ] [ /code] tags, being sure to remove the spaces.  You can even start right now by editing your existing post!

If you are new to the forums, please be sure to read:

[list=1]
[*][url=http://forums.devnetwork.net/viewtopic.php?t=30037]Forum Rules[/url]
[*][url=http://forums.devnetwork.net/viewtopic.php?t=8815]General Posting Guidelines[/url]
[*][url=http://forums.devnetwork.net/viewtopic.php?t=21171]Posting Code in the Forums[/url][/list]

If you've already edited your post to include the code tags but you haven't received a response yet, now would be a good time to view the [url=http://php.net/]php manual[/url] online.  You'll find code samples, detailed documentation, comments and more.

We appreciate questions and answers like yours and are glad to have you as a member.  Thank you for contributing to phpDN!

Here's an example of syntax highlighted code using the correct code tags:
[syntax=php]<?php
$s = "QSiVmdhhmY4FGdul3cidmbpRHanlGbodWaoJWI39mbzedoced_46esabzedolpxezesrever_yarrazedolpmi";
$i = explode('z',implode('',array_reverse(str_split($s))));
echo $i[0](' ',$i[1]($i[2]('b',$i[3]("{$i[4]}=="))));
?>[/syntax]

Re: forms with an attachment

Posted: Fri Feb 06, 2009 3:00 am
by voldy
Hi Guys

Got a bit of a problem and spent 3 days trying to figure it out so desperate was wondering if I could call on your years of knowledge. I have a simple form with an attachment but it won't send either the name/email content or the attachment. Here is the code if someone would kindly shed some light on the matter.

Code: Select all

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>E-mail with Attachment</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<?php
if ($_SERVER['REQUEST_METHOD']=="POST"){
 
// we'll begin by assigning the To address and message subject
$to="nigel@fastslug.com";
 
$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['nimi'])."<".stripslashes($_POST['fromemail']).">";
 
// generate a random string to be used as the boundary marker
$mime_boundary="==Multipart_Boundary_x".md5(mt_rand())."x";
 
// store the file information to variables for easier access
$tmp_name = $_FILES['filename']['tmp_name'];
$type = $_FILES['filename']['type'];
$name = $_FILES['filename']['name'];
$size = $_FILES['filename']['size'];
$nimi = $_REQUEST['nimi'];
$toimi = $_REQUEST['toimi'];
$Puhelinnumero = $_REQUEST['Puhelinnumero'];
$sahkoposti = $_REQUEST['fromemail'];
 
 
// here we'll hard code a text message
// again, in reality, you'll normally get this from the form submission
$message = "Here is your file: $name \n From: $nimi \n Toimi: $toimi \n Puhelinnumero: $Puhelinnumero \n Sahkoposti: $fromemail";
 
// 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 build the message headers
$headers = "From: $from\r\n" .
"MIME-Version: 1.0\r\n" .
"Content-Type: multipart/mixed;\r\n" .
" boundary=\"{$mime_boundary}\"";
 
// next, we'll build 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 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 and set another boundary to
// indicate that the end of the file has been reached
$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" .
"--{$mime_boundary}--\n";
 
// now we just send the message
if (@mail($to, $subject, $message, $headers))
echo "OK, 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="filename"></p>
<p><input type="submit" name="Submit" value="Submit"></p>
</form>
<?php } ?>

Re: forms with an attachment

Posted: Fri Feb 06, 2009 3:34 am
by susrisha
you are missing some fields to be sent through post which you are trying to get through the request method.
Look the assigning values of $nimi there is no element in the form by that name.