0
votes

I am trying to upload a image in my db but it won't work.

here is the code to upload the image.

<?php
    $con = mysqli_connect("localhost", "root", "", "test");
    mysqli_select_db("test", $con);

    $username = $_POST['username'];
    $password = $_POST['password'];
    $dob = $_POST['dob'];
    $no = $_POST['no'];

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

        if(getimagesize($_FILES['image']['tmp_name']) == FALSE) {
            echo "Please select an image.";
        }

        else {
            $target_dir = "uploads/";
            $target_file = $target_dir . basename($_FILES["image"]["name"]);
            $uploadOk = 1;
            $imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);

            // Check file size
            if ($_FILES["image"]["size"] > 500000) {
                echo "Sorry, your file is too large.";
                $uploadOk = 0;
            }

            // Check if file already exists
            if (file_exists($target_file)) {
                echo "<p>Sorry, file already exists.</p>";
                $uploadOk = 0;
            }

            // Check if $uploadOk is set to 0 by an error
            if ($uploadOk == 0) {
                echo "<p>Sorry, your file was not uploaded.</p>";
            }

            // if everything is ok, try to upload file
            else {

                if (move_uploaded_file($_FILES["image"]["tmp_name"], $target_file)) {
                    $name = basename( $_FILES["image"]["name"]);
                    $image = "uploads/".basename( $_FILES["image"]["name"]);
                    echo "<p>".$name. " has been uploaded.</p>";
                    header("location: image.php");

                    $qry = "INSERT INTO images (id, name, image, username, password, dob, no) VALUES (NULL, '".$name."', '".$image."', '".$username."', '".$password."', '".$dob."', '".$no."')";
                    $result = mysqli_query($con, $qry);

                    //$sql = "INSERT INTO images (username) VALUES ('$username')";
                    //$result = mysqli_query($con, $sql);

                } 

                else {
                    echo "<p>Sorry, there was an error uploading your file.</p>";
                }
            }
        }
     }
 ?>

it always said that sorry there was an error uploading the file.

and this is the error in the server log.

PHP Warning: move_uploaded_file(): Unable to move '/tmp/phpRGn6S7' to 'uploads/Screenshot from 2017-08-09 16-57-58.png' in /var/www/html/practice1/images2.php on line 45, referer: http://localhost/practice1/image.php

I am new to file uploading in PHP. would really appreciate if someone can help. Thanks in advance.

2
Any further details on the error it gave? What is showing in the php/apache error logs? Is the filesize exceeding the php setting for max file upload size? Is the folder it's writing to, writeable by apache user?flauntster
can you describe what is issue you are facing?DSK
do you have the enctype set in your html form? enctype="multipart/form-data"Norris Oduro
Sorry about that. I edited to included the server log error.Jaaayz
yes @NorrisOduroJaaayz

2 Answers

2
votes

On Windows and Linux, the move_uploaded_file() function doesn't work the same. On Linux, you need to put the full path like this :

$target_dir = "/var/www/html/practice1/uploads/";

Or seperate project_dir and upload dir like this :

$project_dir = '/var/www/html/practice1/';
$target_dir  = $project_dir . 'uploads/';
1
votes

I think the problem is here:

$target_dir = "uploads/";

You'd rather use something like:

$target_dir = PROJECT_DIR . "uploads/";

With purpose to end-up with absolute path to uploads dir.