Поиск на сайте с выводом результатов из бд ( расширенный поиск)

Рейтинг: -1Ответов: 2Опубликовано: 25.02.2023

Есть 4 поля куда человек вводит данные и при нажатие на кнопку должен выводиться результат(Название,автор,год, Под редакцией). При нажатие на кнопку "поиск" перебрасывает на "vendor/search.php" и выдаёт NULL. Собственно сама страница findpolz.php

<?php
session_start();

?>
<!DOCTYPE html>
<html lang="en">

<head>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
    <link rel="stylesheet" type="text/css" href="style/style.css">
    <link rel="stylesheet" type="text/css" href="search.js">
    <script data-src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js">
        < script src = "jquery-3.2.1.min.js" / >
    </script>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Научно-справочная библиотека</title>
</head>

<body>
    <h1>Пользователь: ____</h1>
    <form name="search" method="POST" action="/vendor/search.php">
        <div style="display:flex; flex-direction: row; justify-content: center; align-items: center">
            <div class="info">
                <label>Название:</label>
                <input type="text" name="search[title]" />
            </div>
            <div class="info">
                <label>Автор:</label>
                <input type="text" name="search[author]" />
            </div>
            <div class="info">
                <label>Год:</label>
                <input type="text" name="search[year]" />
            </div>
            <div class="info">
                <label>Под редакцией:</label>
                <input type="text" name="search[compedit]" />
            </div>
            <div class="info">
                <form action="findpolz.php">
                    <input type="submit" name="submitForm" value="Поиск" />
                </form>
            </div>
            <div class="info">
                <form action="vendor/logout.php">
                    <input type="submit" name="SubmitForm" value="Выход" />
                </form>
            </div>
        </div>
        <br>
    </form>
    <h3><u>Результаты поиска</u></h3><br />
    <div class="table-responsive">
        <table class="table">
            <thead>
                <tr>
                    <th>#</th>
                    <th>Название</th>
                    <th>Автор</th>
                    <th>Год</th>
                    <th>Под редакцией</th>
                </tr>
            </thead>
            <tbody>
                <?php
                if (!$infprintedit) {
                    echo '<tr>No data found</tr>';
                } else {
                    foreach ($infprintedit as $key => $value) {
                ?>
                        <tr>
                            <td>
                                <?php echo $key + 1; ?>
                            </td>
                            <td>
                                <?php echo $value['title']; ?>
                            </td>
                            <td>
                                <?php echo $value['author']; ?>
                            </td>
                            <td>
                                <?php echo $value['year']; ?>
                            </td>
                            <td>
                                <?php echo $value['compedit']; ?>
                            </td>
                        </tr>

                <?php
                    }
                }
                ?>
            </tbody>
        </table>
    </div>
</body>

</html>

search.php

<?php
session_start();
require_once "connect.php";
$title = "";
$author = "";
$year = "";
$compedit = "";
$queryCondition = "";
if (!empty($_POST)) {
    $submitForm = $_POST["submitForm"];
    foreach ($_POST as $k => $v) {
        if (!empty($v)) {

            $queryCases = array("title", "author", "year", "compedit");
            if (in_array($k, $queryCases)) {
                if (!empty($queryCondition)) {
                    $queryCondition .= " AND ";
                } else {
                    $queryCondition .= " WHERE ";
                }
            }
            switch ($k) {
                case "title":
                    if (!empty($_POST["search"]["title"])) {
                        $queryCondition .= " title LIKE '%" . $v . "%'";
                    }
                    break;
                case "author":
                    if (!empty($_POST["search"]["author"])) {
                        $queryCondition .= " author LIKE '%" . $v . "%'";
                    }
                    break;
                case "year":
                    if (!empty($_POST["search"]["year"])) {
                        $queryCondition .= " year LIKE '%" . $v . "%'";
                    }
                    break;
                case "compedit":
                    if (!empty($_POST["search"]["compedit"])) {
                        $queryCondition .= " compedit LIKE '%" . $v . "%'";
                    }
                    break;
            }
        }
    }
}
$sql = "SELECT `title`, `author`, `year`, `compedit`  FROM infprintedit WHERE `title` = '$search[title]' AND `author` = '$search[author]' AND `year` = '$search[year]' AND `compedit` = '$search[compedit]'";
var_dump($result);
$result = mysqli_query($connect, $sql);

Ответы

▲ 0

сделал всё в одном файле и на одной странице

<?php
session_start();
require_once "vendor/connect.php";
?>
<!DOCTYPE html>
<html lang="en">

<head>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
    <link rel="stylesheet" type="text/css" href="style/style.css">
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Научно-справочная библиотека</title>
</head>

<body>
    <?php
    if (isset($_SESSION['user'])) {
        echo "<h1>" . $_SESSION['user']['login'], "," . $_SESSION['user']['role'] . ".</h1>"; 
    }
    ?>
    <form name="search" method="POST" action="findpolz.php">
        <div style="display:flex; flex-direction: row; justify-content: center; align-items: center">
            <div class="info">
                <label>Название:</label>
                <input type="text" name="search[title]" />
            </div>
            <div class="info">
                <label>Автор:</label>
                <input type="text" name="search[author]" />
            </div>
            <div class="info">
                <label>Год:</label>
                <input type="text" name="search[year]" />
            </div>
            <div class="info">
                <label>Под редакцией:</label>
                <input type="text" name="search[compedit]" />
            </div>
            <div class="info">
                <input type="submit" name="submitForm" value="Поиск" />
            </div>
    </form>
    <div class="info">
        <form action="vendor/logout.php">
            <input type="submit" name="SubmitForm" value="Выход" />
        </form>
    </div>
    </div>
    <br>
    <?php
    $queryCondition = "";
    if (!empty($_POST)) {
        $submitForm = $_POST["submitForm"];
        foreach ($_POST["search"] as $key => $value) {
            if (isset($value)) {
                if (empty($queryCondition)) {
                    $queryCondition = " WHERE ";
                } else {
                    $queryCondition .= " AND ";
                }
                $queryCondition .= "$key LIKE '%" . $value . "%'";
            }
        }
    }

    $sql = "SELECT `id`,`title`, `author`, `year`, `publisher`, `compedit`,`countpages`,`archive`,`BBK`,`inventnumber` FROM infprintedit " . $queryCondition;
    $result = mysqli_query($connect, $sql);
    $res = mysqli_fetch_all($result, MYSQLI_ASSOC);


    $rowsCount = $result->num_rows; // количество полученных строк
    

    echo "<table style='width: 100%;'><tr><th>Название</th><th>Автор</th><th>Год</th><th>Издательство</th><th>Под редакцией</th><th>Количество страниц</th><th>Архив</th><th>ББК</th><th>Инвентарный№</th></tr>";
    foreach ($result as $row) {
        ?>

        <tr>
            <td>
                <?php echo $row["title"]; ?>
            </td>
            <td>
                <?php echo $row["author"]; ?>
            </td>
            <td>
                <?php echo $row["year"]; ?>
            </td>
            <td>
                <?php echo $row["publisher"]; ?>
            </td>
            <td>
                <?php echo $row["compedit"]; ?>
            </td>
            <td>
                <?php echo $row["countpages"]; ?>
            </td>
            <td>
                <?php echo $row["archive"]; ?>
            </td>
            <td>
                <?php echo $row["BBK"]; ?>
            </td>
            <td>
                <?php echo $row["inventnumber"]; ?>
            </td>
        </tr>
    <?
    }
    echo "</table>";
    $result->free();
    ?>
</body>

</html>
▲ -1
$queryCondition = "";    
if (!empty($_POST["search"])) {
    $SubmitsForm = $_POST["SubmitsForm"];
    foreach ($_POST["search"] as $k => $v) {
        if (!empty($v)) {

            $queryCases = array("title", "author", "year", "compedit");
                if(in_array($k,$queryCases)) {
                    if(!empty($queryCondition)) {
                        $queryCondition .= " AND ";
                    } else {
                        $queryCondition .= " WHERE ";
                    }
                }
            switch ($k) {
                case "title":
                    if (!empty($v)) {
                         $queryCondition .= " title LIKE '%".$v."%'";
                        } 
                 break;
                case "author":
                    if (!empty($v)) {
                        $queryCondition .= " author LIKE '%".$v."%'";
                    } 
                    break;
                case "year":
                    if (!empty($v)) {
                        $queryCondition .= " year LIKE '%".$v."%'";
                    }
                    break;
                case "compedit":
                    if (!empty($v)) {
                        $queryCondition .= " compedit LIKE '%".$v."%'";
                    } 
                    break;
            }
        }
    }
}