【问题标题】:image upload and saving in DB图像上传并保存在数据库中
【发布时间】:2014-08-09 02:31:01
【问题描述】:

我的主要目标是将每个上传的图像保存在文件夹中以具有唯一的名称。我这样做了,但无论它有什么 uniqe 名称,在 DB 中它仍然有旧的原始名称,我如何在 DB 中保存相同的 uniqe 名称? 我的代码是:

<?php
     if(isset($_SESSION['username'])){ 
    if(isset($_POST['upload'])) {

$allowed_filetypes = array('.jpg','.jpeg','.png','.gif');
$max_size = "100000"; /// 1 Мегабайт
$max_height = "90000"; /// 300 Килобайта
$max_width = "90000"; /// 300 Килобайта
$upload_path = 'gallery/';
$random = md5(time());
$filename = $_FILES['userfile']['name'];
$ext = substr($filename, strpos($filename,'.'), strlen($filename)-1);

if(!in_array($ext,$allowed_filetypes))
  die('The file you attempted to upload is not allowed.');

if(filesize($_FILES['userfile']['tmp_name']) > $max_size)
  die('Прекалено е тежка снимката.');

if(filesize($_FILES['userfile']['tmp_name']) > $max_height)
  die('Прекалено е голяма снимка във височина.');

if(filesize($_FILES['userfile']['tmp_name']) > $max_width)
  die('Прекалено е голяма снимка във височина.');
if(!is_writable($upload_path))
  die('You cannot upload to the specified directory, please CHMOD it to 777.');

if(move_uploaded_file($_FILES['userfile']['tmp_name'],$upload_path .$random . $filename)) {
$q = mysqli_query($connection,"UPDATE users SET avatar='".$_FILES['userfile']['name']."' WHERE username ='".$_SESSION['username']."'");

echo "<font color='#5cb85c'>Браво, успешно си качил/а профилна снимка!</font>"; 


} else {
     echo 'There was an error during the file upload.  Please try again.';
}
}


       echo ' <form action="images.php" method="post" enctype="multipart/form-data"> ';  
       echo ' <input type="file" name="userfile"/>';
       echo ' <input type="submit" name="upload"  value="Качи">';
       echo ' </form>';


 }
 else
 {
echo "<font color='#ec3f8c'>Съжелявам! За да  качиш снимка във профила си, <a href='login.php'><font color='#ec3f8c'><b> трябва да се логнеш</b> </font></a></font>"; 
 }

    ?>

谁能解释一下,我还应该补充什么?

【问题讨论】:

    标签: php database image upload save


    【解决方案1】:

    如果我理解问题所在,图像会以正确的唯一名称保存在文件系统中。就是$upload_path .$random . $filename,但是数据库中的引用是错误的。

    只需替换查询

    UPDATE users SET avatar='".$_FILES['userfile']['name'].
    

    UPDATE users SET avatar='".$upload_path .$random . $filename
    

    HTH, 马塞洛

    【讨论】:

    • 非常感谢我的朋友,它工作了 100% :) 完美的代码 :) :)
    • 还有一个问题,MARCELLO。现在一切正常。但是当我尝试上传最终在 cyrlic 上具有名称的图像时,它显示为断开的链接,我必须在代码中添加更多内容才能让我加载那种图像?
    • 可能某些西里尔字符与文件系统使用的编码不兼容。保留图像的原始名称对您来说重要吗?如果没有,您可以简单地使用$upload_path .$random 而不是$upload_path .$random . $filename。如果是,您应该这样做,然后将原始名称存储在数据库中以供将来使用。
    • 非常感谢 Marcello :) 但现在我遇到了每一个奇怪的问题。现在一切正常。我删除了@filename。但是当我尝试“另存为”图片时它最终没有.jpeg .png 什么都没有?我该如何解决?抱歉问了太多问题。但我真的很感谢你的帮助:)
    • 没错,文件扩展名是文件名的一部分,因此,如果我们删除文件名,我们会丢失扩展名:) 您可以从文件名中提取文件扩展名,然后将其附加到结果字符串,像这样:$ext = pathinfo($filename, PATHINFO_EXTENSION); 并使用 $upload_path . $random . $filename . '.' . $ext。如果这些答案有用,别忘了给他们投票 :)
    猜你喜欢
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 2015-04-15
    • 2015-10-26
    • 2013-10-22
    • 2011-10-25
    • 2020-07-07
    相关资源
    最近更新 更多