Я разрабатываю интернет-магазин с использованием PHP и MySQL. Моя проблема в том, что изображения, загруженные через панель администратора, неправильно отображаются на страницах интерфейса и администратора. Кроме того, при удалении продукта его файл изображения не удаляется с сервера.
Код и сведения:< /p>
- Окружающая среда:
- Сервер: Ubuntu
- Веб-сервер: Apache
- Версия PHP: Последний
- Каталог проекта: /var/www/html/online_shop
- Код загрузки изображения:
Код: Выделить всё
if (isset($_FILES['image'])) {
$name = $_POST['name'];
$description = $_POST['description'];
$price = $_POST['price'];
$target_dir = "/var/www/html/online_shop/public/photo_product/";
$target_file = $target_dir . basename($_FILES["image"]["name"]);
if ($_FILES["image"]["size"] > 500000) {
echo "File is too large.";
} elseif (!in_array(strtolower(pathinfo($target_file, PATHINFO_EXTENSION)), array('jpg', 'jpeg', 'png', 'gif'))) {
echo "Invalid file type.";
} elseif (move_uploaded_file($_FILES["image"]["tmp_name"], $target_file)) {
chmod($target_file, 0644);
$image_relative_path = "public/photo_product/" . basename($_FILES["image"]["name"]);
$insert_sql = $conn->prepare("INSERT INTO products (name, description, price, image) VALUES (?, ?, ?, ?)");
$insert_sql->bind_param('ssds', $name, $description, $price, $image_relative_path);
if ($insert_sql->execute()) {
echo "Product added successfully.";
} else {
echo "Error: " . $insert_sql->error;
}
$insert_sql->close();
} else {
echo "Failed to upload file.";
}
}
- Код удаления продукта:
Код: Выделить всё
if (isset($_POST['delete_product_id'])) {
$product_id = $_POST['delete_product_id'];
$select_sql = $conn->prepare("SELECT image FROM products WHERE id = ?");
$select_sql->bind_param('i', $product_id);
$select_sql->execute();
$select_sql->bind_result($image_path);
$select_sql->fetch();
$select_sql->close();
$delete_sql = $conn->prepare("DELETE FROM products WHERE id = ?");
$delete_sql->bind_param('i', $product_id);
if ($delete_sql->execute()) {
$full_image_path = "/var/www/html/online_shop/" . $image_path;
if (file_exists($full_image_path)) {
if (unlink($full_image_path)) {
echo "Image deleted successfully.";
} else {
echo "Error deleting image.";
}
} else {
echo "Image file not found.";
}
echo "Product deleted successfully.";
} else {
echo "Error: " . $delete_sql->error;
}
$delete_sql->close();
}
- Код отображения внешнего изображения:
Код: Выделить всё
$sql_fetch_products = "SELECT * FROM products";
$result = $conn->query($sql_fetch_products);
while ($row = $result->fetch_assoc()) {
echo '';
echo '
[img]/online_shop/[/img]
';
echo '';
echo '' . $row['name'] . '';
echo '' . $row['description'] . '
';
echo '
Price: ' . $row['price'] . '
';
echo '';
echo '';
}
- Веб-сервер у пользователя есть права на запись в каталог загрузки.
- В журнале ошибок PHP не отображаются ошибки, связанные с загрузкой или удалением файла.
Чего мне не хватает в моем коде, что может привести к неправильному отображению изображений? и не быть удалены должным образом? Будем очень признательны за любую помощь или предложения.
результат изображения
результат изображенияЧто я пробовал:
- Проверил пути к изображениям, хранящиеся в базе данных.
- Убедились, что файлы изображений находятся в правильном каталоге.
- Установите права доступа к файлам на 0644 после загрузки.
- Проверена ошибка Apache. регистрирует любые проблемы, связанные с разрешениями.
- Загруженные изображения должны корректно отображаться как на странице интерфейса, так и на странице администрирования.
- Файлы изображений должны удаляться с сервера при запуске продукта. удалено.
- Изображения не отображаются на странице интерфейса и на странице администрирования.
- Файлы изображений не удаляются с сервера при удалении продукта.
Подробнее здесь: https://stackoverflow.com/questions/786 ... ng-product