Прошу помощи по связке 2х скриптов в 1
Здравствуйте! Нашел скрипт динамической подгрузки данных из бд по клику на кнопку - http://ajaxs.ru/lesson/ajax/127-dina..._stranicu.html , и пытаюсь внедрить в мой скрипт сортировки данных из бд, но не получается объеденить их в 1 рабочий скрипт, помогите пожалуйста найти ошибку и исправить ее, вот сам код:
Код сортировки данных из бд на ajax(основной): <script type="text/javascript"> $(function() { $(".search_button").click(function() { // получаем то, что написал пользователь var searchString = $("#search_box").val(); var citysearhc = $("#selss").val(); var categorysear = $("#catsea").val(); // если searchString не пустая // делаем ajax запрос $.ajax({ type: "POST", url: "/search.php", data: {search: searchString, xfsearh: citysearhc, xfsearh2: categorysear }, beforeSend: function(html) { // запустится до вызова запроса $("#results").html(''); $("#searchresults").show(); $(".word").html(citysearhc); }, success: function(html){ // запустится после получения результатов $("#results").hide("fast").append(html).show("slow"); } }); return false; }); }); </script> Код динамической подгрузки данных на страницу: <script type="text/javascript"> $(document).ready(function(){ $("#imgLoad").hide(); //Скрываем прелоадер }); var num = 2; //чтобы знать с какой записи вытаскивать данные $(function() { $("#load div").click(function(){ //Выполняем если по кнопке кликнули $("#imgLoad").show(); //Показываем прелоадер $.ajax({ url: "/search.php", type: "POST", data: {"num": num}, cache: false, success: function(response){ if(response == 0){ // смотрим ответ от сервера и выполняем соответствующее действие alert("Больше нет записей"); $("#imgLoad").hide(); }else{ $("#results").append(response); num = num + 2; $("#imgLoad").hide(); } } }); }); }); </script> И сам код обработки данных: <?php include('db.php'); $db = new db(); //получаем данные через $_POST if (isset($_POST['search'])) { $num = $_POST['num']; $word = mysql_real_escape_string($_POST['search']); $word2 = mysql_real_escape_string($_POST['fsearh']); $word3 = mysql_real_escape_string($_POST['fsearh2']); $temp = array(); if (isset($_POST['search'])) { $temp[] = "title LIKE '%" . $_POST['search'] . "%'"; } if ($_POST['fsearh2'] == "0") { } else { $temp[] = "category LIKE '%" . $_POST['fsearh2'] . "%'"; } if ($_POST['fsearh'] == "0") { } else { $temp[] = "fields LIKE '%" . $_POST['fsearh'] . "%'"; } $sql = "SELECT * FROM post WHERE " . implode(' AND ', $temp) . ' LIMIT '.$num.', 3'; // Получаем результаты $row = $db->select_list($sql); if(count($row)) { $end_result = ''; foreach($row as $r) { $content = $r['short_story']; preg_match('/<img(.*)src(.*)=(.*)"(.*)"/U', $content, $regexResult); $firstImgScr = array_pop($regexResult); $end_result .= <<<HTML <img src="{$firstImgScr}"/> <p>{$r['title']}</p> HTML; } echo $end_result; } else { echo '<li>По вашему запросу ничего не найдено</li>'; } } ?> Не могу врубиться как эти 2 скрипта объеденить чтобы можно было и сортировать данные по клику на кнопку(но при этом чтобы выводились к примеру 10 записей из бд, а остальное по клику на кнопку Загрузить еще), то бишь я нажал Сортировать и вывелось 10 записей по моим параметрам, затем ниже нажал кнопку Загрузить еще и появилось еще 10 записей по этим параметрам(если они есть в бд) Может оставить эти 2 скрипта в работе, и попробовать сделать на php проверку на отправку post num? если он есть то менять выборку...хотя вряд ли поможет |
Во-первых так делать запросы к базе, а во-вторых сортировка выборки вообще не указывается.
|
Цитата:
Пробовал только что менять в коде обработки if (isset($_POST['search'])) на if (isset($_POST['search']) or isset($_POST['num']))и добавил вот такую проверку $num = $_POST['num']; if(isset($num)){ $limirs = "{$num},2"; } else { $limirs = "2"; } $sql = "SELECT * FROM post WHERE " . implode(" AND ", $temp) . " LIMIT {$limirs}";, данные подгружает, но дублирует их после нажатия на кнопку Загрузить еще и почему-то сортирует уже не так, а как-то неправильно совсем...Подскажите пожалуйста, где рыть и как...Заранее спасибо! |
Сортировка запроса это ORDER BY field_name как минимум, а WHERE, это условия выборки. Надо чтобы клиент задавал сортировку (по каким полям и направление, а может и условия), значит эти параметры сортировки клиент и должен передавать серверу.
А что касаемо первого замечания, то оно касается безопасности - в вашем запросе дыра, которая позволяет манипулировать клиенту с вашей базой. |
Да, все верно, в запросе не сортировка, а условие выборки, и условие в запросе работает как нужно. У меня проблема в другом, у меня не получается адаптировать к моему модулю скрипт подгрузки следующих записей по клику на кнопку. То бишь в начале выводиться 5 новостей, а потом по клику на кнопку подгружается еще 5 по этом же условии выборки
|
Цитата:
Это не сортировка, это ограничение выборки - LIMIT. Так организовывается постраничная навигация, суть которой проста - получается общее количество записей в таблице, которое делится на определенное число записей на странице N, таким образом получая всего страниц. Далее серверу передается номер страницы number_page, которое умножается на число записей на странице и получаются параметры для LIMIT - N * number_page, N. То есть клиент должен иметь либо страничный навигатор, либо увеличивать/уменьшать число как параметр страницы, а сервер будет отдавать требуемое. |
Часовой пояс GMT +3, время: 13:32. |