1
我正在努力上傳文件,然後將其作爲附件發送給我自己。我是新的PHP,我試圖在網上查找東西,並寫下了這段代碼。警告:在php中爲foreach()提供的參數無效
<?php
function mail_attachment($files, $path, $mailto, $subject, $message) {
$uid = md5(uniqid(time()));
$header = "MIME-Version: 1.0\r\n";
$header .= "Content-Type: multipart/mixed; boundary=\"".$uid."\"\r\n\r\n";
$header .= "This is a multi-part message in MIME format.\r\n";
$header .= "Content-type:text/plain; charset=iso-8859-1\r\n";
$header .= "Content-Transfer-Encoding: 7bit\r\n\r\n";
$header .= $message."\r\n\r\n";
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."\r\n";
$header .= "Content-Type: application/octet-stream; name=\"".$filename."\"\r\n"; // use different content types here
$header .= "Content-Transfer-Encoding: base64\r\n";
$header .= "Content-Disposition: attachment; filename=\"".$filename."\"\r\n\r\n";
$header .= $content."\r\n\r\n";
}
$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 \n\n" .
"Last Name:\t $LastName\n\n".
"Email Address:\t $EmailAddress \n\n".
"Contact Number:\t $ContactNumber \n\n".
"Apartment Types:\t $ApartmentType \n\n".
"Apartment Location:\t $ApartmentLocation \n\n" .
"Check in:\t $CheckIn \n\n" .
"Check out:\t $CheckOut \n\n" .
"Number of Adults:\t $NumberOfAdults \n\n" .
"Number of Children:\t $NumberOfChildren \n\n";
$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);
?>
我得到雙方的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
怎麼可能是錯的?
哪裏'$ files'從何而來?在調用函數之前,在foreach中的'$ files'應該是'Array()'或'Object' –
''var_dump($ files)'' - 它顯示了什麼?你只是在'if'子句中爲'$ files'設置一個值,所以如果沒有附加文件或者uplaod文件,'$ files'中沒有任何東西需要處理;但你總是調用這個函數。 – andrewsi