0

ファイルをアップロードしてから、添付ファイルとして自分に送信する作業を行っています。私はphpを初めて使用します。Webで検索して、このコードを書きました。

 <?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="abc@mail.com";
  $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

何が間違っている可能性がありますか?

4

1 に答える 1

1

Foreachは配列を取り、配列の各値varnameを定義した に属性付けます。無効な引数は、有効な配列を指定しなかったことを意味します。

l.12 の場合、エラー行 88 が原因で、関数の最初の引数として配列を渡さなかったことを意味します。

あなたの問題は、まだファイルをアップロードしようとしていないため、$_FILES未定義であることだと思います。スーパーグローバル変数を使用する私の経験では、$_FILES通常、.xml 形式でファイルをアップロードする必要がありますenctype multi-part/formdata。デバッグして定義されているかどうかを確認するには、ループの前にvar_dump or print_ron を実行します。セキュリティの追加手段として、上記のループと mail_attachment 関数への呼び出しを$_FILESforeachif (isset($_FILES))

お役に立てれば

于 2013-11-14T17:34:01.207 に答える