<MyRusakov.ru />

Создание крупного проекта на Java с нуля

Создание крупного проекта на Java с нуля

Данный курс научит Вас создавать крупные проекты на Java грамотно и быстро. В курсе Вы увидите создание большой и сложной программы на Java абсолютно с нуля.

В начале курса у нас будет только идея, а в конце готовый продукт, который можно использовать в практических целях.

В рамках упражнений курса Вы параллельно со мной будете создавать свою большую программу на Java, что даст Вам необходимую практику, после которой для Вас уже не будет разницы, какого размера создавать программы.

Подробнее
Подписка

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Каким движком Вы предпочитаете пользоваться?

Форум сайта MyRusakov.ru

Пагинация и фильтр поиска
13.12.2014 15:20:42 Пагинация и фильтр поиска Сообщение #1
artyomweb

artyomweb

Освоившийся

Освоившийся

Дата регистрации:
23.09.2014 22:48:11

Сообщений: 26

<?php
$onpage = 15; // записей на страницу
$page = page(); // определяем страницу
[code][/code]
Профиль Ответить
13.12.2014 15:21:57 Пагинация и фильтр поиска Сообщение #2
artyomweb

artyomweb

Освоившийся

Освоившийся

Дата регистрации:
23.09.2014 22:48:11

Сообщений: 26

<?php
$onpage = 15; // записей на страницу
$page = page(); // определяем страницу
Профиль Ответить
13.12.2014 15:25:02 Пагинация и фильтр поиска Сообщение #3
artyomweb

artyomweb

Освоившийся

Освоившийся

Дата регистрации:
23.09.2014 22:48:11

Сообщений: 26

<?php
$onpage = 15; // записей на страницу
$page = page(); // определяем страницу
function page()
{
    if(empty($_GET["page"])){
        $page = 1;
    }
 else {
if(!is_numeric($_GET["page"])) die("Неправильный формат номера страницы!";
        $page = $_GET["page"];
    }
 return $page;
}
function navigation($onpage, $page, $where, $log)
{
        $return = null;
  $count = mysql_query("SELECT COUNT(*) FROM $where" or die(mysql_error());
        $count = mysql_fetch_array($count);
        $count = $count[0];
        $pages = ceil($count/$onpage);
       
  if ($_GET["price_start"]){$start = "`price` >= '".htmlspecialchars($_GET["price_start"])."'";}
        if ($_GET["price_end"]){$end = "`price` >= '".htmlspecialchars($_GET["price_end"])."'";}
        if ($start) $log = "AND ".$start;
     if ($end) $log = "AND ".$end;
     if ($start && $end) $log ="WHERE ".$start." AND ".$end;
  
  if ($_GET['price_start']){
  $count = mysql_query("SELECT COUNT(*) FROM $where $log" or die(mysql_error());
  $count = mysql_fetch_array($count);
        $count = $count[0];
        $pages = ceil($count/$onpage);
        }
  
  if ($_GET['price_end']){
     $count = mysql_query("SELECT COUNT(*) FROM $where $log" or die(mysql_error());
  $count = mysql_fetch_array($count);
        $count = $count[0];
        $pages = ceil($count/$onpage);
  }
  
  $con="&price_start=".$_GET['price_start']."&price_end=".$_GET['price_end']."";//Тут я много на мудрил но работает)))
  $getr=(($_GET['price_start'])||($_GET['price_end']));
  if ($page > 1) $pervpage = '<a href=?page=1>Первая</a>|<a href=?page='.($page - 1).'>Предыдущая</a>|';
  if (($page > 1)&&$getr) $pervpage = '<a href=?page=1'.$con.'>Первая</a>|<a href=?page='.($page - 1).$con.'>Предыдущая</a>|';
  
  if (($page != $onpage)&&($page < $pages)) $nextpage = '|<a href=?page='.($page + 1).'>Следующая</a>|<a href=?page='.floor($pages).'>Последняя</a>';
  if (($page != $onpage)&&($page < $pages)&&$getr) $nextpage = '|<a href=?page='.($page + 1).$con.'>Следующая</a>|<a href=?page='.floor($pages).$con.'>Последняя</a>';
  
  if($page - 5 > 0) $page5left = '<a href=?page='.($page - 5).'>'.($page - 5).'</a>|';
  if(($page - 5 > 0)&&$getr) $page5left = '<a href=?page='.($page - 5).$con.'>'.($page - 5).'</a>|'; if($page - 4 > 0) $page4left = '<a href=?page='.($page - 4).'>'.($page - 4).'</a>|';
  if(($page - 4 > 0)&&$getr) $page4left = '<a href=?page='.($page - 4).$con.'>'.($page - 4).'</a>|'; if($page - 3 > 0) $page3left = '<a href=?page='.($page - 3).'>'.($page - 3).'</a>|';
  if(($page - 3 > 0)&&$getr) $page3left = '<a href=?page='.($page - 3).$con.'>'.($page - 3).'</a>|'; if($page - 2 > 0) $page2left = '<a href=?page='.($page - 2).'>'.($page - 2).'</a>|';
  if(($page - 2 > 0)&&$getr) $page2left = '<a href=?page='.($page - 2).$con.'>'.($page - 2).'</a>|'; if($page - 1 > 1) $page1left = '<a href=?page='.($page - 1).'>'.($page - 1).'</a>|';
  if(($page - 1 > 1)&&$getr) $page1left = '<a href=?page='.($page - 1).$con.'>'.($page - 1).'</a>|';if($page + 5 <= $pages) $page5right = '|<a href=?page='.($page + 5).'>'.($page + 5).'</a>';
if(($page + 5 <= $pages)&&$getr) $page5right = '|<a href=?page='.($page + 5).$con.'>'.($page + 5).'</a>';if($page + 4 <= $pages) $page4right = '|<a href=?page='.($page + 4).'>'.($page + 4).'</a>';
if(($page + 4 <= $pages)&&$getr) $page4right = '|<a href=?page='.($page + 4).$con.'>'.($page + 4).'</a>';if($page + 3 <= $pages) $page3right = '|<a href=?page='.($page + 3).'>'.($page + 3).'</a>';
if(($page + 3 <= $pages)&&$getr) $page3right = '|<a href=?page='.($page + 3).$con.'>'.($page + 3).'</a>';if($page + 2 <= $pages) $page2right = '|<a href=?page='.($page + 2).'>'.($page + 2).'</a>';
if(($page + 2 <= $pages)&&$getr) $page2right = '|<a href=?page='.($page + 2).$con.'>'.($page + 2).'</a>';if($page + 1 <= $pages) $page1right = '|<a href=?page='.($page + 1).'>'.($page + 1).'</a>';
if(($page + 1 <= $pages)&&$getr) $page1right = '|<a href=?page='.($page + 1).$con.'>'.($page + 1).'</a>';if ($page > 1)
{
Error_Reporting(E_ALL & ~E_NOTICE);
echo "<div class=\"pagin_1\">";
echo '<i>Найдено <b>'.$count.'</b> тов. </i>'.$pervpage.$page5left.$page4left.$page3left.$page2left.$page1left.'<span>'.$page.'</span>'.$page1right.$page2right.$page3right.$page4right.$page5right.$nextpage."<i> Всего <b>".$pages."</b> стр.</i>";
echo "</div>";
}
elseif ($page = 1)
{
Error_Reporting(E_ALL & ~E_NOTICE);
echo "<div class=\"pagin\">";
echo '<i>Найдено <b>'.$count.'</b> тов. </i><span>'.$page.'</span>'.$page1right.$page2right.$page3right.$page4right.$page5right.$nextpage."<i> Всего <b>".$pages."</b> стр.</i>";
echo "</div>";
}
}
function sql_query($onpage, $page, $where, $log)
{
    if ($_GET["price_start"]){$start = "`price` >= '".htmlspecialchars($_GET["price_start"])."'";}
    if ($_GET["price_end"]){$end = "`price` <= '".htmlspecialchars($_GET["price_end"])."'";}
    if ($start) $log = "AND ".$start;
 if ($end) $log = "AND ".$end;
 if ($start && $end) $log ="AND ".$start." AND ".$end;
 
$begin = $page*$onpage+1-$onpage; // откуда начинать
 $sql = "SELECT * FROM $where $log LIMIT ".$begin.", ".$onpage;
        $result = mysql_query($sql) or die(mysql_error());
        return $result;
}
include "sql_connect.php";
 $result = sql_query($onpage, $page, $where, $log);
    $row = mysql_fetch_array ($result);
if ($row['currencyId']='RUR'$money='руб.';
$i=0;
$w=3;
$navigation = navigation($onpage, $page, $where, $log); // определим навигацию
echo $navigation;echo "<div id=\"conttov\"><table id=\"table_tovars\">";
do{
if(($i==0)||!($i%$w))echo"<tr>";
$i++;
printf ("
<td align=\"center\">
<h4>%s</h4>
<h5>%s</h5>
<img src=\"%s\"/>
<h3>Цена: <span>%s</span> $money</h3>
<a target=\"_blank\" href=\"%s\">Купить</a>
</td>
",$row['vendor'],$row['model'],$row['picture'],$row['price'],$row['url']);
if(!($i%$w)||(mysql_num_rows($result)==$i))echo"</tr>";
}while ($row = mysql_fetch_array ($result));
echo "</table></div>";
$navigation = navigation($onpage, $page, $where, $log); // определим навигацию
echo $navigation;
mysql_close(); // отключение от БД
?>
Профиль Ответить
13.12.2014 21:04:57 Пагинация и фильтр поиска Сообщение #4
Jey-Val-Star

Jey-Val-Star

Освоившийся

Освоившийся

Дата регистрации:
30.11.2014 21:33:11

Сообщений: 27

А что у тебя происходит если фильтры не используются?

Сделай так, переменную $log определи до всех функций, причем задай ей сначала пустое значение, а при выполнении условий - значение с where
$log = '';
if (($_GET["price_start"]) && ($_GET["price_end"])) 
    $log = "WHERE `price` >= " . (int)$_GET["price_start"] . "AND `price` <= " .  (int)$_GET["price_end"];

elseif ($_GET["price_start"])
    $log = "WHERE `price` >= " . (int)$_GET["price_start"];

elseif ($_GET["price_end"])
    $log = "WHERE `price` <= " . (int)$_GET["price_end"];
И все, больше проверок на фильтр не нужно. Если нет фильтров то лог будет пустой, иначе с  параметром.
А то неразбериха получается вот здесь
    $count = mysql_query("SELECT COUNT(*) FROM $where" or die(mysql_error()); 
    $count = mysql_fetch_array($count); 
    $count = $count[0]; 
    $pages = ceil($count/$onpage); 
             
    if ($_GET["price_start"]){$start = "`price` >= '".htmlspecialchars($_GET["price_start"])."'";} 
    if ($_GET["price_end"]){$end = "`price` >= '".htmlspecialchars($_GET["price_end"])."'";} 
    if ($start) $log = "AND ".$start; 
    if ($end) $log = "AND ".$end; 
    if ($start && $end) $log ="WHERE ".$start." AND ".$end; 
       
    if ($_GET['price_start'])
    { 
        $count = mysql_query("SELECT COUNT(*) FROM $where $log" or die(mysql_error()); 
        $count = mysql_fetch_array($count); 
        $count = $count[0]; 
        $pages = ceil($count/$onpage); 
    } 
       
    if ($_GET['price_end'])
    { 
        $count = mysql_query("SELECT COUNT(*) FROM $where $log" or die(mysql_error()); 
        $count = mysql_fetch_array($count); 
        $count = $count[0]; 
        $pages = ceil($count/$onpage); 
    } 

Далее перед выводом вот этого
$con="&price_start=".$_GET['price_start']."&price_end=".$_GET['price_end']."";Проверь значения GET.
(можно засунуть в проверку на $log, тем самым уменьшить код и избежать повторений).
$log = '';
$con = '';
if (($_GET["price_start"]) && ($_GET["price_end"])) {
    $log = "WHERE `price` >= " . (int)$_GET["price_start"] . "AND `price` <= " .  (int)$_GET["price_end"];
    $con="&price_start=".(int)$_GET['price_start']."&price_end=".(int)$_GET['price_end']."";
}

elseif ($_GET["price_start"]){
    $log = "WHERE `price` >= " . (int)$_GET["price_start"];
    $con="&price_start=".(int)$_GET['price_start'];
}

elseif ($_GET["price_end"]){
    $log = "WHERE `price` <= " . (int)$_GET["price_end"];
    $con="&price_end=".(int)$_GET['price_end']."";
}
Такую строку можно не использовать
if(!is_numeric($_GET["page"])) die("Неправильный формат номера страницы!"ИзображениеПросто привести к integer и все, или $page = 1;

Такие проверки даром не нужны если определишь заранее $con
if (($page > 1)&&$getr)...
Как-то так...)
Профиль Ответить
14.12.2014 05:41:32 Пагинация и фильтр поиска Сообщение #5
artyomweb

artyomweb

Освоившийся

Освоившийся

Дата регистрации:
23.09.2014 22:48:11

Сообщений: 26

      Jey-Val-Star, спасибо за то что помог разобраться с этим безумным
кодом))) и со всякими мелкими недостатками!!! Сейчас всё работает.
 Я твой должник)))
Профиль Ответить
15.12.2014 13:02:29 Пагинация и фильтр поиска Сообщение #6
artyomweb

artyomweb

Освоившийся

Освоившийся

Дата регистрации:
23.09.2014 22:48:11

Сообщений: 26

        А как писать ссылки в пагинации для переменных из формы
с checkbox(ом),  в которой можно выбирать сразу несколько флажков.
Вот такого типа:
<input type="checkbox" name="manufacturers[]" value="Hammer" />
<input type="checkbox" name="manufacturers[]" value="Makita" />
<input type="checkbox" name="manufacturers[]" value="Hitachi" />
Как прописывать здесь ссылки:
if ($_GET['manufacturers']){
    $con = '&manufacturers='.........?//Тут я не знаю что писать в ссылке для страниц
}
Профиль Ответить
15.12.2014 20:03:45 Пагинация и фильтр поиска Сообщение #7
Jey-Val-Star

Jey-Val-Star

Освоившийся

Освоившийся

Дата регистрации:
30.11.2014 21:33:11

Сообщений: 27

А ты залай фильтр с этими параметрами и смотри на юрл браузера
Но дело в том что manufactured у тебя будет в виде массива 
поэтому просто GET['manufactured'] не пойдет
нужно будет масситв на элементы разбивать
GET['manufactured'] [0], GET['manufactured'] [1], GET['manufactured'] [3]
(Вроде так)
Но лучше использовать цикл foreach, для динамичности (а вдруг у тебя не 3 а больше производителей будет)
Профиль Ответить
15.12.2014 21:24:35 Пагинация и фильтр поиска Сообщение #8
artyomweb

artyomweb

Освоившийся

Освоившийся

Дата регистрации:
23.09.2014 22:48:11

Сообщений: 26

         Jey-Val-Star, вот сделал так:
if ($_GET['manufacturers']){
    $manuf=array($_GET['manufacturers']);
    foreach ($manuf as $k => $v); 
    $log = "AND vendor = '"......'";//Как дальше заполнять запрос $log не понимаю??
}
          А потом ещё и в ссылку для пагинаций??
    $con = '&manufacturers='.$manuf;//Сам понимаю что-то не то... ???
Профиль Ответить
15.12.2014 22:08:02 Пагинация и фильтр поиска Сообщение #9
Jey-Val-Star

Jey-Val-Star

Освоившийся

Освоившийся

Дата регистрации:
30.11.2014 21:33:11

Сообщений: 27

Ну, тогда смотри
$manuf=array($_GET['manufacturers']);это неверно в корне, у тебя уже есть массив
$_GET['manufacturers']он не ассоциативный, просто по индексу (0,1,2)
вот его и нужно прогнать через foreach
foreach ($_GET['manufacturers'] as $value)

    /*код в теле цикла*/
Далее, для запроса в бд просто перечисление WHERE через AND не пойдет
SELECT * FROM table WHERE manuf = manuf1 AND manuf = manuf2...Для таких вещей существует классная штука как "Выбрать записи по таким значениям" (это мой дословный перевод)))
В SQL выгладит она как IN
SELECT * FROM table WHERE manuf IN (manuf1, manuf2,...)Но выполнять ее надо перед твоими AND (я имею в виду фильтр по ценам)

Общий вид примерно такой
$log = '';
foreach ($_GET['manufacturers'] as $value)

    if($log != '' $log .= ',';
    $log .= $value;

// и на выходе получим $log = manuf1,manuf2,manuf3
$log = 'manuf IN (' . $log .'
(Я думаю понятно что manuf1,manuf2,manuf3 и manuf IN - это для примера)
После этого функция проверки и добавление в условие WHERE фильтра цен (от до)
В общем при включенных фильтрах производитель и цены (от до) $log у тебя должен получиться таким
WHERE manuf IN(manuf1,manuf2, manuf3) AND price >= 1 AND price <= 10

Кстати совсем забыл
В цикл foreach параллельно добавь  $con
$con = '';
foreach ($_GET['manufacturers'] as $value)

    if($log != '' $log .= ',';
    $log .= $value;
    if($con != '' $con .= '&';
    $con = 'manuf[]=' . $value;
Вроде так
Профиль Ответить
15.12.2014 22:13:00 Пагинация и фильтр поиска Сообщение #10
Jey-Val-Star

Jey-Val-Star

Освоившийся

Освоившийся

Дата регистрации:
30.11.2014 21:33:11

Сообщений: 27

Ах да, самое главное -
Включай в тело программы вывод некоторых переменных, чтобы понимать что с ними происходит
echo $log;
exit(); // это для остановки программы (тебе ведь только результат нужно увидеть)
Посмотрел понял ошибку, увидел что значение переменной должно быть другим, подправил и закоментировал
//echo $log;
//exit(); // это для остановки программы (тебе ведь только результат нужно увидеть)
Или удалил)))
Профиль Ответить