elamunyon Posted December 7, 2009 Share Posted December 7, 2009 Hello, I am a newbie trying to make a website contact form with attachments that is sent to our email address when the user submits. In addition, I am trying to force the user to enter all their information before it will send. I have managed to get the error page to display when the fields are empty, however, when I fill them in, I still get the error page, not the message sent page I want. Please Help!!! <?php if ($_SERVER['REQUEST_METHOD']=="POST"){ // assign the To address and message subject $to="[email protected]"; $subject="Record of Survey"; $fileatt_name=""; $phone=($_POST['fromphone']); $company=($_POST['fromcompany']); $name=($_POST['fromname']);; // 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']).">".stripslashes($_POST['fromphone']).">".stripslashes($_POST['fromcompany']).">"; // generate a random string to be used as the boundary marker $mime_boundary="==Multipart_Boundary_x".md5(mt_rand())."x"; // 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="Efile: Record of Survey\n $name\n $phone\n $company\n"; // 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)); } $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"; if(!isset($from)) { } elseif (!empty($from)) { echo "Oops, please fill out all information\n"; } else // now we just send the message if (@mail($to, $subject, $message, $headers)){ echo "<font face=verdana size=2>Message Sent</font>"; } else { echo "Failed to send"; } }else { ?> </td> </tr> </table> <table style="position:absolute;top:180px;left:30px;width:740px;"table bgcolor="#FFFFFF" bordercolor="#5b2e00" border = "3px solid"> <tr> <td style="text-align:center;"> <p>E-File Your Survey(s):</p> <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data" name="form1"> <p>Name*: <input type="text" name="fromname"></p> <p>Email*: <input type="text" name="fromemail"></p> <p>Phone Number*: <input type="text" name="fromphone"></p> <p>Company*: <input type="text" name="fromcompany"></p> <p>File: <input type="file" name="file1"></p> <p>File: <input type="file" name="file2"></p> <p>File: <input type="file" name="file3"></p> <p>File: <input type="file" name="file4"></p> <p><input type="submit" name="Submit" value="Submit"></p> <p><h2>*REQUIRED</h2></p> </td> </tr> </table> </form> <?php } ?> </body> </html> Link to comment https://forums.phpfreaks.com/topic/184292-email-form/ Share on other sites More sharing options...
mrMarcus Posted December 7, 2009 Share Posted December 7, 2009 i put your code in code tags .. somebody might look at it now: <?php if ($_SERVER['REQUEST_METHOD']=="POST"){ // assign the To address and message subject $to="[email protected]"; $subject="Record of Survey"; $fileatt_name=""; $phone=($_POST['fromphone']); $company=($_POST['fromcompany']); $name=($_POST['fromname']);; // 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']).">".stripslashes($_POST['fromphone']).">".stripslashes($_POST['fromcompany']).">"; // generate a random string to be used as the boundary marker $mime_boundary="==Multipart_Boundary_x".md5(mt_rand())."x"; // 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="Efile: Record of Survey\n $name\n $phone\n $company\n"; // 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)); } $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"; if(!isset($from)) { } elseif (!empty($from)) { echo "Oops, please fill out all information\n"; } else // now we just send the message if (@mail($to, $subject, $message, $headers)){ echo "<font face=verdana size=2>Message Sent</font>"; } else { echo "Failed to send"; } }else { ?> </td> </tr> </table> <table style="position:absolute;top:180px;left:30px;width:740px;"table bgcolor="#FFFFFF" bordercolor="#5b2e00" border = "3px solid"> <tr> <td style="text-align:center;"> <p>E-File Your Survey(s):</p> <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data" name="form1"> <p>Name*: <input type="text" name="fromname"></p> <p>Email*: <input type="text" name="fromemail"></p> <p>Phone Number*: <input type="text" name="fromphone"></p> <p>Company*: <input type="text" name="fromcompany"></p> <p>File: <input type="file" name="file1"></p> <p>File: <input type="file" name="file2"></p> <p>File: <input type="file" name="file3"></p> <p>File: <input type="file" name="file4"></p> <p><input type="submit" name="Submit" value="Submit"></p> <p><h2>*REQUIRED</h2></p> </td> </tr> </table> </form> <?php } ?> </body> </html> EDIT: remove the @ from the mail function. you do not want to suppress any errors that might be showing. if you implement proper error handling, there is really no reason to suppress errors like that. Link to comment https://forums.phpfreaks.com/topic/184292-email-form/#findComment-973002 Share on other sites More sharing options...
mrMarcus Posted December 7, 2009 Share Posted December 7, 2009 error page? or error message: "Oops, please fill out all information\n"? this is your problem: elseif (!empty($from)) { echo "Oops, please fill out all information\n"; } the ! is like saying, "If $from is NOT empty, display the error message stating it is." simply remove the ! from !empty: elseif (empty($from)) { echo "Oops, please fill out all information\n"; } or better yet, just combine the two: <?php if (!isset ($from) || (empty ($from))) { echo "Oops, please fill out all information\n"; } else { // now we just send the message if (mail($to, $subject, $message, $headers)){ echo "<font face=verdana size=2>Message Sent</font>"; } else { echo "Failed to send"; } } //continue with code; ?> Link to comment https://forums.phpfreaks.com/topic/184292-email-form/#findComment-973007 Share on other sites More sharing options...
elamunyon Posted December 7, 2009 Author Share Posted December 7, 2009 Hello! I took your advice and combined the two and changed the empty function. However, the form is still sending an email when fields are empty. The error page is not even showing up now. It just sends a blank email. What is wrong here? By the way, how do I put my code in code tags so people will look at it? Sorry, very new to this:) <?php if ($_SERVER['REQUEST_METHOD']=="POST"){ // we'll begin by assigning the To address and message subject $to="[email protected]"; $subject="Record of Survey"; $fileatt_name=""; $phone=($_POST['fromphone']); $company=($_POST['fromcompany']); $name=($_POST['fromname']);; // 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']).">".stripslashes($_POST['fromphone']).">".stripslashes($_POST['fromcompany']).">"; // 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="Efile: Record of Survey\n $name\n $phone\n $company\n"; // 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"; if (!isset ($from) || (empty ($from))) { echo "Oops, please fill out all information\n"; } else { // now we just send the message if (mail($to, $subject, $message, $headers)){ echo "<font face=verdana size=2>Message Sent</font>"; } else { echo "Failed to send"; } } }else{ ?> </td> </tr> </table> <table style="position:absolute;top:180px;left:30px;width:740px;"table bgcolor="#FFFFFF" bordercolor="#5b2e00" border = "3px solid"> <tr> <td style="text-align:center;"> <p>E-File Your Survey(s):</p> <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data" name="form1"> <p>Name*: <input type="text" name="fromname"></p> <p>Email*: <input type="text" name="fromemail"></p> <p>Phone Number*: <input type="text" name="fromphone"></p> <p>Company*: <input type="text" name="fromcompany"></p> <p>File: <input type="file" name="file1"></p> <p>File: <input type="file" name="file2"></p> <p>File: <input type="file" name="file3"></p> <p>File: <input type="file" name="file4"></p> <p><input type="submit" name="Submit" value="Submit"></p> <p><h2>*REQUIRED</h2></p> </td> </tr> </table> </form> <?php } ?> </body> </html> Link to comment https://forums.phpfreaks.com/topic/184292-email-form/#findComment-973059 Share on other sites More sharing options...
elamunyon Posted December 7, 2009 Author Share Posted December 7, 2009 Okay, I think I got it working! Thanks to those who answered my question!! f (!isset ($phone) || (empty ($phone))) { echo "<font face=verdana size=4>Please fill out all fields</font> <a href=\"http://localhost:8080/efile_TEST1.php\">(Return to Form</a>)"; } else { // now we just send the message if (mail($to, $subject, $message, $headers)){ echo "<font face=verdana size=5>Thank You!! Message Sent</font>"; } else { echo "Failed to send"; } Link to comment https://forums.phpfreaks.com/topic/184292-email-form/#findComment-973098 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.