@coldunox

Почему не работает фильтр?

Создал форму поиска
<form action="users.tpl.php" method="post">
    <label class="col-md-4 control-label" for="newRole">Найти студента</label>
    <input type="text" name="valueToSearch" placeholder="Поиск студентов..." ng-model="searchText" class="form-control "/>
    <input type="submit" name="search"  class="btn btn-default" value="Фильтр"/>
</form>


Код фильтрации
<?php 
   if (isset($_POST['search'])){
       $valueToSearch = $_POST['valueToSearch'];
       $query = "SELECT * FROM `users` WHERE concat(`fullName`, `group_name`) like '%" . $valueToSearch . "%'";
       $search_result = filterTable($query);
       
   } else {
       $query = "select * from `users` where role_id=2 order by fullName";
       $search_result = filterTable($query);
   }
   
   function filterTable($query){
       $conn = mysqli_connect('XXX', 'XXX', 'XXX', 'XXX');
       $filter_Result = mysqli_query($conn, $query);
       return $filter_Result;
}
?>


Таблица
<table  id="myTable" class="table table-bordered table-hover table-striped">
<thead>
    <tr>
        <th>ФИО</th>
        <th>Группа</th>
        <th>Логин</th>
        <th>Email</th>
    </tr>
</thead>
<tbody>
<?php
    while ($row = mysqli_fetch_array($search_result)) { ?>
        <tr data-ng-click="showEditForm(); getUserData(<?php echo $row['id'];?>);" >
            <td><?php echo $row['fullName']; ?></td>
            <td><?php echo $row['group_name']; ?></td>
            <td><?php echo $row['login']; ?></td>
            <td><?php echo $row['email']; ?></td>
            
        </tr>
    <?php } ?>
</tbody>
</table>


Почему не работает mysqli_fetch_array ?
  • Вопрос задан
  • 128 просмотров
Пригласить эксперта
Ответы на вопрос 1
DmitriyEntelis
@DmitriyEntelis
Думаю за деньги
Ладно, отвечу серьезно.

По поводу самой проблемы:
Можно в режиме телепата гадать 100500 раз о том что происходит.
По факту вопрос слишком абстрактный, научитесь дебажить код.

Конкретный пример: у вас есть ваш "код фильтрации".
Идеально было бы поставить xdebug и ide которая умеет с ним работать, но на крайний случай вас спасут print_r и var_dump.
Прямо с начала, берете, и для каждой строчки по очереди проверяете - те ли данные вам пришли, что вы ожидали, те ли строки сформировались что вы ожидали, итд.

Скорее всего вы поймете в чем проблема сами.
Даже если не поймете - сможете задать уже конкретный вопрос.
Ну и хорошо бы вывод всех ошибок и нотисов включать.
<?php
ini_set('error_reporting', E_ALL);
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);


Теперь в целом по коду:
1. Почитайте про MVC. mysqli функции вперемешку с html версткой - недопустимы.
2. Вынесите всю работу с базой в отдельную либу. есть 100500 готовых решений на гитхабе.
sql connect в filterTable - очень плохо.
3. В базу нельзя отправлять user input без обработки! Как минимум нужно делать mysqli_real_escape_string
4. За запрос where concat(`fullName`, `group_name`) = ... в реальном проекте, увольняют сразу. Запрос не использует индексы и должен для каждой строки таблицы выполнить объединение 2х полей, а потом еще и сравнить. Это дико медленно.
Нужна такая строка для поиска - собирайте её отдельным полем в базе.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
19 апр. 2024, в 16:53
1000 руб./за проект
19 апр. 2024, в 16:45
5000 руб./за проект
19 апр. 2024, в 16:22
30000 руб./за проект