PHP文件上传 $_FILES 未定义索引错误

13
<?php

$name = $_FILES["file"]["name"];
//$size = $_FILES['file']['size']
//$type = $_FILES['file']['type']


$tmp_name = $_FILES['file']['tmp_name'];

$error = $_FILES['file']['error'];

if (isset ($name)) {
    if (!empty($name)) {

    $location = 'uploads/';

    if  (move_uploaded_file($tmp_name, $location.$name)){
        echo 'Uploaded';    
        }

        } else {
          echo 'please choose a file';
          }
    }
?>

<form action="upload.php" method="POST" enctype="multipart/form-data">
    <input type="file" name="file"><br><br>
    <input type="submit" value="Submit">
</form>

我收到一个“Notice: Undefined index”错误信息。 表单标记中包含了enctype,所以我无法弄清楚它是什么.. 有人可以帮我吗?


你的整个代码是在一个文件中,还是分成了两个不同的文件? - Funk Forty Niner
1
@Fred -ii- 在单个逗号中,200%。 - voodoo417
我同意。我正要发布一个类似的答案,但下面已经有人处理了。@voodoo417 - Funk Forty Niner
实际上,我改变了主意。我在下面发布了一个可工作的副本。@voodoo417 - Funk Forty Niner
6个回答

10

如果没有上传任何内容,第一个任务会抛出警告,并且isset测试有点无用。您可以按如下方式更改您的代码

<?php

if (isset($_FILES["file"]["name"])) {

    $name = $_FILES["file"]["name"];
    $tmp_name = $_FILES['file']['tmp_name'];
    $error = $_FILES['file']['error'];

    if (!empty($name)) {
        $location = 'uploads/';

        if  (move_uploaded_file($tmp_name, $location.$name)){
            echo 'Uploaded';
        }

    } else {
        echo 'please choose a file';
    }
}
?>

<form action="test.php" method="POST" enctype="multipart/form-data">
    <input type="file" name="file"><br><br>
    <input type="submit" value="Submit">
</form>

谢谢!未定义索引错误已经消失,但现在我得到了这个错误: - michAmir
警告:move_uploaded_file(uploads/testhoes.jpg):无法打开流:在/var/www/upload.php的第14行中没有此文件或目录。警告:move_uploaded_file():无法将'/tmp/phpnvksz8'移动到'uploads/testhoes.jpg',在/var/www/upload.php的第14行。 - michAmir
抱歉,上述错误有两个,但我不知道如何在它们之间加入空格。 - michAmir
1
上传目录必须存在并具有写入权限(即755)。 - Philipp

5

上传文件时出现了 PHP 中的“Undefined Index”错误
这是由于文件大小超过了最大限制
需要更改 php.ini 文件中的设置

`max_execution_time` = 300  
`max_input_time` = 240  
`post_max_size` = 128M
`upload_max_filesize` = 128M

根据您的需求进行更改。


谢谢你,@Randeep Singh。 - always-a-learner
位于xampp中的位置:xampp/php/php.ini - vidur punj

4
<form action="test.php" method="POST" enctype="multipart/form-data"> /* mistake here: change test.php to your source: upload.php */
    <input type="file" name="file"><br><br>
    <input type="submit" value="Submit">
</form>

3
如果您将整个代码作为一个文件(我猜想是这样的),则需要使用条件语句来执行以下操作,我在发布之前进行了测试并且可以正常工作。
此外,请确保您的“uploads”文件夹具有适当的写入权限并且存在。
<?php

if(isset($_POST['submit'])){
$name = $_FILES["file"]["name"];
//$size = $_FILES['file']['size']
//$type = $_FILES['file']['type']

$tmp_name = $_FILES['file']['tmp_name'];
$error = $_FILES['file']['error'];

if (isset ($name)) {
    if (!empty($name)) {

    $location = 'uploads/';

    if  (move_uploaded_file($tmp_name, $location.$name)){
        echo 'Uploaded';    
        }

        } else {
          echo 'please choose a file';
          }
    }
}
?>

<form action="" method="POST" enctype="multipart/form-data">
    <input type="file" name="file"><br><br>
    <input type="submit" name="submit" value="Submit">
</form>

注释:

我添加了一个条件语句:

if(isset($_POST['submit']))

我把提交按钮命名为:(与isset()条件语句一起使用)

<input type="submit" name="submit" value="Submit">

注意:如果你确实将你的代码分成两个不同的文件来使用,那么你可以简单地复制本答案中的PHP代码,并将你现有的提交按钮设置在一个单独的HTML表单中,命名为name="submit"(例如,将你的表单命名为upload_form.htm),如我上面所示,同时保留action="upload.php"并相应地命名PHP上传处理程序文件。


你还没有回答我的问题。@user3221348 - Funk Forty Niner
“uploads”文件夹。不是“upload”。你的代码使用了复数形式。@user3221348 - Funk Forty Niner
我理解你没有在过去的5分钟内回复我,所以它应该是正常工作的。@user3221348 - Funk Forty Niner
你是想通过网络还是本地机器来完成这个操作?此外,该文件夹需要设置为chmod 755777以便进行写入。@user3221348 - Funk Forty Niner
不好意思,我在服务器的不同位置尝试了一下。这是阿姆斯特丹大学的一个任务,我们正在小组中合作完成。有一个名为 /var/www 的目录,网站将放置在其中,每个小组成员都有自己的文件夹可以工作,即 /home/michael。我在这两个文件夹中都尝试过了。/var 中还有一个 tmp 文件夹。 - michAmir
显示剩余16条评论

1
1. You hadn't mention name value in your submit button.
2. Use isset function.

<html>
<body>

<form action="" method="POST" enctype="multipart/form-data">
    <input type="file" name="file"><br><br>
    <input type="submit" value="Submit" name="submit">
</form>

</body>
</html>



<?php

if(isset($_POST['submit'])){

$name = $_FILES["file"]["name"];

echo $name;


//$size = $_FILES['file']['size']
//$type = $_FILES['file']['type']


$tmp_name = $_FILES['file']['tmp_name'];

$error = $_FILES['file']['error'];

if (isset ($name)) {
    if (!empty($name)) {

    $location = 'uploads/';

    if  (move_uploaded_file($tmp_name, $location.$name)){
        echo 'Uploaded';    
        }

        } else {
          echo 'please choose a file';
          }
    }
}       
?>

0
// Count total files
$countfiles = count($_FILES['event_Img']['name']);
for($i=0;$i<$countfiles;$i++){
    $filename = $_FILES['event_Img']['name'][$i];

    // Get extension
    $ext = end((explode(".", $filename)));
    move_uploaded_file($_FILES['event_Img']['tmp_name'][$i], "uploads/".$filename);
    $sqlBrand = 'INSERT INTO ot_event_images 
                SET 
                event_id=:event_id, 
                imagepath=:imagepath, 
                imagemimetype=:imagemimetype';
    $query2 = $conn->prepare($sqlBrand);
    $query2->bindParam(':event_id', $eventid);
    $query2->bindParam(':imagepath', $filename);
    $query2->bindParam(':imagemimetype', $ext);
    $status2 = $query2->execute();
}
if($status2)
{

    echo "File upload successfully";
}
else
{
    echo "error";
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接