0

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

 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);
                    }
                }
4

1 回答 1

0

您似乎['name']缺少move_uploaded_file

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()){}

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

于 2013-02-07T19:37:33.483 回答