提交表单后 $_FILES 为空 [重复]
Posted
技术标签:
【中文标题】提交表单后 $_FILES 为空 [重复]【英文标题】:$_FILES empty after form submission [duplicate] 【发布时间】:2013-02-14 07:50:19 【问题描述】:我正在使用标准的 php 函数来上传文件以用作 PHPMailer 的附件。
<form name="upload" method="post" action="send_form_email3.php">
<div class="con3">
<div class="lable">
<label for="first_name">First Name *</label>
</div>
<input type="text" name="first_name" id="first_name" class="span4">
<div class="lable">
<label for="email">Email Address *</label>
</div>
<input type="text" name="email" id="email" class="span4">
<div class="lable">
<label for="telephone">Contact Number *</label>
</div>
<input type="text" name="telephone" id="telephone" class="span4">
<div class="lable">
<label for="comments">Message *</label>
</div>
<textarea name="comments" rows="8" id="comments" class="span4"></textarea>
<div class="lable">
<label for="upload">Send Us Your CV *</label>
</div>
<input type="file" name="upload" id="upload" />
<input type="submit" value="Submit" class="btn btn-success">
</div>
</form>
这个表单被提交到下面的 php 处理程序,邮件在这里被构建和发送:
<?php
require_once("class.phpmailer.php");
$first_name = $_POST['first_name']; // required
$email_from = $_POST['email']; // required
$telephone = $_POST['telephone']; // required
$comments = $_POST['comments']; // required
echo "just got form values<br />";
echo $_FILES['upload']['name'].'<br />';
$email_message = "Form details below.<br />";
function clean_string($string)
$bad = array("content-type","bcc:","to:","cc:","href");
return str_replace($bad,"",$string);
$email_message .= "Name: ".clean_string($first_name)."\n";
$email_message .= "Email: ".clean_string($email_from)."\n";
$email_message .= "Contact: ".clean_string($telephone)."\n";
$email_message .= "Message:\n".clean_string($comments)."\n";
echo "added text to email<br />";
$target_path = "uploads/";
$target_path = $target_path . basename( $_FILES['upload']['name']);
// upload the file
echo "target = ".$target_path."<br />";
if (isset($_FILES['upload']['size']))
if ($_FILES['upload']['size'] > 0)
echo 'file size: '.basename($_FILES['upload']['size']).'<br />';
if (move_uploaded_file($_FILES['upload']['name'], $target_path))
echo "The file ". basename( $_FILES['upload']['name'])." has been uploaded<br />";
// adding an already existing file as an attachment to the email for debugging purposes.
$email->AddAttachment('uploads/CreditReportViewer.pdf');
else
echo "There was an error uploading the file, please try again!<br /> ".basename($_FILES['upload']['error']);
else
echo "There was an error uploading the file, please try again!<br />";
else
echo "No file was found for the upload.<br />";
$email = new PHPMailer();
$email->To = "me@this.com";
$email->From = $email_from;
$email->FromName = $first_name;
$email->Subject = "New Message from Website";
$email->Body = $email_message;
echo "\n mail built...<br />";
$email->Send();
echo "mail sent!";
?>
问题是$_FILES['upload']['name']
没有设置。这是正在写入浏览器的回声:
刚刚得到表单值
向电子邮件添加文本 目标 = 上传/ 找不到要上传的文件。 邮件内置... 邮件已发送!
这让我觉得我引用了文件上传字段或上传本身不正确。
如果这不是最好的方法,任何人都可以在这里看到任何问题或提供一些指导吗?
【问题讨论】:
将 enctype="multipart/form-data" 添加到您的表单中 ^^^ 这个很常见的错误 Dagon 我想可能是 - 当我看到答案时。这是我第一次处理文件上传,所以我想这次我可以原谅:D 【参考方案1】:你必须添加,
enctype= "multipart/form-data"
将您的表单更改为,
<form name="upload" method="post" action="send_form_email3.php" enctype= "multipart/form-data">
【讨论】:
尽管我在过去 3 年中掌握了图像上传,但自 2 小时以来我一直在为同样的错误而努力,结果我没有写enctype
。感觉好蠢。。
这对我整整一个下午的头发都很有帮助。但奇怪的是,我敢肯定它过去没有这个也可以工作。【参考方案2】:
将enctype
添加到您的表单中:
改变:
<form name="upload" method="post" action="send_form_email3.php">
到
<form name="upload" method="post" action="send_form_email3.php" enctype="multipart/form-data">
【讨论】:
【参考方案3】:另一个提示:如果 upload_max_filesize (php.ini) 小于用户选择的文件,$_FILES 将为空。
【讨论】:
【参考方案4】:您忘记在表单声明中设置多部分。
在表单中添加enctype="multipart/form-data"
。
【讨论】:
【参考方案5】:您应该在表单中添加enctype=multipart/form-data
。
<form name="upload" method="post" action="send_form_email3.php" enctype="multipart/form-data">
因为它是作为 MIME 流传输的,与普通 POST 格式完全不同
What does enctype='multipart/form-data' mean?
【讨论】:
太棒了,文件现在正在上传......有点......虽然上传仍然失败......即if (move_uploaded_file($_FILES['upload']['name'], $target_path))
返回false。虽然 apache 的错误日志中没有任何线索......【参考方案6】:
如果您添加了 enctype 但仍然无法正常工作 - 请检查 PHP 文件权限。在 ooowebhost 中,您可以在 chmod 中找到它。更改为“777”。否则,该文件无权执行/写入
【讨论】:
以上是关于提交表单后 $_FILES 为空 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
在 MVC 5 模型中提交表单在控制器发布方法中为空 [重复]