Вот кусок кода. Когда скрипт работает при значении $_GET[region] == "all" $_GET[what] == "all" скрипт выполняет (так как это логично, но все же как сделать отличие между ними...) isset($_GET[region])==true isset($_GET[what])==true PHP: else if ($_GET[sort] == "go" && isset($_GET[region])==true && isset($_GET[what])==true) { $num_count = "SELECT * FROM $var_advert_db_ WHERE region='$_GET[region]' AND what='$_GET[what]' ORDER by 'datetime' DESC"; $qsql = "SELECT * FROM $var_advert_db_ WHERE region='$_GET[region]' AND what='$_GET[what]' ORDER by 'datetime' DESC limit $page,$msg_num"; } else if ($_GET[sort] == "go" && $_GET[region] == "all" && $_GET[what] == "all") { $num_count = "SELECT * from $var_advert_db_ ORDER by 'datetime' DESC"; $qsql = "SELECT * FROM $var_advert_db_ ORDER by 'datetime' DESC limit $page,$msg_num"; } :roll:
Да полно вариантов, первое условие вот так можно изменить, а второе оставить как есть. PHP: if ($_GET[sort] == 'go' && $_GET['region'] != 'all' && $_GET[what] != 'all') { } Так лучше не писать isset($_GET[what])==true Просто isset($_GET['what'])
дело в том что == ALL дает другой результат вот как раз весь код PHP: else if ($_GET[sort] == "go" && $_GET[region] == "all" && isset($_GET[what]) == true) { $num_count = "SELECT * FROM $var_advert_db_ WHERE what='$_GET[what]' ORDER by 'datetime' DESC"; $qsql = "SELECT * FROM $var_advert_db_ WHERE what='$_GET[what]' ORDER by 'datetime' DESC limit $page,$msg_num"; } else if ($_GET[sort] == "go" && isset($_GET[region])==true && $_GET[what] == "all") { $num_count = "SELECT * FROM $var_advert_db_ WHERE region='$_GET[region]' ORDER by 'datetime' DESC"; $qsql = "SELECT * FROM $var_advert_db_ WHERE region='$_GET[region]' ORDER by 'datetime' DESC limit $page,$msg_num"; } else if ($_GET[sort] == "go" && isset($_GET[region])==true && isset($_GET[what])==true) { $num_count = "SELECT * FROM $var_advert_db_ WHERE region='$_GET[region]' AND what='$_GET[what]' ORDER by 'datetime' DESC"; $qsql = "SELECT * FROM $var_advert_db_ WHERE region='$_GET[region]' AND what='$_GET[what]' ORDER by 'datetime' DESC limit $page,$msg_num"; } else if ($_GET[sort] == "go" && $_GET[region] == "all" && $_GET[what] == "all") { $num_count = "SELECT * from $var_advert_db_ ORDER by 'datetime' DESC"; $qsql = "SELECT * FROM $var_advert_db_ ORDER by 'datetime' DESC limit $page,$msg_num"; } надо чтобы один другому не мешал
PHP: <?php $conds = array(); $sort = isset($_GET['sort']) ? $_GET['sort'] : false; $region = isset($_GET['region']) ? mysql_escape_string($_GET['region']) : false; $what = isset($_GET['what']) ? mysql_escape_string($_GET['what']) : false; $num_count = "SELECT * from $var_advert_db_ "; $qsql = "SELECT * FROM $var_advert_db_ "; if ( $sort == 'go' ) { if ( $region && $region != 'all' ) $conds[] = '`region`="' . $region . '"'; if ( $what && $what != 'all' ) $conds[] = '`what`="' . $what . '"'; if ( sizeof($conds) > 0 ) { $condition = 'WHERE ' . implode(' AND ', $conds); $num_count .= $condition; $qsql .= $condition; } } $num_count .= ' ORDER by `datetime` DESC'; $qsql .= " ORDER by `datetime` DESC limit $page,$msg_num"; ?> оно?
вот еще я немогу разобраться куда нужно вставить это получается сортировка сообщений я хочу еще вставить главную сортировку сообещний по разделам $_GET[brd] т.е. сделав запрос ?brd=msg1 и выводились сообщения из этой категории + ко всему этому прибавить эту сортировку PHP: $conds = array(); $sort = isset($_POST['sort']) ? $_POST['sort'] : false; $region = isset($_POST['region']) ? mysql_escape_string($_POST['region']) : false; $what = isset($_POST['what']) ? mysql_escape_string($_POST['what']) : false; $num_count = "SELECT * from $var_advert_db_ "; $qsql = "SELECT * from $var_advert_db_ "; if ( $sort == 'go' ) { if ( $region && $region != 'all' ) $conds[] = '`region`="' . $region . '"'; if ( $what && $what != 'all' ) $conds[] = '`what`="' . $what . '"'; if ( sizeof($conds) > 0 ) { $condition = 'WHERE ' . implode(' AND ', $conds); $num_count .= $condition; $qsql .= $condition; } } $num_count .= " ORDER by `datetime` DESC"; $qsql .= " ORDER by `datetime` DESC limit $page,$msg_num"; т.е. запрос $_GET[brd] должен всегда присутствовать по умолчанию чтобы можно было сортировать сообщения по разделам, и в этом разделе уже сортировка по регионам,
к примеру у меня 10 сообщений в таблице есть 2 раздела РАЗДЕЛ1 РАЗДЕЛ2 РАЗДЕЛ1 = 4 сообщения РАЗДЕЛ2 = 6 сообщений значит $_GET[brd] = РАЗДЕЛ1 выводит 4 сообщения + ко всему чтобы работал скрипт сортировки который я выложил. т.е. объявления сортируются по разделу + ко всему еще и в этом разделе по региону и типу
если это, то PHP: $num_count .= " AND category=$brd ORDER by `datetime` DESC"; $qsql .= " AND category=$brd ORDER by `datetime` DESC limit $page,$msg_num"; $brd определить в начале скрипта, как $region, $what ... если это, то PHP: $num_count .= " ORDER BY category,datetime DESC"; $qsql .= " ORDER by category,datetime DESC limit $page,$msg_num";
в действительности скрипт выглядит так.. и я сделал как ты посоветовал но результат отрыцательный =( не работет говорит что запрос не принят PHP: $conds = array(); $sort = isset($_POST['sort']) ? $_POST['sort'] : false; $region = isset($_POST['region']) ? mysql_escape_string($_POST['region']) : false; $what = isset($_POST['what']) ? mysql_escape_string($_POST['what']) : false; //$board = isset($_GET['board']) ? mysql_escape_string($_GET['board']) : false; $num_count = "SELECT * from $var_advert_db_ "; $qsql = "SELECT * from $var_advert_db_ "; if ( $sort == 'go' ) { if ( $region && $region != 'all' ) $conds[] = '`region`="' . $region . '"'; if ( $what && $what != 'all' ) $conds[] = '`what`="' . $what . '"'; if ( sizeof($conds) > 0 ) { $condition = 'WHERE ' . implode(' AND ', $conds); $num_count .= $condition; $qsql .= $condition; } } $num_count .= " AND $_GET[board] ORDER by `datetime` DESC"; $qsql .= " AND $_GET[board] ORDER by `datetime` DESC limit $page,$msg_num";
Георгий Корнев В скрипте не контролирюется magic_quotes_gpc() что может послужить проблемой (хотя к топику это отношения не имеет)
ну ты написал PHP: $num_count .= " AND category=$brd ORDER by `datetime` DESC"; $qsql .= " AND category=$brd ORDER by `datetime` DESC limit $page,$msg_num"; а я так понимаю что category=$brd РАВНО board='$_GET[board]' в том примере я забыл дописать board= вот как у меня сейчас PHP: $num_count .= " AND board='$_GET[board]' ORDER by `datetime` DESC"; $qsql .= " AND board='$_GET[board]' ORDER by `datetime` DESC limit $page,$msg_num";
PHP: /* $conds = array(); $sort = isset($_POST['sort']) ? $_POST['sort'] : false; $region = isset($_POST['region']) ? mysql_escape_string($_POST['region']) : false; $what = isset($_POST['what']) ? mysql_escape_string($_POST['what']) : false; $num_count = "SELECT * from $var_advert_db_ "; $qsql = "SELECT * from $var_advert_db_ "; if ( $sort == 'go' ) { if ( $region && $region != 'all' ) $conds[] = '`region`="' . $region . '"'; if ( $what && $what != 'all' ) $conds[] = '`what`="' . $what . '"'; if ( sizeof($conds) > 0 ) { $condition = 'WHERE ' . implode(' AND ', $conds); $num_count .= $condition; $qsql .= $condition; } } $num_count .= " AND board='$_GET[board]' ORDER by `datetime` DESC"; $qsql .= " AND board='$_GET[board]' ORDER by `datetime` DESC limit $page,$msg_num"; */ //Так работает, но мне надо влепить в тот скрипт это $num_count = "SELECT * from $var_advert_db_ WHERE board='$_GET[board]' ORDER by `datetime` DESC"; $qsql = "SELECT * from $var_advert_db_ WHERE board='$_GET[board]' ORDER by `datetime` DESC limit $page,$msg_num ";
Код (Text): function addsl($res) { if (!get_magic_quotes_gpc()) $res = addslashes($res); return $res; } Так понятно?
Георгий Корнев, 1) PHP: $num_count .= " AND board='$board' ORDER by `datetime` DESC"; $qsql .= " AND board='$board' ORDER by `datetime` DESC limit $page,$msg_num"; 2) B начале, после присвоений $sort, $region и $what добавить PHP: $board = isset($_POST['board']) ? mysql_escape_string($_POST['board']) : false; 3) Учесть то, что сказали Vladson и Mete0 4) В конце скрипта добавить PHP: print $num_count.'<br>'.$qsql и показать сюда результат
я так самого начала делал вот что выдало Код (Text): SELECT * from adverts AND board='' ORDER by `datetime` DESC SELECT * from adverts AND board='' ORDER by `datetime` DESC limit 0,5 это из-за того что в этом скрипте нужно учитывать что REGION & WHAT это сортировка на странице. т.е. когда страница загружена пользователь для удобства отсортировывает себе страницу по региону и типу надо решить чтобы когда сортировки нету было как положенно SELECT * from adverts WHERE board='catalog1' ORDER by `datetime` DESC а когда сортируют соответственно типо SELECT * from adverts WHERE region='gorod' AND what='1' AND board='catalog1' ORDER by `datetime` DESC у меня сейчас вот так PHP: $conds = array(); $board = isset($_POST['board']) ? mysql_escape_string($_POST['board']) : false; $sort = isset($_POST['sort']) ? $_POST['sort'] : false; $region = isset($_POST['region']) ? mysql_escape_string($_POST['region']) : false; $what = isset($_POST['what']) ? mysql_escape_string($_POST['what']) : false; function addsl($res) { if (!get_magic_quotes_gpc()) $res = addslashes($res); return $res; } $num_count = "SELECT * from $var_advert_db_ "; $qsql = "SELECT * from $var_advert_db_ "; if ( $sort == 'go' ) { if ( $region && $region != 'all' ) $conds[] = '`region`="' . $region . '"'; if ( $what && $what != 'all' ) $conds[] = '`what`="' . $what . '"'; if ( sizeof($conds) > 0 ) { $condition = 'WHERE ' . implode(' AND ', $conds); $num_count .= $condition; $qsql .= $condition; } } $num_count .= " AND board='$board' ORDER by `datetime` DESC"; $qsql .= " AND board='$board' ORDER by `datetime` DESC limit $page,$msg_num"; print $num_count.'<br>'.$qsql
можно так PHP: function addsl($res) { if (!get_magic_quotes_gpc()) $res = addslashes($res); return $res; } $conds = array(); $board = isset($_POST['board']) ? addsl($_POST['board']) : false; $sort = isset($_POST['sort']) ? $_POST['sort'] : false; $region = isset($_POST['region']) ? addsl($_POST['region']) : false; $what = isset($_POST['what']) ? addsl($_POST['what']) : false; $num_count = "SELECT * from $var_advert_db_ "; $qsql = "SELECT * from $var_advert_db_ "; if ( $sort == 'go' ) { if ( $region && $region != 'all' ) $conds[] = '`region`="' . $region . '"'; if ( $what && $what != 'all' ) $conds[] = '`what`="' . $what . '"'; if ( sizeof($conds) > 0 ) { $condition = 'WHERE ' . implode(' AND ', $conds); $num_count .= $condition; $qsql .= $condition; } } $num_count .= " AND board='$board' ORDER by `datetime` DESC"; $qsql .= " AND board='$board' ORDER by `datetime` DESC limit $page,$msg_num"; print $num_count.'<br>'.$qsql
тю. не, ну что, _действительно_ не понятно что сделать надо? %-( PHP: <? function addsl($res) { if (!get_magic_quotes_gpc()) $res = addslashes($res); return $res; } $conds = array(); $board = isset($_POST['board']) ? addsl($_POST['board']) : false; $sort = isset($_POST['sort']) ? addsl($_POST['sort']) : false; $region = isset($_POST['region']) ? addsl($_POST['region']) : false; $what = isset($_POST['what']) ? addsl($_POST['what']) : false; $num_count = "SELECT * from $var_advert_db_ WHERE "; $qsql = "SELECT * from $var_advert_db_ WHERE "; if ( $sort == 'go' ) { if ( $region && $region != 'all' ) $conds[] = '`region`="' . $region . '"'; if ( $what && $what != 'all' ) $conds[] = '`what`="' . $what . '"'; if ( sizeof($conds) > 0 ) { $condition = implode(' AND ', $conds); $num_count .= $condition.' AND '; $qsql .= $condition.' AND '; } } $num_count .= " board='$board' ORDER by `datetime` DESC"; $qsql .= " board='$board' ORDER by `datetime` DESC limit $page,$msg_num"; print $num_count.'<br>'.$qsql ?> (поправьте меня кто-нть насчет addsl и mysql_escape_string)
Фиолетово. Но работать не будет В твоем варианте получится запрос SELECT * from $var_advert_db_ AND board='$board' ORDER by `datetime` DESC