Прошу помощи по связке 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, время: 12:46. |