move_uploaded_file发出错误

时间:2012-05-07 05:32:50

标签: php

这是我的表单

<form action="test.php" method="post" name="myform"> 
<table width="500" border="0">
  <tr>
    <td width="369" colspan="3">Admin's Area </td>
    <td width="121"><?php echo $_SESSION['name'];?></td>
  </tr>
  <tr>
    <td colspan="3">sponseres list </td>
    <td><a href="admin.php#sponserForm">+Add new Sponser</a></td>
  </tr>
  <tr>
    <td colspan="3"><?php echo $sponsere_list; ?></td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td align="center" colspan="4"> <a name="sponserForm" id="sponserForm"></a> Add New Sponser Form</td>
  </tr>
  <tr>
    <td align="left">Sponser name</td>
    <td align="left"><input type="text" name="spname" id="spname" tabindex="1" /></td>
    <td colspan="2" align="center">&nbsp;</td>
    </tr>
  <tr>
    <td align="left">Image</td>
    <td align="left"><input type="file" name="fileToUpload" /></td>
    <td colspan="2" align="center">&nbsp;</td>
    </tr>
  <tr>
    <td align="left">Add this</td>
    <td align="left"><input type="submit" name="sumit" id="sumit" value="Submit" tabindex="3" /></td>
    <td colspan="2" align="center">&nbsp;</td>
    </tr>
  <tr>
    <td align="center" colspan="4">&nbsp;</td>
  </tr>
</table>
</form>

,这是用于检索它的PHP代码

<?php 
if(isset($_POST['spname'])){
    $spname=mysql_real_escape_string($_POST['spname']);
    $user_query = "INSERT INTO `sponsers` (`spname`)
                                    VALUES ('{$spname}')
                                    ";
    $sql=mysql_query($user_query)or die (mysql_error());
    $spic= mysql_insert_id();
    $newname="$spic.jpg";
    move_uploaded_file($_FILES["fileToUpload"]["tmp_name"],"../sponsers/$newname")or die (mysql_error());
    }
?>

当我尝试上传图片时,它会向我显示此警告消息 注意:未定义的索引:第3行的J:\ xampp \ htdocs \ srimag \ admin \ test.php中的fileToUpload

所以我尝试使用$ _POST [&#39; fileToUpload&#39;]来回显fileToUpload值,它会显示没有错误的值,因此无法找出错误。 < / p>

所以请帮助我: - ( 感谢。

4 个答案:

答案 0 :(得分:4)

您的主要问题是您在表单上缺少相应的enctype属性

<form ... enctype="multipart/form-data">

请务必仔细阅读本手册的这一部分 - http://php.net/manual/en/features.file-upload.php

first page

上提到了您的问题
  

注意:

     

请确保您的文件上传表单具有属性enctype="multipart/form-data",否则文件上传将无效。

答案 1 :(得分:2)

您需要在表单中enctype="multipart/form-data"上传图片,同时最好检查用户是否上传图片,并且命名文件.jpg的特异性不起作用,图片将被视为输出如果不是jpegs就会损坏,更不用说人们上传php文件了。

您还需要对有效性进行一些其他检查,上传安全性不应该被忽视,否则您有一个糟糕的手机家/僵尸网络恶意软件脚本将代码注入到您的所有脚本中:

<?php 
if(isset($_POST['spname'])){
    $spname=mysql_real_escape_string($_POST['spname']);
    $user_query = "INSERT INTO `sponsers` (`spname`)
                                    VALUES ('{$spname}')";
    $sql=mysql_query($user_query)or die (mysql_error());
    $spic= mysql_insert_id();



    if(isset($_FILES["fileToUpload"]["tmp_name"]) && $_FILES["fileToUpload"]["error"] ==0){
        $name    = basename($_FILES["fileToUpload"]['name']);
        $ext     = end(explode('.', $name));
        $newname = $spic.".".$ext;
        $info    = getimagesize($_FILES["fileToUpload"]['tmp_name']);

        $allowed = array('image/png','image/jpg','image/gif');
        if($info[0]>0 && $info[1] > 0 && in_array($info['mime'],$allowed)){
            move_uploaded_file($_FILES["fileToUpload"]['tmp_name'], "../sponsers/$newname");
            //done upload
        }else{
            //Not allowed, perhap notify user
        }
    }

}
?>

答案 2 :(得分:1)

在表单标记

中包含此内容
enctype="multipart/form-data"

答案 3 :(得分:1)

您应该在表单中添加

<form action="test.php" method="post" name="myform" enctype="multipart/form-data">