2013-08-09 4 views
0

Я сделал этот сайт для школьного проекта, и, похоже, он не извлекает данные. Я перебираю его для AGES и не могу понять, почему он не извлекает. SQL иногда работает в phpMyAdmin, но никогда не работает в интерфейсе.Система поиска базы данных

<?php 

$con=mysqli_connect("localhost","root","#","book_catalogue"); 

{ 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
} 
?> 
<div id="wrapper"> 
    <div id="left-col"> 
     <img src="images/left-img.png" alt="books" /> 
    </div> 
    <div id="header"> 
     <h1>BOOK CATALOGUE</h1> 
    </div> 

    <!--Radio buttons that allow user to select the search criteria--> 
    <div id="navigation"> 
     <form name="input" action="indexV4.php" method="get"> 
       SEARCH BY: ALL<input type="radio" name="books" value="ALL" checked> 
       TITLE<input type="radio" name="books" value="TITLE"> 
       AUTHOR<input type="radio" name="books" value="AUTHOR"> 
       GENRE<input type="radio" name="books" value="GENRE"> 
       BOOK TYPE<input type="radio" name="books" value="BOOKTYPE"> 
       <input type="text" name="SEARCH" value="SEARCH"> 
       <input type="submit" value="GO"> 
     </form> 
    </div> 
      <?php 
      $Books = $_GET['books']; 
      $Search = $_GET['SEARCH']; 
       //if the radio button 'TITLE' is selected, this query will run 
       if($Books=='TITLE') 
        { 
         $result = mysqli_query($con," 
         SELECT tbl_books.ISBN, tbl_books.Title, tbl_books.Author, tbl_books.Book_Image, tbl_book_type.Name, tbl_categories.Name FROM tbl_books, tbl_book_type, tbl_categories WHERE (tbl_books.Type_id = tbl_book_type.Type_id) AND (tbl_books.Category_id = tbl_categories.Category_id) 
         WHERE tbl_books.Title LIKE '%$Search%'"); 
        } 
        //if the radio button 'AUTHOR' is selected, this query will run 
       else if ($Books=='AUTHOR') 
        { 
         $result = mysqli_query($con," 
         SELECT tbl_books.ISBN, tbl_books.Title, tbl_books.Author, tbl_books.Book_Image, tbl_book_type.Name, tbl_categories.Name FROM tbl_books, tbl_book_type, tbl_categories 
         WHERE (tbl_books.Type_id = tbl_book_type.Type_id) AND (tbl_books.Category_id = tbl_categories.Category_id) 
         WHERE tbl_books.Author LIKE '%$Search%'"); 
        } 
        //if the radio button 'GENRE' is selected, this query will run 
       else if ($Books=='GENRE') 
        { 
         $result = mysqli_query($con," 
         SELECT tbl_books.ISBN, tbl_books.Title, tbl_books.Author, tbl_books.Book_Image, tbl_books.Type_id, tbl_books.Category_id FROM tbl_books 
         WHERE tbl_books.Author LIKE '%$Search%'"); 
        } 
        //if the radio button 'BOOK TYPE' is selected, this query will run 
       else if ($Books=='BOOKTYPE') 
        { 
         $result = mysqli_query($con," 
         SELECT tbl_books.ISBN, tbl_books.Title, tbl_books.Author, tbl_books.Book_Image, tbl_book_type.Name, tbl_categories.Name FROM tbl_books, tbl_book_type, tbl_categories 
         WHERE (tbl_books.Type_id = tbl_book_type.Type_id) AND (tbl_books.Category_id = tbl_categories.Category_id) 
         WHERE tbl_book_type.Name LIKE '%$Search%'"); 
        } 
        //if 'ALL' is selected, this query will run 
       else 
       { 
        $result = mysqli_query($con, " 
        SELECT tbl_books.ISBN, tbl_books.Title, tbl_book_type.Name, tbl_categories.Name FROM tbl_books, tbl_book_type, tbl_categories WHERE (tbl_books.Type_id = tbl_book_type.Type_id) AND (tbl_books.Category_id = tbl_categories.Category_id) 
        WHERE tbl_books.Title OR tbl_books.Author OR tbl_categories.Name OR tbl_book_type.Name LIKE '%$Search%'"); 
       } 
      //while it is retrieving the data, echo it onto the screen 
    while($row = mysqli_fetch_array($result,MYSQLI_BOTH)) 
    { 
      ?> 
    </div> 
    <div id="content"> 
    <!--Display of search results--> 

     <div class="books"> 
      <img src="book-covers/<?php echo $row['Book_Image']; ?>" alt="<?php echo $row['Title']; ?>" /> 
      <p class="first"><?php echo $row['Title']; ?></p> 
      <p><?php echo $row['Author']; ?></p> 
      <p><?php echo $row['ISBN']; ?></p> 
      <p><?php echo $row['Type_id']; ?></p> 
      <p><?php echo $row['Category_id']; ?></p> 
     </div> 
    </div> 
    <?php 
    //close the loop 
    } 
    ?> 
</div> 

+0

** Что означает «не похоже на получение данных»? ** Что произошло, когда вы его попробовали? Получили ли вы неправильные результаты? Вы получили * нет * результаты? Если результаты были неверными, что сделало их неправильными? Что вы ожидали вместо этого? Вы получили * любые * правильные результаты? Если да, то каковы они? Не заставляй нас гадать. –

+0

Всякий раз, когда я загружаю страницу, это утверждение появляется: Ошибка синтаксиса: ошибка синтаксиса, «{» в C: \ xampp \ htdocs \ book_catalogue \ indexV4.php в строке 82 – user2666574

+0

Возможно, вам стоит искать '{' в строке 82 . –

ответ

0

Ваш запрос неверен, чтобы начать с. Вы не можете иметь два ГДЕ в одном выражении. Ниже приведен один из вашего оператора запроса

SELECT tbl_books.ISBN, tbl_books.Title, 
     tbl_books.Author, tbl_books.Book_Image, 
     tbl_book_type.Name, tbl_categories.Name 
FROM tbl_books, tbl_book_type, tbl_categories 
WHERE (tbl_books.Type_id = tbl_book_type.Type_id) AND 
     (tbl_books.Category_id = tbl_categories.Category_id) 
WHERE tbl_books.Title LIKE '%$Search%' 

ли вы видите вы используете WHERE два раза?


Кроме того, ваш код не является надежным. Вы должны использовать PDO или, по крайней мере, использовать mysql_real_escape_string.

+0

Да, я вижу, у меня есть ГДЕ дважды, но я не мог придумать ничего другого, чтобы увидеть, будет ли это работать. И не могли бы вы объяснить, почему это не безопасно, я ученик средней школы и не узнал об этом до – user2666574

0

Как сказано в заявлении, вы не можете иметь 2 ГДЕ в одном утверждении.

Предлагаю изменить содержимое инструкции if. Вместо mysqli_query($con, "SELECT BLA BLA");

ли это:

$ SQL = "SELECT BLA BLA";

Затем, после того, если операторы создают в $ SQL, выполните следующие действия:

$result = mysql_query($con,$sql); 

if($result === false) { 
    echo 'Error in query [' . $sql . ']' . "\n" . 'Error: ' . mysql_error(); 
} 

Тогда вы увидите, что случилось с вашими запросами.

EDIT: Позвольте мне попытаться сделать это более ясным:

if($Books=='TITLE') 
        { 
         $sql = "SELECT tbl_books.ISBN, tbl_books.Title, tbl_books.Author, tbl_books.Book_Image, tbl_book_type.Name, tbl_categories.Name FROM tbl_books, tbl_book_type, tbl_categories WHERE (tbl_books.Type_id = tbl_book_type.Type_id) AND (tbl_books.Category_id = tbl_categories.Category_id) 
         WHERE tbl_books.Title LIKE '%$Search%'"; 
        } 

Изменить ВСЕ ваши, если/иначе, если заявления, чтобы выглядеть. Что вы делаете, это использовать инструкции if, чтобы решить, какой запрос будет содержать переменная $sql;

Затем, ПОСЛЕ всех операторов if, вы можете отправить запрос $sql, как я показал выше. Если в вашем запросе есть ошибка, раздел if($result === false) выведет жалобу mysql на ваш экран, и это должно помочь вам отладить ваш запрос.

+0

. Что изменилось бы с $ con до $ sql? Как я сказал invisal, я всего лишь ученик средней школы, поэтому вам, возможно, придется окутать некоторые вещи, а потом, может быть, некоторые – user2666574

Смежные вопросы