За последние 24 часа нас посетили 21767 программистов и 1013 роботов. Сейчас ищет 691 программист ...

Реализация поиска

Тема в разделе "PHP для новичков", создана пользователем DevCode, 11 май 2020.

Метки:
  1. DevCode

    DevCode Новичок

    С нами с:
    18 сен 2019
    Сообщения:
    16
    Симпатии:
    0
    Доброго времени суток всем форумчанам. Возник у меня такой вопрос. У меня есть скрипт который выполняется в одном файле

    PHP:
    1. <?php
    2. require_once('engine/db.php');
    3. ?>
    4. <html>
    5. <head>
    6. <style>
    7. body{width:615px;font-family:arial;letter-spacing:1px;line-height:20px;}
    8. .tbl-qa{width: 100%;font-size:0.9em;background-color: #f5f5f5;}
    9. .tbl-qa th.table-header {padding: 5px;text-align: left;padding:10px;}
    10. .tbl-qa .table-row td {padding:10px;background-color: #FDFDFD;vertical-align:top;}
    11. .button_link {color:#FFF;text-decoration:none; background-color:#428a8e;padding:10px;}
    12. #keyword{border: #CCC 1px solid; border-radius: 4px; padding: 7px;background:url("demo-search-icon.png") no-repeat center right 7px;}
    13. .btn-page{margin-right:10px;padding:5px 10px; border: #CCC 1px solid; background:#FFF; border-radius:4px;cursor:pointer;}
    14. .btn-page:hover{background:#F0F0F0;}
    15. .btn-page.current{background:#F0F0F0;}
    16. </style>
    17. </head>
    18. <body>
    19. <?php  
    20.  
    21.     define("ROW_PER_PAGE",2);
    22.     $pdo_conn = new PDO(  DB_DSN, DB_USERNAME, DB_PASSWORD );
    23.   $search_keyword = '';
    24.   if(!empty($_POST['search']['keyword'])) {
    25.     $search_keyword = $_POST['search']['keyword'];
    26.   }
    27.   $sql = 'SELECT * FROM news WHERE title LIKE :keyword OR fullnews LIKE :keyword OR shortnews LIKE :keyword ORDER BY id DESC ';
    28.  
    29.  
    30.   $per_page_html = '';
    31.   $page = 1;
    32.   $start=0;
    33.   if(!empty($_POST["page"])) {
    34.     $page = $_POST["page"];
    35.     $start=($page-1) * ROW_PER_PAGE;
    36.   }
    37.   $limit=" limit " . $start . "," . ROW_PER_PAGE;
    38.   $pagination_statement = $pdo_conn->prepare($sql);
    39.   $pagination_statement->bindValue(':keyword', '%' . $search_keyword . '%', PDO::PARAM_STR);
    40.   $pagination_statement->execute();
    41.  
    42.   $row_count = $pagination_statement->rowCount();
    43.   if(!empty($row_count)){
    44.     $per_page_html .= "<div style='text-align:center;margin:20px 0px;'>";
    45.     $page_count=ceil($row_count/ROW_PER_PAGE);
    46.     if($page_count>1) {
    47.       for($i=1;$i<=$page_count;$i++){
    48.         if($i==$page){
    49.           $per_page_html .= '<input type="submit" name="page" value="' . $i . '" class="btn-page current" />';
    50.         } else {
    51.           $per_page_html .= '<input type="submit" name="page" value="' . $i . '" class="btn-page" />';
    52.         }
    53.       }
    54.     }
    55.     $per_page_html .= "</div>";
    56.   }
    57.  
    58.   $query = $sql.$limit;
    59.   $pdo_statement = $pdo_conn->prepare($query);
    60.   $pdo_statement->bindValue(':keyword', '%' . $search_keyword . '%', PDO::PARAM_STR);
    61.   $pdo_statement->execute();
    62.   $result = $pdo_statement->fetchAll();
    63.  
    64. ?>
    65. <form name='frmSearch' action='' method='post'>
    66.  
    67. <table class='tbl-qa'>
    68.   <thead>
    69.   <tr>
    70.     <th class='table-header' width='20%'>Title</th>
    71.     <th class='table-header' width='40%'>Description</th>
    72.     <th class='table-header' width='20%'>Date</th>
    73.   </tr>
    74.   </thead>
    75.   <tbody id='table-body'>
    76.   <?php
    77.   if(!empty($result)) {
    78.     foreach($result as $row) {
    79.   ?>
    80.     <tr class='table-row'>
    81.     <td><?php echo $row['title']; ?></td>
    82.     <td><?php echo $row['id']; ?></td>
    83.     </tr>
    84.     <?php
    85.     }
    86.   }
    87.   ?>
    88.   </tbody>
    89. </table>
    90. <?php echo $per_page_html; ?>
    91. </form>
    92. </body>
    93. </html>

    Я придумал для него немного другую структуру то есть в папке classes я создал новый класс search.php. Объявил его в файле с подключением к БД.
    В файле index.php создал функцию которая будет отрабатываться при переходе на /?do=search

    PHP:
    1. $action = isset( $_GET['do'] ) ? $_GET['do'] : "";
    2.  
    3. switch ( $action ) {
    4.  
    5. case 'search':
    6.     search();
    7.     break;
    8.  
    9. }
    10.  
    11. function search() {
    12.    
    13.  
    14.      require( TEMPLATE_PATH . "/main/search.php" );
    15. }
    Определил шаблон который будет подгружаться на этой странице.

    Но как сформировать класс и функцию для поиска и объявить ее в index.php и чтобы выполнялась она на странице /?do=search ума не приложу читаю литературу по PHP. Только учусь. Но пока ничего не выходит. Буду рад если подскажете.
     
  2. DevCode

    DevCode Новичок

    С нами с:
    18 сен 2019
    Сообщения:
    16
    Симпатии:
    0
    На сколько я понял можно запустить цикл while потом передать значение в return а в index

    PHP:
    1.  $results = array();
    2.  
    3.   $data = класс::функция();
    4.  
    5.   $results['класс'] = $data['results'];
    Но это в теории а на практике почему то не получается
     
  3. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.199
    Симпатии:
    184
    Разбить надо всё на функции, самому легче станет.
     
    artoodetoo нравится это.