Jump to content

uploading picture files from a PHP form as an attachment


Recommended Posts

I would like to have an file upload on my web site that for both text and pictures (jpg, Gif, etc..). I have found and modified the two to work.
1. write the files to a data base MYSQL
2. send the files through an email.

The problem I am having is getting the files to come to me a picture (jpg, gif file. it comes as some wild code writing.

Sample:Content-Type: multipart/mixed;

boundary="==Multipart_Boundary_x8c5a55f00dfacf62b9b9d3505b535d56x"

This is a multi-part message in MIME format.

--==Multipart_Boundary_x8c5a55f00dfacf62b9b9d3505b535d56x
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: 7bit

This is an example

--==Multipart_Boundary_x8c5a55f00dfacf62b9b9d3505b535d56x
Content-Type: image/pjpeg;
name="fish.jpg"
Content-Disposition: attachment;
filename=""
Content-Transfer-Encoding: base64

/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAPAAA/+4ADkFkb2JlAGTAAAAAAf/b

AIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoKDBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxsc

Hx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f

Hx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBDAD6AwERAAIRAQMRAf/EAI8AAQEBAAIDAQEAAAAAAAAA

AAAHCAUGAQIECQMBAQAAAAAAAAAAAAAAAAAAAAAQAAEDAgMDBA8FBAcFCQAAAAEAAgMEBREGByEx

EkGVFwhRYSIyE9MUVNR1tSZWN9eBQmIjFXGRoRbBUnKCM1MkomNzNDXwsZKywoOjJVURAQAAAAAA

AAAAAAAAAAAAAAD/2gAMAwEAAhEDEQA/AKpnaeiv+e8o5bu9DT3C1G6zyy0lVEyaF5jtFeW8Ucgc

12DsHDEbwg7V0T6WfBtj5tpPFoHRPpZ8G2Pm2k8WgdE+lnwbY+baTxaB0T6WfBtj5tpPFoHR
12DsHDEbwg7V0T6WfBtj5tpPFoHRPpZ8G2Pm2k8WgdE+lnwbY+PpZ8

G2Pm2k8WgdE+lnwbY+baTxaB0T6WfBtj5tpPFoHRPpZ8G2Pm2k8WgdE+lnwbY+baTxaB0T6W
G2Pm2k8WgdE+lnwbY+baTxaB0T6WfBtj5tpPFoHRPpZ8G2Pm2k8WgdE+lnwbY+fBtj

Can you pleae help give me direction to solve the issue. I am new to PHP.

Thank you
Jeff

I can help you a little..

The function base64_decode() will decode that gibberish you see.  It needs to be called directly on the gibberish though, and not on the entire email. (notice the "Content-Transfer-Encoding: base64" - That tells you to use base64_decode on the text below)

The rest of the format is called MIME.  I'm not aware of any PHP functions to decode that for you.
hello here is the code for the attachnent. I see the base 64 applied toward the latter end. It may be that it is set in the wrong place.

Iam not sure of what to do with the $imgsrc="fish.jpg"
imagejpeg($imgsrc);

keep in mind I am new at PHP. Iam learning how by finding the code and modifying it to fit my needs. If there is a better way please let me know. Wgat I am wanting to do is to have set up on my site a place for people to upload text files and images.

I have two ways of doing this and one is to email me the attachment and the other is put it through Mysql database or I have seen another way and that is to upload it to my server. suggestions are welcomed.


This is the one for sening through an email.
<!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="administration@cafeexpress-o.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['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 } ?>
</body>
</html>
This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.