簡體   English   中英

獲取搜索表單的結果-MySQL PHP

[英]Get Results of a search form- MySQL PHP

我有一個聯接表,它提供了數據庫的所有書籍。 並且所有書籍都可以正確顯示。 但是我需要根據表單中輸入的搜索查詢來進行操作。 這是我的加入查詢。

$rs = mysqli_query($connection,"SELECT DISTINCT bk.title As Title, YEAR(bk.date_released) AS Year, bk.price AS Price, cat.name AS Category, pub.name AS Publisher, aut.name AS Author,co.name AS Cover, cp.count AS Copies
            FROM books bk
            JOIN (SELECT book_id, COUNT(*) as count FROM copies GROUP BY book_id) cp
                ON bk.id = cp.book_id
            JOIN category cat
                ON cat.id = bk.category_id
            JOIN publishers pub
                ON pub.id = bk.publisher_id
            JOIN books_covers bk_co
                ON bk_co.book_id = bk.id
            JOIN covers co
                ON co.id = bk_co.cover_id
            JOIN books_authors bk_aut
                ON bk_aut.book_id = bk.id
            JOIN authors aut
                ON aut.id = bk_aut.author_id
            JOIN books_languages bk_lan
                ON bk_lan.book_id = bk.id
            JOIN languages lan
                ON lan.id = bk_lan.lang_id
            JOIN books_locations bk_loc
                ON bk_loc.book_id = bk.id
            JOIN locations loc
                ON loc.id = bk_loc.location_id
            ORDER BY bk.title ASC
                ");
    $copies = mysqli_query($connection,"SELECT DISTINCT COUNT(copies.book_id) FROM copies INNER JOIN books ON copies.book_id=books.id
        ");
    $dup = mysqli_query($connection,"SELECT book_id, COUNT(*) as count FROM copies GROUP BY book_id");
    $rows_copies = mysqli_fetch_array($copies);
    $rows = mysqli_fetch_assoc($rs);
    $tot_rows = mysqli_num_rows($rs);

這是我搜索形式的變量

if(!empty($_GET)){
    $title = $_GET['title'];
    $author = $_GET['author'];
    $isbn = $_GET['isbn'];
    $language = $_GET['language'];
    $publisher = $_GET['publisher'];
    $year = $_GET['year'];
    $category = $_GET['category'];
}else{
    $title = "";
    $author = "";
    $isbn = "";
    $language = "";
    $publisher = "";
    $year = "";
    $category = "";
    $language = "";
}

這是我顯示結果的代碼,

<div class="jumbo">
   <?php if($tot_rows > 0){  ?>
   <?php do { ?>
       <div class="col-md-3">
           <span class="product-image">

                <img src="<?php echo $rows['Cover'] ?>" class="img-thumbnail product-img" alt="">
            </span>
               <ul class="iteminfo">
                    <li><strong>Title: </strong><?php echo $rows['Title'] ?></li>
                    <li><strong>Category: </strong><?php echo $rows['Category'] ?></li>
                    <li><strong>Author: </strong><?php echo $rows['Author'] ?></li>
                    <li><strong>Price: </strong><?php echo $rows['Price']." Rs" ?></li>
                    <li><strong>Publisher: </strong><?php echo $rows['Publisher'] ?></li>
                    <li><strong>Copies: </strong><?php echo $rows['Copies'] ?></li>
                </ul>
        </div>
    <?php } while($rows=mysqli_fetch_assoc($rs)); }else{ ?>
    <?php echo 'No Results'; }?>
   </div>

如何僅獲得結果我用相應的搜索查詢進行搜索。 例如,如果我搜索一本名為“羅密歐·朱麗葉”的書,則只需要顯示該書即可

我試圖用此代碼測試diplay,但從未成功

$titlequery = mysqli_query($connection," SELECT * FROM "$rs" WHERE Title = "$title" ");
$rows = mysqli_fetch_assoc($titlequery);

幫我解決這個問題。

您正在嘗試執行子查詢,但是傳遞的$rs變量是一種資源,而不是字符串。 如果將原始查詢設置為變量並將其傳遞進來,則它應該可以工作:

$sql = "SELECT DISTINCT bk.title As Title, YEAR(bk.date_released) AS Year, bk.price AS Price, cat.name AS Category, pub.name AS Publisher, aut.name AS Author,co.name AS Cover, cp.count AS Copies
        FROM books bk
        JOIN (SELECT book_id, COUNT(*) as count FROM copies GROUP BY book_id) cp
            ON bk.id = cp.book_id
        JOIN category cat
            ON cat.id = bk.category_id
        JOIN publishers pub
            ON pub.id = bk.publisher_id
        JOIN books_covers bk_co
            ON bk_co.book_id = bk.id
        JOIN covers co
            ON co.id = bk_co.cover_id
        JOIN books_authors bk_aut
            ON bk_aut.book_id = bk.id
        JOIN authors aut
            ON aut.id = bk_aut.author_id
        JOIN books_languages bk_lan
            ON bk_lan.book_id = bk.id
        JOIN languages lan
            ON lan.id = bk_lan.lang_id
        JOIN books_locations bk_loc
            ON bk_loc.book_id = bk.id
        JOIN locations loc
            ON loc.id = bk_loc.location_id
        ORDER BY bk.title ASC
            ";
$rs = mysqli_query($connection, $query);
$titlequery = mysqli_query($connection, " SELECT * FROM ({$query}) WHERE Title = '{$title}'");

另外,當您需要使用PHP引號作為字符串定界符時,請注意SQL查詢中的引號。 PHP將把您的字符串" SELECT * FROM "$rs" WHERE Title = "$title" "SELECT * FROM$rs資源, WHERE Title =$title變量和 ,但沒有任何串聯。 您需要反斜杠SQL引號,例如" SELECT * FROM \\"$rs\\" WHERE Title = \\"$title\\" " ,因此PHP認為您不想結束字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM