Я создал базу данных, полную фильмов, которая связана с HTML-формой, информация о которой переносится с помощью PHP POST (действует как база данных фильмов).
Когда пользователь вводит поисковый запрос (Либо название, жанр, год или классификация) PHP скрипт search.php передается информация.
Все идет хорошо, однако у меня также есть столбец в моей БД, который называется times_searched со значением по умолчанию, равным нулю.
Мне кажется, что одна из больших проблем заключается в том, что у меня естья слишком долго смотрел на этот файл, и что-то простое для меня сейчас не очевидно.
Я очень плохо знаком с PHP и WebDev в целом.Я попытался выпустить второй оператор для выполнения внутри цикла foreach класса TableRow и попробовал разные синтаксисы и пытался связать предыдущие операторы с новыми операторами.
class TableRows extends RecursiveIteratorIterator
{
function __construct($it)
{
parent::__construct($it, self::LEAVES_ONLY);
}
function current()
{
return "<td style='width:150px;border:1px solid black;'>" .
parent::current()."</td>";
}
function beginChildren()
{
echo "<tr>";
}
function endChildren()
{
echo "</tr>" . "\n";
}
}
function printAssocArray($stmt)
{
foreach (new TableRows(new RecursiveArrayIterator($stmt->fetchAll()))
as $k=>$v) {
echo $v;
}
}
require 'Templates/header.php';
//DB variables
$serverName = "localhost";
$userName = "root";
$password = "";
//Post variables
$title = ($_POST['title']);
$year = ($_POST['year']);
$genre = ($_POST['genre']);
$rating = ($_POST['rating']);
if (isset($_POST['submit'])) {
try {
//Create PDO object using DB variables
$conn = new PDO(
"mysql:host=$serverName;dbname=project_db", $userName, $password
);
//Set PDO error mode to exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "<h3 class='center'>Connection Successful!</h3>";
if (!empty($_POST['title']) && empty($_POST['genre'])
&& empty($_POST['rating']) && empty($_POST['year'])
) {
$stmt = $conn->prepare(
"UPDATE movies SET
times_searched = times_searched + 1 WHERE id = :id;
IN (SELECT * FROM movies WHERE title LIKE '%$title%'"
);
$result = $stmt->setFetchMode(PDO::FETCH_ASSOC);
$stmt->bindValue(':id', $result['id']);
$stmt->execute();
//Use function call to print information to table using TableRows
printAssocArray($stmt);
}elseif (!empty($_POST['genre']) && empty($_POST['rating'])
&& empty($_POST['year']) && empty($_POST['title'])
) {
$stmt = $conn->prepare(
"SELECT * FROM movies WHERE genre LIKE '%$genre%'"
);
$stmt->execute();
//Collect Result in associative array
$result = $stmt->setFetchMode(PDO::FETCH_ASSOC);
//Use function call to print information to table using TableRows
printAssocArray($stmt);
}
//New Block
if (!empty($_POST['title']) && empty($_POST['genre'])
&& empty($_POST['rating']) && empty($_POST['year'])
) {
$updateQuery = "UPDATE movies SET times_searched = times_searched + 1
WHERE id IN (SELECT id FROM movies WHERE title LIKE :title)";
$stmt = $conn->prepare($updateQuery);
$stmt->bindValue(':title', "%{$title}%");
$stmt->execute();
$outputQuery = "SELECT * FROM movies WHERE title LIKE :title";
$stmt2 = $conn->prepare($outputQuery);
$stmt2->bindValue(':title', "%{$title}%");
$data = $stmt2->fetchAll(PDO::FETCH_ASSOC);
foreach ($data as $row) {
foreach ($row as $v) {
echo $v, " ";
}
echo "<br>",\n;
}
Цель состоит в том, чтобы попытаться вернуть запрошенныйзапрос из базы данных, затем увеличивайте столбец times_searched перед его печатью с использованием класса TableRow, это должно происходить при каждом запуске запроса (если страница обновляется, столбец times_searched должен увеличиваться)
Это используется для завершенияпроекта домашней работы, и безопасность не обязательно является фактором (хотя было запрошено использование PDO).