Php图像上传和命名失败

时间:2017-04-10 22:42:10

标签: php file-upload

我有一个小表单来添加类别。我的表格字段如下:

名称 必需

说明 不需要

照片 不需要

它将创建一个包含所有信息的类别,它甚至会将图像名称插入数据库中。

我遇到的问题是它不会将图像移动到uploads文件夹。 此外,它将重命名图像,如下所示:如果图像名称是 avatar.jpg ,它将在数据库字段中将其重命名为 85789avatar.jpg

我需要它重命名图像,如下所示 O1CCJDSXBOM2.jpg

,最后一个问题是图像不是必需的,如果你把它留空,它仍然会在数据库字段中放入89439个数字。

if (isset($_POST['submit'])) {

         $Name = $_POST['name'];
         $Description = $_POST['description']; 

         if (empty($Name)) {
             $errors[] = "Name Required.";
         }
         if (!empty($errors)) {
             echo validation_errors($errors[0]);

         } else {

         $file = rand(1000, 100000). $_FILES['photo']['name'];
         $file_loc = $_FILES['photo']['tmp_name'];
         $file_size = $_FILES['photo']['size'];
         $folder = "uploads/";

         if (($file_size > 2097152)) {         

             echo validation_errors("Your avatar exceeds file size");        

         } else {

        move_uploaded_file($file_loc, $folder, $file);

        $db = dbconnect();
        $stmt = $db->prepare("INSERT INTO discussion_categories(Name, Description, Photo) VALUES (?,?,?)");
        $stmt->bind_param('sss', $Name, $Description, $file);
        $stmt->execute();        
        $stmt->close(); 

        header("Location: managecategories.php");      

1 个答案:

答案 0 :(得分:1)

  

它不会将图像移动到uploads文件夹,也会按如下方式重命名图像。如果图像名称是avatar.jpg,则会在数据库字段中将其重命名为85789avatar.jpg

move_uploaded_file()有两个参数,而不是三个。更新此行:

move_uploaded_file($file_loc, $folder, $file);

对此(将文件名附加到文件夹):

move_uploaded_file($file_loc, $folder . $file);
  

最后一个问题是图片不是必需的,如果你把它留空,它仍然会在数据库字段中放入89439个数字。

由于move_uploaded_file()返回boolean,因此代码可以更新为仅在文件成功上传时插入记录。

if (move_uploaded_file($file_loc, $folder . $file)) {
    $db = dbconnect();
    $stmt = $db->prepare("INSERT INTO discussion_categories(Name, Description, Photo) VALUES (?,?,?)");
    $stmt->bind_param('sss', $Name, $Description, $file);
    $stmt->execute();        
    $stmt->close(); 
}