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

时间:2013-02-07 19:28:35

标签: php file

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

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

1 个答案:

答案 0 :(得分: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()){}

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