У меня есть index.php
, db.php
и база данных. Проблема вот такая: при выводе статей из базы данных, на сайт из базы выводится только последнее имя для всех имен в выборке. То есть, у меня есть четыре имени Иван, Петр, Николай, Владимир. Выводит информацию о Владимире для всех статей.
Вот мой код:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="css/style.css">
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.8.1/css/all.css" integrity="sha384-50oBUHEmvpQ+1lW4y57PTFmhCaXp0ML5d60M1M7uH2+nqUivzIebhndOJK28anvf" crossorigin="anonymous">
</head>
<body>
<?php require "db.php" ?>
<?php
$singles = get_singles_all();
foreach ($singles as $single):
// $author = get_author_by_id();
// foreach ($author as $authors):
?>
<?php //$author_name = get_author_by_id($single["author_id"]); ?>
<div id="wrapper">
<div class="headline-block">
<img src="img/test.jpg" alt="">
<p class="category"><?php echo $authors["author_name"]; ?></p>
<h3><?php echo $single["title"]; ?></h3>
<p><?php echo $single["text"]; ?></p>
<i class="fas fa-user"></i><a class="author" href="#"><?php echo $single["author_id"]; ?></a>
<i class="far fa-calendar-alt"></i><a class="date" href="#">12.12.2019</a>
<i class="far fa-eye"></i><a class="views" href="#"><?php echo $single["views"]; ?></a>
<i class="fas fa-comment"></i><a class="comments" href="#"><?php echo $single["comments"]; ?></a>
</div>
<?php
$dbhost = "localhost";
$dbname = "test_saneto";
$username = "root";
$password = "alex123crime";
$db = new PDO("mysql:host=$dbhost; dbname=$dbname", $username, $password); // Подключение к БД
// Получение всех статей
function get_singles_all() {
global $db;
$singles = $db -> query("SELECT * FROM single");
return $singles;
}
// Получение названия категории по ее id
function get_author_by_id() {
global $db;
$author = $db->query("SELECT * FROM authors");
return $author;
}
$author = get_author_by_id();
foreach ($author as $authors):
// for($i = 0; $i <= count($authors); $i++) {
// echo $authors[$i];
// }
?>
<?php endforeach; ?>
Кратко пересказываю букварь по базам данных и работе с ними из пхп.
SELECT * FROM table
бывают еще и другие. Например, с условием WHERE. Которые позволяют выбрать нужную запись сразу, не перебирая все палочки по одной. Это особенно бывает полезно, когда количество палочек перваливает за сотни тысяч.Поэтому если переписывать get_author_by_id буквально, то это должно быть так
function get_author_by_id($id) {
global $db;
$stmt = $db->query("SELECT * FROM authors WHERE id=?");
$stmt->execute([$id]);
return $stmt->fetch();
}
Но на самом деле здесь нужен только один запрос, который использует JOIN
У вас endforeach в db.php и по коду он раньше foreach:
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Имеется php скрипт который в цикле выполняет поиск записей по БД и запускается кроном каждую минутуОдна итерация цикла проходит примерно...
Как сделать обьязательным поле google recaptcha? Например если пользователь не прошел капчу то кнопка отправить не работает