Я пытаюсь заставить пользователя загрузить изображение на мой сервер в созданном мной каталоге. Пользователь использует форму для выбора изображения, а затем я использую PHP-код для загрузки изображения в каталог «image / Profile_Pic /», а также его расположение в моей базе данных. Но когда я тестирую свой код, он всегда показывает, что файл не может быть загружен, и в моей таблице в данных пользователя ничего не отображается, и я не могу понять, почему.

HTML ФОРМА:

<form enctype="multipart/form-data" action="upload.php" method="POST"> 
        Photo: <input type="file" name="photo"><br>  
        <input type="submit" value="Add">  
</form>

ЗАГРУЗИТЬ.PHP:

<?php   
    session_start();
    $user = $_SESSION['user'];
    $host_name = "";
    $user_name = "";
    $password = "";
    $db_name = "";
    $db_link = mysqli_connect($host_name, $user_name, $password, $db_name) or die(mysqli_error($db_link));

error_reporting(E_ALL); ini_set('display_errors', 1);

//This is the directory where images will be saved  
$target = "image/Profile_Pic/";  
$target = $target . basename( $_FILES['photo']['name']);  


$target = $target . $_FILES['photo']['name'];   

//This gets all the other information from the form  
$pic=($_FILES['photo']['name']);  

//Writes the information to the database  

$table_name = "User";
$query = "UPDATE $table_name SET Profile_Pic = '$pic' WHERE Username='$user';";
$result = mysqli_query($db_link, $query) or die(mysqli_error($db_link));


//Writes the photo to the server  
if(move_uploaded_file($_FILES['photo']['tmp_name'], $target))  {   
    //Tells you if its all ok  
    echo "The file ". basename( $_FILES['photo']['name']). " has been uploaded, and your information has been added to the directory $user";
}else{   
    //Gives and error if its not  
    echo "Sorry, there was a problem uploading your file.";  
} 

mysqli_close($db_link);
?>

Итак, после всей вашей помощи мне удалось заставить этот код работать. Но теперь изображение загружается с дублированным именем, например image.jpgimage.jpg. Как я могу исправить это, чтобы это был imageuser.jpg, где пользователь является текущим пользователем сеанса, сохраненным в $user?

-1
ShadowViper 9 Мар 2015 в 23:47

2 ответа

Лучший ответ
//This is the directory where images will be saved  
$target = __DIR__ . "image/Profile_Pic/";
if (!file_exists($target)) {
    mkdir($target);
}
$target = $target . $_FILES['photo']['name'];  

Basename работает с полным путем, поэтому вам следует использовать его таким образом.

Также move_uploaded_file должен использовать $ _FILES ['photo'] ['tmp_name'] вместо просто $ _FILES ['photo']

0
Kuba F. 9 Мар 2015 в 21:22
$target = "image/Profile_Pic/";  
$target = $target . basename( $_FILES['photo']['name']);  


$target = $target . $_FILES['photo']['name'];

Вот почему. Вы дважды присваиваете имя переменной $target.

Удалите последнюю строку и не используйте basename(), потому что в этом коде это бессмысленно.

0
Kuba F. 9 Мар 2015 в 23:16