2017-02-16 27 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

...あなたのIF最初の制御、検索とディスプレイのすべてのコードを作成する必要があり、私はここのコード – user3444610

答えて

0

チップの答えを簡単にするために..あなただけの

$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文に移動することで、フォームが実際に提出されない限りクエリが実行されなくなります。あなたはすでにあなたの結果が空であるかどうかをチェックしているので、結果が未定義であることはOKです。

$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で持っているものです。<?php \t $ database_username = ''; \t $ database_password = ''; \t $ pdo_conn =新しいPDO( '; dbname ='、$、$); ?> – user3444610

関連する問題