Вывод картинки по id из директории после перехода на страницу
У меня есть страница с картинками (Some books.php), картинка - ссылка, ведущая на ещё одну страницу (book-1.php).
Мне нужно, чтобы при клике на определённую картинку на Some books.php, на book-1.php (куда меня отправляет) отображалась информация конкретно об этой картинке. При этом, чтобы картинка бралась из папки на сервере, а не из БД (у меня не хотят картинки из БД выводиться).
Путь к картинке хранится в БД в столбце image в таблице book.
Вот код добавления картинок на страницу, он находится на странице Book.php:
<?php
include_once("header_admin.php");
include_once("../Connection.php");
//Если переменная Name передана
if (isset($_POST["Name"])) {
//Вставляем данные, подставляя их в запрос
$file = $_FILES['uploadfile']['name'];
if (empty($file)) {
echo "<h2 align='center'>Файл не выбран</a>";
}else {
$filetype=$_FILES['uploadfile']['type'];
$file_name = strstr($file, '.', true);
$file_ext = strrchr($file, '.');
$whitelist = array(".jpg", ".jpeg", ".png", ".PNG", ".gif");
if (!in_array($file_ext, $whitelist)) {
echo '<h2 align="center">Вы пытаетесь загрузить не допустимое расширение файла</h2>';
exit();
}else {
//директория загрузки
$uploaddir = "book/";
//новое имя изображения
$apend=$file_name.'_'.date('YmdHis').rand(100,1000).$file_ext;
//путь к новому изображению
$uploadfile = "$uploaddir$apend";
if (move_uploaded_file($_FILES['uploadfile']['tmp_name'], $uploadfile)) {
$sql = mysqli_query($link, "INSERT INTO `book` (`id_section`,`Name`, `Author`, `BookEdition`, `Yearofpublication`, `Jenre`, `NumberofPages`, `image`) VALUES ('{$_POST['id_section']}','{$_POST['Name']}', '{$_POST['Author']}', '{$_POST['BookEdition']}', '{$_POST['Yearofpublication']}', '{$_POST['Jenre']}', '{$_POST['NumberofPages']}', '{$uploadfile}')");
}
if ($sql) {
echo '<h2 align="center">Данные добавлены</h2>';
}else {
echo '<h2 align="center">Произошла ошибка. Данные не записанны.</h2>';
}
}
}
}
?>
Вот файл подключения, Connection.php:
<?php
$host = 'localhost'; // Хост, у нас все локально
$user = 'Neko'; // Имя созданного вами пользователя
$pass = 'qweqwe'; // Установленный вами пароль пользователю
$db_name = 'Library'; // Имя базы данных
$link = mysqli_connect($host, $user, $pass, $db_name); // Соединяемся с базой
// Ругаемся, если соединение установить не удалось
if (!$link) {
echo 'Не могу соединиться с БД. Код ошибки: ' . mysqli_connect_errno() . ', ошибка: ' . mysqli_connect_error();
exit;
}
?>
Код страницы Some books.php:
<?php
session_start();
include_once("Connection.php");
?>
<?php
if (!isset($_SESSION['admin']))
{
include_once("header.php");
}else{
include_once("headers/header_admin_1.php");
}
?>
<div class="books books-text">
<?php
$arr = scandir('Admin/book');
foreach($arr as $v) {
if(stripos($v,'.jpg')) echo '<a href="book-1.php"><img src=" Admin/book/'.$v.'" width="155" hegiht="220" />';
}
?>
</div>
<?php
include_once("footer.php");
?>
Ответы (1 шт):
Первый файл first.php:
<?php
$id1 = '1'; // Либо через цикл добавляете картинки, либо вручную получаете id картинок.
$id2 = '2';
$id3 = '3';
// Ставим ссылку на файл через <a>, в href указываем файл, в котором должны выводиться данные и добавляем параметр GET c id картинки
?>
<a href="second.php?image=<?php echo $id1;?>"><img src="book/chikago_20200406121541391.jpg"></a>
<a href="second.php?image=<?php echo $id2;?>"><img src="book/image2.png"></a>
<a href="second.php?image=<?php echo $id3;?>"><img src="book/image3.png"></a>
Второй файл second.php:
<?php
require_once 'BDconnect.php'; // Подключаем БД из файла
$id = $_GET['image']; // Получаем параметр GET, который передали
// table - название Вашей таблицы
$sql = "SELECT * FROM `book` WHERE `id`=:id"; // Ваш запрос в БД(поиск записи по id)
$req = $dbh->prepare($sql);
$req->bindValue(':id', $id, PDO::PARAM_STR); //Данные, которые передаёте в запрос
$req->execute();
$array = $req->fetch(PDO::FETCH_ASSOC); // Возвращаем значение.
if($array) { // Выводим данные
echo 'id_section - '.$array['id_section'].'<br>';
echo 'Name - '.$array['Name'].'<br>';
echo 'Author - '.$array['Author'].'<br>';
echo 'BookEdition - '.$array['BookEdition'].'<br>';
echo 'Yearofpublication - '.$array['Yearofpublication'].'<br>';
echo 'Jenre - '.$array['Jenre'].'<br>';
echo 'NumberofPages - '.$array['NumberofPages'].'<br>';
echo 'ImageSrc - '.$array['image'].'<br>';
}
Файл BDconnect.php:
<?php
try {
$dbh = new PDO('mysql:dbname=bdName;host=localhost', 'BDname', 'BDpass');
} catch (PDOException $e) {
die($e->getMessage());
}
Запускаете первый файл.
При нажатии, к примеру, на 2 ссылку - появляется информация:

Дополнение(после добавления кода):
Вы можете передавать GET параметром название самой картинки, вместо id
foreach($arr as $v) {
if(stripos($v,'.jpg')) echo '<a href="book-1.php?image='.$v.'"><img src=" Admin/book/'.$v.'" width="155" hegiht="220" />';
}
И производить поиск в базе по картинке:
$ImageSrc = $_GET['image']; // Получаем параметр GET, который передали
// table - название Вашей таблицы
$sql = "SELECT * FROM `book` WHERE `image`=:image"; // Ваш запрос в БД(поиск записи по id)
$req = $dbh->prepare($sql);
$req->bindValue(':image', $ImageSrc, PDO::PARAM_STR); //Данные, которые передаёте в запрос
$req->execute();
$array = $req->fetch(PDO::FETCH_ASSOC);
А дальше выводить как в примере.
