Olaiwola Ayoola
Olaiwola Ayoola

Reputation: 31

I cant seem to upload my picture in my function

I still have the error 2 days after. Help... I have an error with picture upload in my code. The file upload works perfectly when i remove anything image related but fails once i add anything image related. I get 2 errors "Sorry, there was a problem uploading your file." and "Problem uploading item". I have no idea why... I'll post the section i have the problem with.

if((($_FILES["pic"]["type"] != "image/jpg")
    || ($_FILES["pic"]["type"] != "image/jpeg")
    || ($_FILES["pic"]["type"] != "image/png")
    || ($_FILES["pic"]["type"] != "image/pjpeg"))
    && ($_FILES["pic"]["size"] > 1000000))
{
    $_SESSION['itemerror'][] = "Pic must be jpg, jpeg, png or pjpeg and must be less than 1mb";
}

//final disposition
if (count($_SESSION['itemerror']) > 0) {
    die(header("Location: postitem.php"));
} else {

    if(registerItem($_POST)) {
        unset($_SESSION['formAttempt']);
        $_SESSION['itemsuccess'][] = "Successfully Uploaded";
        die(header("Location: postitem.php"));
    } else {
        error_log("Problem uploading item: {$_POST['name']}");
        $_SESSION['itemerror'][] = "Problem uploading item";
        die(header("Location: upload.php"));
    }
}

function registerItem($userData) {
    $mysqli = new mysqli(DBHOST,DBUSER,DBPASS,DB);
    if ($mysqli->connect_errno) {
        error_log("Cannot connect to MySQL: " . $mysqli->connect_error);
        return false;
    }
    $target = "img/";
    $target = $target . basename( $_FILES['pic']['name']);
    $pic=($_FILES['pic']['name']);
    $poster = htmlspecialchars($mysqli->real_escape_string($_POST['user']));
    $itemcategory = htmlspecialchars($mysqli->real_escape_string($_POST['category']));
    $itemname = htmlspecialchars($mysqli->real_escape_string($_POST['name']));
    $itemdescription = htmlspecialchars($mysqli->real_escape_string($_POST['description']));
    $itemprice = htmlspecialchars($mysqli->real_escape_string($_POST['price']));
    $itemlocation = htmlspecialchars($mysqli->real_escape_string($_POST['addr']));
    $itemcity = htmlspecialchars($mysqli->real_escape_string($_POST['city']));
    $itemstate = htmlspecialchars($mysqli->real_escape_string($_POST['state']));
    $itemphone = htmlspecialchars($mysqli->real_escape_string($_POST['phone']));
    $itemnegotiate = htmlspecialchars($mysqli->real_escape_string($_POST['negotiate']));
    if(move_uploaded_file($_FILES['pic']['tmp_name'],$target)){
        $query = "INSERT INTO Product 
            (category,name,upload_date,user,
            description,price,location,city,
            state,phone,negotiatable,pic_link)" .
        " VALUES ('{$itemcategory}','{$itemname}',NOW(),'{$poster}',
                '{$itemdescription}','{$itemprice}','{$itemlocation}'" .
                ",'{$itemcity}','{$itemstate}','{$itemphone}','{$itemnegotiate}', '{$pic}')";
        if ($mysqli->query($query)) {
            $itemname = $mysqli->insert_itemname;
            error_log("Inserted {$itemname} as ID {$id}");
            return true;
        } else {
            error_log("Problem inserting {$query}");
            return false;
        }
    } else {
        $_SESSION['itemerror'][] =  "Sorry, there was a problem uploading your file."; 
    }
}

The form contains this:

<form id="userForm" method="POST" action="upload.php">

And this for the picture input:

<label for="pic">Pictures: </label>
<input class="input100" type="file" id="pic" name="pic">

Upvotes: 0

Views: 50

Answers (1)

ZobModel.php
ZobModel.php

Reputation: 107

Add the attribute enctype="multipart/form-data" to your <form>

Like this

<form id="userForm" method="POST" action="upload.php" enctype="multipart/form-data">

I do not know if that will solve your problem, but it will probably help you.
It seems to me that it's mandatory for an upload form.

Upvotes: 1

Related Questions