我有以下代码段:
<div class="message_display_here">
<?php
// check if file is empty
if ($_FILES['attachment']['size'] == 0 && $_FILES['attachment']['error'] == 0) {
// no file attached, so do nothing
} else {
echo "
<form action='inc/download_attachment.php' method='post'>
<button type='submit' name='save'> Download</button>
</form>";
}
?>
</div>
<div id="write_message_area">
<?php
if ($user == "") {
// display nothing
} else {
echo "<input id='file-input name='attachment' type='file' style='margin-left:15px;'/>";
}
?>
</div>
您可以输入类型文件attachment
在此之后定义:
if ($_FILES['attachment']['size'] == 0 && $_FILES['attachment']['error'] == 0){
但是无法将write_message_area
中的内容移动到上面的代码行之上,因为它们是两个独立的div,它会影响CSS。
为了澄清,我在这一行得到了一个未定义的索引错误:
if ($_FILES['attachment']['size'] == 0 && $_FILES['attachment']['error'] == 0){
我知道为什么我会收到错误,但是我不知道如何在不将内容从一个div转移到另一个div的情况下修复它,我不想这样做。
为什么我有两种表格:
表单1 (在write_message_area
中):
用户需要表单1才能向其他用户发送消息。
<?php
echo "
<form action='messages.php?u=$user' method='post'>
<textarea name='msg_body' rows='3' maxlength='255' cols='110' placeholder='Send message...'></textarea>
<input type='submit' name='send' value='Send'/>
<input id='file-input' name='attachment' type='file' style='margin-left:15px;'/>
</form>";
?>
表单2 (位于message_displayed_here
):
<form action='inc/download_attachment.php' method='post' enctype='multipart/form-data'>
<button type='submit' name='save'> Download</button>
</form>";
因此,用户使用表单1键入其消息并添加附件(如果需要)。如果用户已上传附件,则表单2将显示在每个single_message帖子的div中。表单2是一个按钮,允许用户单击,将发送的附件保存在本地磁盘上。
答案 0 :(得分:0)
首先,表单中没有有效的enctype来处理文件,所以添加它;它是必需的。
<form action='inc/download_attachment.php' method='post' enctype='multipart/form-data'>
参考:http://php.net/manual/en/features.file-upload.post-method.php
另外,说实话;我不知道你在表单标签之外输入的内容是什么。输入需要是表单的一部分。
您可能希望将</form>
标记移至输入后。
此外,您在此处缺少引用<input id='file-input
&lt;&lt;&lt;
应该读作<input id='file-input'
引用评论:
&#34;您需要查看$ _FILES [&#39;附件&#39;],而不是$ _FILES [&#39;附件&#39;] [&#39;尺寸&#39; ]。另外,使用if(isset($ _ FILES [&#39; attachment&#39;]))。当您加载页面时,在提交表单之前,$ _FILES没有索引。&#34;
&#34;但实际上 - 您必须删除该表单中的条件,因为只有在提交文件时才显示表单,但如果表单未显示,则如何提交文件?除非提交表格在另一页。 - fusion3k&#34;
编辑:仔细查看条件语句后。
你的逻辑已关闭。
['error'] == 0
表示值:0;没有错误,文件上传成功。根据手册
所以摆脱它并检查空虚,以及我在原始答案中已经说过的内容。
if (
!empty($_FILES['attachment'])
&& $_FILES['attachment']['size'] == 0
) {
// do something
}
或者,使用['error'] == 0)
否定运算符将['error'] != 0)
更改为!
。
然后检查错误级别。请参阅手册:
将error reporting添加到文件的顶部,这有助于查找错误。
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// Then the rest of your code
旁注:只应在暂存时进行显示错误,而不是生产。