2011-03-24 71 views
0

我正在尝试发布PNG图像。这是我的代码。

<form action="http://killprashanth.res.cmu.edu/index.php/main/post" enctype="multipart/form-data" method="post" accept-charset="utf-8"> 
<div class="hidden"> 
<input type="hidden" name="userid" value="" /> 
<input type="hidden" name="thread" value="" /> 
</div> 
<label for="text">Message text:</label> 
<textarea name="text" cols="90" rows="12" ></textarea><br> 
<table> 
<tr> 
    <td style="width: 40%;"> 
    <label for="file">Image (optional):</label> 
    <input type="file" name="file" value="" /> 
    </td> 
    <td style="width: 60%;"> 
    <input type="submit" name="submit" value="send" onclick="reload()" /> 
    </td> 
</tr> 
</table> 
</form> 

public function post() 
{ 
     move_uploaded_file($_FILES["file"]["tmp_name"], '/uploads'.$_FILES["file"]["name"]); 

     $data = array(
       'userid' => $_POST['userid'], 
       'thread' => $_POST['thread'], 
       'text' => $_POST['text'], 
       'image' => $_FILES["file"]["name"] 
     ); 

     $this->db->insert('messages', $data); 
} 

在我的数据库,一切正常,除了图像(VARCHAR)始终是NULL。

+0

该文件是否上传到您的上传目录? – GWW 2011-03-24 23:04:54

+2

你检查了整个数组:print_r($ _ FILES)? – Osw 2011-03-24 23:08:26

+0

不要使用用户提供的文件名写入文件系统。这里有一个令人讨厌的目录遍历安全漏洞,但还有很多其他问题需要解决。将文件存储在自动生成的已知好名称(例如'uploadid-17236478.png')下。 – bobince 2011-03-24 23:17:23

回答

0

尝试删除:

onclick="reload()" 

看看现在的工作。这可能会破坏文件上传(它在提交表单前运行“重新加载”)。

如果您想重新加载页面而不是实际转到发布页面,您可能需要查看通过AJAX进行POST。

+0

哦,对不起,我应该提到这个功能目前并没有做任何事情。尽管如此,我会尝试一下;谢谢。 – 2011-03-24 23:21:50

+0

编辑:不,仍然没有。 – 2011-03-24 23:32:22

+0

尝试模仿PHP页面上的示例代码: http://php.net/manual/en/function.move-uploaded-file.php 也许该文件引发错误?这是非常奇怪的,它不工作。我会在我的电脑上设置它并测试你的代码。给我几分钟... – Chris 2011-03-26 03:04:41