2017-02-16 9 views
0

У меня есть 6 элементов в моей базе данных тестов. Окно поиска находится по адресу http://vince.netau.net Все 6 элементов в базе данных отображаются до того, как я даже что-то искал в окне поиска. Что мне нужно изменить в коде, чтобы только окно поиска отображалось без каких-либо результатов? СпасибоПоиск PHP - как подобрать окно поиска без результатов

<?php 
define("ROW_PER_PAGE",2); 
require_once('db.php'); 
?> 
<html> 
<head> 
<style> 
body{width:615px;font-family:arial;letter-spacing:1px;line-height:20px;} 
.tbl-qa{width: 100%;font-size:0.9em;background-color: #f5f5f5;} 
.tbl-qa th.table-header {padding: 5px;text-align: left;padding:10px;} 
.tbl-qa .table-row td {padding:10px;background-color: #FDFDFD;vertical-align:top;} 
.button_link {color:#FFF;text-decoration:none; background-color:#428a8e;padding:10px;} 
#keyword{border: #CCC 1px solid; border-radius: 4px; padding: 7px;background:url("demo-search-icon.png") no-repeat center right 7px;} 
.btn-page{margin-right:10px;padding:5px 10px; border: #CCC 1px solid; background:#FFF; border-radius:4px;cursor:pointer;} 
.btn-page:hover{background:#F0F0F0;} 
.btn-page.current{background:#F0F0F0;} 
</style> 
</head> 
<body> 
<?php 
    $search_keyword = ''; 
    if(!empty($_POST['search']['keyword'])) { 
     $search_keyword = $_POST['search']['keyword']; 
    } 
    $sql = 'SELECT * FROM posts WHERE post_title LIKE :keyword OR description LIKE :keyword OR post_at LIKE :keyword ORDER BY id DESC '; 

    /* Pagination Code starts */ 
    $per_page_html = ''; 
    $page = 1; 
    $start=0; 
    if(!empty($_POST["page"])) { 
     $page = $_POST["page"]; 
     $start=($page-1) * ROW_PER_PAGE; 
    } 
    $limit=" limit " . $start . "," . ROW_PER_PAGE; 
    $pagination_statement = $pdo_conn->prepare($sql); 
    $pagination_statement->bindValue(':keyword', '%' . $search_keyword . '%', PDO::PARAM_STR); 
    $pagination_statement->execute(); 

    $row_count = $pagination_statement->rowCount(); 
    if(!empty($row_count)){ 
     $per_page_html .= "<div style='text-align:center;margin:20px 0px;'>"; 
     $page_count=ceil($row_count/ROW_PER_PAGE); 
     if($page_count>1) { 
      for($i=1;$i<=$page_count;$i++){ 
       if($i==$page){ 
        $per_page_html .= '<input type="submit" name="page" value="' . $i . '" class="btn-page current" />'; 
       } else { 
        $per_page_html .= '<input type="submit" name="page" value="' . $i . '" class="btn-page" />'; 
       } 
      } 
     } 
     $per_page_html .= "</div>"; 
    } 

    $query = $sql.$limit; 
    $pdo_statement = $pdo_conn->prepare($query); 
    $pdo_statement->bindValue(':keyword', '%' . $search_keyword . '%', PDO::PARAM_STR); 
    $pdo_statement->execute(); 
    $result = $pdo_statement->fetchAll(); 
?> 
<form name='frmSearch' action='' method='post'> 
<div style='text-align:right;margin:20px 0px;'><input type='text' name='search[keyword]' value="<?php echo $search_keyword; ?>" id='keyword' maxlength='25'></div> 
<table class='tbl-qa'> 
    <thead> 
    <tr> 
     <th class='table-header' width='20%'>Title</th> 
     <th class='table-header' width='40%'>Description</th> 
     <th class='table-header' width='20%'>Date</th> 
    </tr> 
    </thead> 
    <tbody id='table-body'> 
    <?php 
    if(!empty($result)) { 
     foreach($result as $row) { 
    ?> 
     <tr class='table-row'> 
     <td><?php echo $row['post_title']; ?></td> 
     <td><a href="<?php echo $row['description']; ?>" 
       <td><?php echo $row['description']; ?></td> 
       <td><?php echo $row['post_at']; ?></td> 
     </tr> 
    <?php 
     } 
    } 
    ?> 
    </tbody> 
</table> 
<?php echo $per_page_html; ?> 
</form> 
</body> 
</html> 
+0

я должен изменить этот блок кода – user3444610

ответ

0

Чтобы упростить ответ Чипа .. Вам просто нужно, чтобы сделать ваш первый IF контроль все категории и код отображения ...

$search_keyword = $_POST['search']['keyword']; 
    } << remove this closing curly bracket 

    and put it here 
    ....... 
    $result = $pdo_statement->fetchAll(); 
} // END if $_POST['search']['keyword'] is !empty 
?> 
+0

Действительно смущен. Я должен был изменить 3 строки кода, которые у меня были, в 1 строку, которую вы предоставили, и удалить фигурные скобки и поместить их перед $ result = $ pdo_statement-> fetchAll(); Если это так, то это дало мне ошибку? – user3444610

+0

перемещение одного '}' в вашем коде из вопроса, в противном случае ваш код будет идентичным. Переместите его под '$ search_keyword = $ _POST ['search'] ['keyword'];' быть ниже '$ result = $ pdo_statement-> fetchAll(); ' –

1

Вы должны перенести весь ваш php-код базы данных в этот первый оператор if. Вы проверяете, была ли форма отправлена, но вы все равно запускаете запрос. Перемещая весь код в этот оператор if, вы предотвратите запуск запроса, если форма не была отправлена. Вы уже проверяете, являются ли ваши результаты пустыми, так что результаты не определены, это нормально.

$search_keyword = ''; 
    if(!empty($_POST['search']['keyword'])) { 
     $search_keyword = $_POST['search']['keyword']; 
$sql = 'SELECT * FROM posts WHERE post_title LIKE :keyword OR description LIKE :keyword OR post_at LIKE :keyword ORDER BY id DESC '; 

    /* Pagination Code starts */ 
    $per_page_html = ''; 
    $page = 1; 
    $start=0; 
    if(!empty($_POST["page"])) { 
     $page = $_POST["page"]; 
     $start=($page-1) * ROW_PER_PAGE; 
    } 
    $limit=" limit " . $start . "," . ROW_PER_PAGE; 
    $pagination_statement = $pdo_conn->prepare($sql); 
    $pagination_statement->bindValue(':keyword', '%' . $search_keyword . '%', PDO::PARAM_STR); 
    $pagination_statement->execute(); 

    $row_count = $pagination_statement->rowCount(); 
    if(!empty($row_count)){ 
     $per_page_html .= "<div style='text-align:center;margin:20px 0px;'>"; 
     $page_count=ceil($row_count/ROW_PER_PAGE); 
     if($page_count>1) { 
      for($i=1;$i<=$page_count;$i++){ 
       if($i==$page){ 
        $per_page_html .= '<input type="submit" name="page" value="' . $i . '" class="btn-page current" />'; 
       } else { 
        $per_page_html .= '<input type="submit" name="page" value="' . $i . '" class="btn-page" />'; 
       } 
      } 
     } 
     $per_page_html .= "</div>"; 
    } 

    $query = $sql.$limit; 
    $pdo_statement = $pdo_conn->prepare($query); 
    $pdo_statement->bindValue(':keyword', '%' . $search_keyword . '%', PDO::PARAM_STR); 
    $pdo_statement->execute(); 
    $result = $pdo_statement->fetchAll(); 
    } 
+0

Новичок здесь поэтому не совсем точно, что вы имеете в виду. Это все, что у меня есть в моем db.php user3444610