0

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.

9
  • 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? Commented Aug 30, 2017 at 6:46
  • can you describe what is issue you are facing? Commented Aug 30, 2017 at 6:47
  • do you have the enctype set in your html form? enctype="multipart/form-data" Commented Aug 30, 2017 at 6:49
  • Sorry about that. I edited to included the server log error. Commented Aug 30, 2017 at 6:49
  • yes @NorrisOduro Commented Aug 30, 2017 at 6:49

2 Answers 2

2

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/';
Sign up to request clarification or add additional context in comments.

1 Comment

Thanks! Didn't knew about that cuz I shifted to linux and just a newbie in using it.
1

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.

1 Comment

Do you really have this dir? Can you check it, just run command in terminal ls /PROJECT_DIR/uploads

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.