表单文件输入(图像)不会上传到目录目的地


form file input (image) wont upload to dir destination

当我提交表单时,图像文件不会发送到他的目录。中已成功插入的其余数据。我看了几个教程,我知道我没有使用最简单的方法,但我仍然希望它能起作用,有人能看看吗?

 function addData($name, $price, $description, $files)
            {
                            if(!empty($name) || !empty($price) || !empty($description))
                            {
                                   if($sql = $this->db->prepare("SELECT * FROM products WHERE name= ? LIMIT 1"))
                                    {
                                        $sql->bind_param('s', $name);
                                        $sql->execute();
                                        $sql->store_result();
                                        $sql->fetch();
                                        $numrows = $sql->num_rows;
                                        print_r($numrows);
                                    }
                                    else
                                    {
                                        echo "something is wrong";
                                    }
                                    if($numrows>0)
                                    {
                                                echo 'duplicate, go to <a href="index.php?res=resources&adm=admin&page=inventory.php">same page</a>';
                                    }
                                    else
                                    {
                                        if($insert = $this->db->prepare("INSERT INTO products (name, price, description) VALUES(?, ?, ?)"))
                                        {
                                                    $insert->bind_param('sds', $name, $price, $description);
                                                    $insert->execute();
                                        }
                                        else
                                        {
                                            echo "failed to prepare";
                                        }
                                        //The uploaden image is sent to temp map
                                        if(is_uploaded_file($files['image']['tmp_name']))
                                        {
                                            $valid_types = array(
                                                "image/gif",
                                                "image/png",
                                                "image/jpeg",
                                                "image/pjpeg",
                                            );
                                                if (in_array($files["file"]["type"], $valid_types))
                                                {
                                                    $uploaddir = "./webshop/public/img/content/";
                                                    if(move_uploaded_file($files['image']['tmp_name'], $uploaddir."/".$files['image']['name']));
                                                }
                                                //Shows where its stored
                                                    echo "Stored in: " . 'C:/xampp/htdocs/webshop/public/img/content/' . $files["file"]["name"];

                                    }
                                    else
                                    {
                                                    echo "didnt inserted the damn thing!";
                                    }
                                }
                                print_r($files);
                    }
                }

您在move_uploaded_file 中似乎缺少['name']方面

move_uploaded_file($files['image']['tmp_name'], $uploaddir."/".$files['image']['name']);

还要注意添加在$uploaddir和$files 之间的."/".

在代码$uploaddir/$files['image']中,您的目标是添加尾部斜杠,然后添加文件名,但是,您没有使用语法来连接字符串。因此,必须在变量之间添加.。您可以在中添加尾部斜线

$uploaddir = "./webshop/public/img/content/";

这样你就可以做

move_uploaded_file($files['image']['tmp_name'], $uploaddir.$files['image']['name']);

更新

插入和处理文件时使用If..elseif..。根据您的逻辑,您准备语句,如果失败,则检查文件。它永远不会两全其美。您需要移除elseif并进行两次单独的检查。

if($insert = ..){}
else{echo "failed to prepare";}
if(is_uploaded_file()){}

您可能希望首先检查上传的文件,移动它,然后插入数据库,如果没有其他问题。然后,如果数据库插入失败,您可以取消链接(删除)文件,因为出现了问题。