Я пытаюсь заставить пользователя загрузить изображение на мой сервер в созданном мной каталоге. Пользователь использует форму для выбора изображения, а затем я использую 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
?
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']
$target = "image/Profile_Pic/";
$target = $target . basename( $_FILES['photo']['name']);
$target = $target . $_FILES['photo']['name'];
Вот почему. Вы дважды присваиваете имя переменной $target
.
Удалите последнюю строку и не используйте basename()
, потому что в этом коде это бессмысленно.
Похожие вопросы
Новые вопросы
php
PHP — это широко используемый язык сценариев общего назначения с открытым исходным кодом, мультипарадигмальный, динамически типизированный и интерпретируемый, изначально разработанный для веб-разработки на стороне сервера. Используйте этот тег для вопросов о программировании на языке PHP.