Отправить $ _FILES [‘name’] по электронной почте в виде списка

После того, как пользователь завершил загрузку нескольких файлов, я отображаю файлы, загруженные на экран. Я также пытаюсь включить этот же список в текст письма. Абсолютно все работает, включая отображение каждого файла на экране, за исключением того, что $ message_body перечисляет только последнее имя файла в массиве. Есть идеи??

<!DOCTYPE html>
<html>
<head>
<title>upload</title>
</head>
<body>
<?php

if(isset($_POST['ship-it']) AND $_POST['ship-it'] === "yes") {
$yesupload = $_POST['ship-it'];
preg_match("/yes/", "".$yesupload."");

for($i=0; $i<count($_FILES['tray']['name']); $i++) {
$filename = $_FILES['tray']['name'][$i];
$s_name = $_FILES['tray']['tmp_name'][$i];
move_uploaded_file($s_name, 'https://example.com/inbox/'.$filename.'');
}
$info = $_SERVER['HTTP_USER_AGENT'];
$message_body = "".$_POST["email"]." uploaded the file: ".$_FILES['tray']['name']."https://example.com/inbox/".rawurlencode($filename)."
User Agent: ".$_POST["id"]." ".$info."";

$mail_options = [
'sender' => 'sender@gmail.com',
'to' => 'receiver@gmail.com',
'subject' => 'new file sent',
'textBody' => $message_body
];

try {
$message = new Message($mail_options);
$message->send();
} catch (InvalidArgumentException $e) {
echo 'error: ';
}
echo "<p>All done. Here's what you sent:</p>";
for($i = 0; $i < count($_FILES['tray']['name']); $i++)
{
echo "<ul style='list-style-type:square'>
<li>{$_FILES['tray']['name'][$i]}</li>
</ul>";
}
}
?>
<form action="<?php echo $upload_url?>" method="post" enctype="multipart/form-data">
<p>Files to upload: </p> <br>
<input type="hidden" name="ship-it" value="yes">
<input type="hidden" name="id" value="<?php echo $_SERVER['REMOTE_ADDR']?>">
<input type="email" name="email" required="" autofocus placeholder="Your email address"><br><br>
<input type="file" multiple name="tray[]"  required="">
<input  type="submit" value="Upload"><br><br>
</form>
</body>
</html>

1

Решение

У вас уже есть цикл, который отображает имена файлов на веб-странице. Вам нужен подобный цикл для хранения имен файлов в $message_body, Вы можете включить это в цикл, который у вас уже есть для перемещения загруженных файлов. Возможно, что-то вроде этого:

$message_body = "".$_POST["email"]." uploaded these files:\n";

for($i=0; $i<count($_FILES['tray']['name']); $i++) {

$filename = $_FILES['tray']['name'][$i];
$s_name = $_FILES['tray']['tmp_name'][$i];
move_uploaded_file($s_name, 'https://example.com/inbox/'.$filename.'');

$message_body .= "* " . $_FILES['tray']['name'][$i]
.  "-> https://example.com/inbox/" . rawurlencode($filename)
.  "\n";
}
1

Другие решения

Ваш предыдущий код, кажется, лечить $_FILES['tray']['name'] как массив. Вы пытались разложить его запятыми, чтобы превратить его из массива в строку:

 $message_body = "".$_POST["email"]." uploaded the file: ".implode(", ",$_FILES['tray']['name'])."https://example.com/inbox/".rawurlencode($filename)."
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector