将上载的Image的路径存储在数据库中

时间:2016-05-25 08:01:13

标签: php mysql

我尝试将上传图片的路径添加到数据库中,以便将其显示为帖子的缩略图。我找到了一个教程,并使用此代码上传图像。然而,它进入了else语句,我只是得到退出("错误在服务器上上传图像时#34;);我有一张表格来收集数据:

public override OnAppearing(...) { this.backgroundimage.Source = null; }
public override OnDisappearing(..) { this.backgroundimage.Source = your ImageSource; }

以下是我用来上传图片的代码:

<form action='' method='post' enctype="multipart/form-data">

<p><label>Title</label><br />
<input id="title-input" type='text' name='postTitle' value='<?php if(isset($error)){ echo $_POST['postTitle'];}?>'></p>

<p><label>Description</label><br />
<textarea id="textarea" name='postDesc' cols='20' rows='5'><?php if(isset($error)){ echo $_POST['postDesc'];}?></textarea></p>

<p><label>Content</label><br />
<textarea name='postCont' cols='20' rows='5'><?php if(isset($error)){ echo $_POST['postCont'];}?></textarea></p>

<p><label>Image</label><input type="file" name="uploadedimage">
                            </p>

<input type='submit' name='submit' value='Submit'>
<input type='reset' name='submit' value='Reset'>

</form>
<?php include 'add-post-handler.php' ?>

PS:我也有一些疑问,我怎么能把imageID与postID相关联,因为它们都是从同一个表格中提交的。(我在两个表之间建立了关系,但它在主键,所以我不确定它是否正确)

感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

查看代码:

move_uploaded_file在两个前提下返回FALSE(在PHP Docs中说明):

  

如果filename不是有效的上传文件,则不会执行任何操作,并且   move_uploaded_file()将返回FALSE。

     

如果filename是有效的上传文件,但某些文件无法移动   原因,不会发生任何操作,move_uploaded_file()将返回   假。此外,还会发出警告。

我最好的猜测是,根据您提供的信息:

  • 您的应用程序/网络服务器无法写入您的路径,因此无法移动

确保应用程序(网络服务器)可以在您的路径中写入:&#39; ../ img /&#39;通过发出chmod为目录提供webserver用户的正确权限。

安全建议(与问题无关):

  1. 您的应用程序在此状态下具有$ target_path中的潜在SQLi。您应该考虑使用预准备语句

  2. 您的表单将POST数据直接写入输出。这导致了XSS。您应该始终在输出中编码特殊字符。

  3. 确保只能上传图片,并且无法在此图片中执行脚本。路径。有人可以利用您的上传来上传脚本并执行它。

  4. 在这种情况下阻止SQLi的最简单方法是对imagename进行哈希并使用$ext变量设置扩展名:

    [...]
    $ext=GetImageExtension($imgtype);
    if($ext === FALSE) {
        exit("Couldn't determine the filetype correctly. Please upload pictures only.");
    }
    $imagename=md5($_FILES["uploadedimage"]["name"].time()).$ext;
    $target_path = "../img/".$imagename;
    [...]
    

    仅包含时间(),因此有人可以上传具有相同名称的图片。

答案 1 :(得分:0)

你总是可以给你的图像一个特定的类,你知道它指向你想要缩略图的所有图像,并应用一个CSS规则/代码,它们会自动使它们成为img-thumbnail。

<div class="imgT">

然后设置CSS缩略图

答案 2 :(得分:0)

感谢大家的回答。最后我明白了。我发现问题出在php.ini设置中。这是帮助我的链接 - &gt; Why would $_FILES be empty when uploading files to PHP?。感谢PaulF发布它。问题是上传文件的限制只有2MB或类似的东西。 对于每个遇到相同问题的人,请确保检查该链接并在php.ini文件中检查此设置。

file_uploads = On
post_max_size = 100M
upload_max_filesize = 100M