I am working to upload a file and then send it to myself as an attachment. I am new with php, I tried lookign up on the web for stuff and wrote this code.
<?php
function mail_attachment($files, $path, $mailto, $subject, $message) {
$uid = md5(uniqid(time()));
$header = "MIME-Version: 1.0rn";
$header .= "Content-Type: multipart/mixed; boundary="".$uid.""rnrn";
$header .= "This is a multi-part message in MIME format.rn";
$header .= "Content-type:text/plain; charset=iso-8859-1rn";
$header .= "Content-Transfer-Encoding: 7bitrnrn";
$header .= $message."rnrn";
foreach ($files as $filename) {
$file = $path.$filename;
$name = basename($file);
$file_size = filesize($file);
$handle = fopen($file, "r");
$content = fread($handle, $file_size);
fclose($handle);
$content = chunk_split(base64_encode($content));
$header .= "--".$uid."rn";
$header .= "Content-Type: application/octet-stream; name="".$filename.""rn"; // use different content types here
$header .= "Content-Transfer-Encoding: base64rn";
$header .= "Content-Disposition: attachment; filename="".$filename.""rnrn";
$header .= $content."rnrn";
}
$header .= "--".$uid."--";
if (@mail($mailto, $subject, $message, $header)) {
echo "mail send ... OK";
} else {
echo "mail send ... ERROR!";
}
}
//Enter your email address here
$mailto="[email protected]";
$subject="Form Details";
$FirstName = $_POST['firstName'] ;
$LastName = $_POST['lastName'] ;
$EmailAdress= $_POST['emailAddress'] ;
$ContactNumber= $_POST['contactNumber'] ;
$ApartmentType= $_POST['apartmentType'] ;
$ApartmentLocation = $_POST['apartmentLocation'] ;
$CheckIn = $_POST['checkIn'] ;
$CheckOut = $_POST['checkOut'] ;
$NumberOfAdults = $_POST['numberOfAdults'] ;
$NumberOfChildren = $_POST['numberOfChildren'] ;
$TermsAndConditions =$_POST['termsAndConditions'];
$required = array('firstName','lastName','emailAddress','contactNumber','apartmentType','apartmentLocation','checkIn','checkOut','numberOfAdults','numberOfChildren');
$error = false;
foreach($required as $field) {
if (empty($_POST[$field])) {
$error = true;
}
}
if ($error) {
echo "All fields are required.";
exit;
}
if ( $TermsAndConditions=='disagree') {
echo "Please agree to the terms and conditions";
exit;
}
$message="First Name:t $FirstName nn" .
"Last Name:t $LastNamenn".
"Email Address:t $EmailAddress nn".
"Contact Number:t $ContactNumber nn".
"Apartment Types:t $ApartmentType nn".
"Apartment Location:t $ApartmentLocation nn" .
"Check in:t $CheckIn nn" .
"Check out:t $CheckOut nn" .
"Number of Adults:t $NumberOfAdults nn" .
"Number of Children:t $NumberOfChildren nn";
$uploaddir = './';
$x=0;
foreach ($_FILES["documents"]["error"] as $key => $error)
{
if ($error == UPLOAD_ERR_OK) {
$tmp_name = $_FILES["documents"]["tmp_name"][$key];
$name = basename($_FILES["pictures"]["name"][$key]);
$files[$x]=$name;
$x++;
move_uploaded_file($tmp_name, $uploaddir.$name);
}
}
$path = $_SERVER['DOCUMENT_ROOT'];
mail_attachment($files, $path, $mailto, $subject, $message);
?>
I get an error for both the foreach:
Warning: Invalid argument supplied for foreach() in /home/a4824849/public_html/PhpFile.php on line 88
Warning: Invalid argument supplied for foreach() in /home/a4824849/public_html/PhpFile.php on line 12
What could possibly be wrong?
Foreach
takes arrays and attributes each value of the array to thevarname
that you define. Invalid Argument simply means that the you did not provide a valid array.For l.12, it simply means that you did not pass an array as the first arg to your function, which is due to your error line 88.
I would assume that your problem is that you haven't yet tried uploading a file and thus
$_FILES
is undefined. In my experience to use the$_FILES
superglobal variable you usually have to upload a file via a form ofenctype multi-part/formdata
. To debug and check if it's defined do avar_dump or print_r
on$_FILES
before yourforeach
loop. As an added measure of security you might want to wrap said loop and your call to your mail_attachment function in anif (isset($_FILES))
Hope this helps