Php oop file upload

笑着哭i 提交于 2020-01-01 17:10:33

问题


I work on a oop php file upload script. Is simple. But doesnt work. What is the problem? I learn how to use $_FILE, and how to code oop style.

Thanks.

upload.php are :

<?php
class upload{
    public $src = "./upload/";
    public $tmp;
    public $filename;
    public $type;
    public $uploadfile;

    public function startupload(){
        $this -> filename = $_FILES["file"]["name"];
        $this -> tmp = $_FILES["file"]["tmp_name"];
        $this -> uploadfile = $src . basename($this -> name);
    }
    public function uploadfile(){
        if(move_uploaded_file($this -> tmp, $this -> uploadFile)){
            return true;
        }
    }


}

?>

index.php are:

<?php 
require_once('./lib/upload.php');
?>

<?php
if(isset($_POST['file'])){
    $fileupload = new upload();
    if($fileupload -> uploadfile()){
        echo 'Fisierul a fost uploadat';
    }
}
?>

<html>
<head></head>
<body>
<form align="center" enctype="multipart/form-data" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post">
Select upload file: <input type="file" name="file" required="yes"  />
<input type="submit" value="Trimite" />
<p>
</form>
</body>
</html>

Where i'm wrong with my tinking?


回答1:


The problem in your code is not triggered is because you checked variable file in the post variable and you wont find it there. the corect way to do it is

if(isset($_FILES['file'])) {
    $fileupload = new upload();

    if($fileupload -> uploadfile()) {
        echo 'Fisierul a fost uploadat';
    }
}

further more your class will not work you should pass the variables to a constructor and rename upload-> startupload() to upload-> upload




回答2:


For starters you are never calling startupload().

I would suggest moving that function to the constructor (a function in the class named __construct() )

Pass $_FILES to it so you can work with the input param instead of $_FILES directly.




回答3:


Change the upload code to:

if(isset($_FILES['file'])){
    $fileupload = new upload();
    $fileupload->startupload();
    if($fileupload -> uploadfile()){
        echo 'Fisierul a fost uploadat';
    }
}

And change this line in you class:

$this -> uploadfile = $this -> src . basename($this -> filename);

Also this line needs updating because the case it wrong for uploadfile:

if(move_uploaded_file($this -> tmp, $this -> uploadfile)){



回答4:


you should create your own contruct where will be complete content of startupload() function

look at this:

public function __contruct($string){
    $this -> filename = $_FILES[$string]["name"];
    $this -> tmp = $_FILES[$string]["tmp_name"];
    $this -> uploadfile = $this -> src . basename($this -> filename);
}

then you couldn't use something like:

$fileupload->startupload();

but you can write only:

$fileupload = new upload("file");

and little note finally: in PHP all classes must be written with capital




回答5:


function get_image(){
    $type=explode(".",$_FILES['photo']['name']);
    $type=$type[count($type)-1];
    $url="./studentimage/".uniqid(rand()).".".$type;
    if(in_array($type,array('jpeg','jpg','bmp','png'))){
        if(is_uploaded_file($_FILES['photo']['tmp_name'])){
            if(move_uploaded_file($_FILES['photo']['tmp_name'],$url)){
                return $url;
            }
        }
    }
    else{
        return "sorry dose not match my extention";
    }
}


来源:https://stackoverflow.com/questions/31432468/php-oop-file-upload

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!