尝试上传图片时为什么会出现此错误?

时间:2012-02-18 15:51:15

标签: php url uploading

当我使用界面转到myserver索引并从那里上传和图像时,它工作正常。但是一旦我尝试自己进入路径,就像:

http://myserver/upload.php?image['name']=F:\Bilder\6.jpg

它给我一个错误,即所有字段都是必需的。但我必须上传这样的图像,因为我计划在我正在制作的应用程序中实现它。事情是,我不熟悉php。

这是upload.php

<?php
session_start();

require("includes/conn.php");


function is_valid_type($file)
{

$valid_types = array("image/jpg", "image/jpeg", "image/bmp", "image/gif", "image/png");

if (in_array($file['type'], $valid_types))
    return 1;
return 0;
}

function showContents($array)
{
echo "<pre>";
print_r($array);
echo "</pre>";
}

$TARGET_PATH = "images/";

$image = $_FILES['image'];

$image['name'] = mysql_real_escape_string($image['name']);

$TARGET_PATH .= $image['name'];

if ( $image['name'] == "" )
{
$_SESSION['error'] = "All fields are required";
header("Location: index.php");
exit;
}

if (!is_valid_type($image))
{
$_SESSION['error'] = "You must upload a jpeg, gif, or bmp";
header("Location: index.php");
exit;
}

if (file_exists($TARGET_PATH))
{
$_SESSION['error'] = "A file with that name already exists";
header("Location: index.php");
exit;
}

if (move_uploaded_file($image['tmp_name'], $TARGET_PATH))
{
$sql = "insert into Avatar (filename) values ('" . $image['name'] . "')";
$result = mysql_query($sql) or die ("Could not insert data into DB: " .     mysql_error());

exit;
}
else
{
header("Location: index.php");
exit;
}

&GT;

和index.php

                <?php
                if (isset($_SESSION['error']))
                {
                    echo "<span id=\"error\"><p>" . $_SESSION['error'] . "</p></span>";
                    unset($_SESSION['error']);
                }
                ?>
                <form action="upload.php" method="post" enctype="multipart/form-data">
                <p>

                    <label>Avatar</label>
                    <input type="file" name="image" /><br />
                    <input type="hidden" name="MAX_FILE_SIZE" value="100000" />
                    <input type="submit" id="submit" value="Upload" />
                </p>

3 个答案:

答案 0 :(得分:1)

由于您无法通过网址发送$_GET[]个变量来上传图片,因此根本无法使用。

正如您在upload.php页面中看到的那样,该文件是通过$_FILES['image']在php页面中检索的。

如果您将其更改为$_GET['image']并重试使用您建议的get变量发布链接,您可能会看到文件的路径,但它只能作为字符串类型而不是实际上传的文件对象。

答案 1 :(得分:1)

如果您需要将内容发布到网络表单(而不是GETting,这就是您在此处所做的事情),您不能仅指定要作为URL的一部分进行POST的数据。

了解这些HTTP方法(GET和POST)以了解其中的差异。

在您的应用中,您需要做的是将内容发布到网址。根据您用于编程的工具,您应该了解如何通过POST发送数据。

另外,尝试查看curl(或libcurl)的实现是否可用于您的开发平台。

答案 2 :(得分:1)

问题在于

if ( $image['name'] == "" )

$ image没有价值。

您正在执行get请求,因此如果您想知道图像变量是什么,则应使用

$_GET['image']

另一件事是你正在做$ image = $ _FILES [&#39; image&#39;];

$ _ FILES只能从帖子请求中获得。 无法通过GET请求中的参数以您现在的方式上传文件。