2013-11-14 63 views
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 

怎麼可能是錯的?

+2

哪裏'$ files'從何而來?在調用函數之前,在foreach中的'$ files'應該是'Array()'或'Object' –

+0

''var_dump($ files)'' - 它顯示了什麼?你只是在'if'子句中爲'$ files'設置一個值,所以如果沒有附加文件或者uplaod文件,'$ files'中沒有任何東西需要處理;但你總是調用這個函數。 – andrewsi

回答

1

Foreach將陣列和屬性的每個值設置爲您定義的varname。無效的參數意味着你沒有提供一個有效的數組。

對於L.12,它只是意味着你沒有通過數組作爲第一個參數,以你的函數,這是由於您的錯誤線路88

我會假設你的問題是你的避風港還沒有嘗試上傳文件,因此$_FILES未定義。根據我的使用$_FILES超全局變量的經驗,您通常需要通過enctype multi-part/formdata的形式上傳文件。要調試並檢查它是否已定義,請在foreach循環之前在$_FILES上執行var_dump or print_r。作爲一個附加的安全性的措施你可能想說環路和您的電話換到你的mail_attachment功能在if (isset($_FILES))

希望這有助於

相關問題