未定义的索引错误 - 调用变量后定义的索引

时间:2016-04-02 14:09:31

标签: php html css

我有以下代码段:

<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是一个按钮,允许用户单击,将发送的附件保存在本地磁盘上。

1 个答案:

答案 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

旁注:只应在暂存时进行显示错误,而不是生产。