Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Сортировка одним кликом
Форумы портала PHP.SU » » Вопросы новичков » Сортировка одним кликом

Страниц (1): [1]
 

1. leshiy - 30 Ноября, 2017 - 12:58:34 - перейти к сообщению
Есть код который сортирует данные из бд по имени: от А до Я и в обратном порядке: от Я до А.А как бы сделать вместо двух этих кнопок одну и что бы при кликах по ней происходила бы сортировка и по убыванию и по возрастанию и еще бы название этой кнопки менялось бы: Имя по убыванию, Имя по возрастанию.
index.php
CODE (html):
скопировать код в буфер обмена
  1.  
  2. <?php
  3. include("functions.php");
  4. $db = connect_db();
  5. if($_GET['sort_id']){
  6.    $id = strip_tags($_GET['sort_id']);
  7.    $goods = get_goods($db,$id);
  8.        foreach($goods as $item){
  9. echo '<li>
  10.     <p id="title">'.$item['name'].'</p>
  11.     <p id="price">'.$item['age'].'</p>
  12.     </li>'.$ppp;
  13.      }exit();
  14. }else{$goods = get_goods($db);}
  15. $goods = get_goods($db);
  16. ?>
  17. <!DOCTYPE html>
  18. <html lang="ru-RU">
  19. <head>
  20. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  21. <title></title>
  22. <script type="text/javascript" src="js/jquery.js"></script>
  23. <script type="text/javascript" src="js/script.js"></script>
  24. <style>
  25. .sort span{color: blue;text-decoration: underline; cursor: pointer;}
  26. #fon{display: none; opacity: 0.8; position: absolute; width: 700px;height: 100%; z-index: 100; background-color: white;}
  27. #load{position: fixed; left:40%; top: 50%; width: 65px; height: 65px;z-index: 150; display: none;}
  28.     </style>
  29. </head>
  30. <body>
  31. <div id="content">
  32. <div id="main">
  33.     <div id="fon"></div>
  34.     <div id="load"></div>
  35. <div class="sort">
  36.     Сортировать по: <strong>Имени</strong><span id="name">А-Я</span> | <span id="name1">Я-A</span>
  37.     <ul id="tovar">
  38. <?php
  39.    foreach($goods as $item){
  40. echo '<li>
  41.     <p id="title">'.$item['name'].'</p>
  42.     <p id="price">'.$item['age'].'</p>
  43.     </li>';
  44.      }?>
  45.     </ul>
  46.     </div>
  47.     </div>
  48.     </div>
  49. </body>
  50. </html>
  51.  

functions.php
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. function connect_db(){
  4.     $db = mysqli_connect('localhost','root','','bbb');
  5.     if(!$db){
  6.         exit('error'.mysqli_error());
  7.     }
  8.     mysqli_query($db,"SET NAMES utf8");
  9.     return $db;
  10. }
  11. function get_goods($db,$id = FALSE){
  12.     $sql = "SELECT * FROM table01";
  13.         if($id){if($id == 'name1'){
  14.         $sql .= ' ORDER BY name DESC';
  15.         }elseif($id == 'name'){
  16.         $sql .= ' ORDER BY name ASC';
  17.         }}
  18.     $result = mysqli_query($db,$sql);
  19.     for($i = 0;$i < mysqli_num_rows($result); $i++){
  20.         $goods[] = mysqli_fetch_array($result);
  21.     }
  22.     return $goods;
  23. }
  24. ?>

script.js
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. $(document).ready(function () {
  3.     $(".sort span").click(function ()
  4.                          {
  5.         var id = $(this).attr('id');
  6.         $.ajax({
  7.             data:'sort_id='+id,
  8.             success:function (html){
  9. $("#tovar").html(html).hide().fadeIn(2000);
  10.             }
  11.         });
  12.     });
  13. });
2. Vladimir Kheifets - 30 Ноября, 2017 - 20:29:15 - перейти к сообщению
Добрый вечер!
Попробуйте добавть после стр.15
PHP:
скопировать код в буфер обмена
  1. //В начале  сортировка А-Я перключатель показывает Я-A
  2. $sort_id=($_GET["sort_id"])?$_GET["sort_id"]:"name";
  3. $sort_span=($sort_id=="name")?'<span id="name1">А-Я</span>':'<span id="name">Я-A</span>'

Строку 36 заменить на:
PHP:
скопировать код в буфер обмена
  1. Сортировать по: <strong>Имени</strong><?=$sort_span;?>

Удачи!
3. leshiy - 30 Ноября, 2017 - 20:44:35 - перейти к сообщению
Сортирует только по убыванию один раз и все и кнопка не меняется.
4. Vladimir Kheifets - 01 Декабря, 2017 - 09:53:48 - перейти к сообщению
leshiy пишет:
Сортирует только по убыванию один раз и все и кнопка не меняется.
Доброе утро! Значит не изменяется $_GET["sort_id"]. Попробуйте убрать JS и вставить
PHP:
скопировать код в буфер обмена
  1. $sort_span=($sort_id=="name")?'<a href="?sort_id=name1">А-Я</a>':'<a href="?sort_id=name" >Я-A</a>'

Удачи!
5. leshiy - 01 Декабря, 2017 - 10:06:26 - перейти к сообщению
А без js вообще не работает.Ведь index.php не перегружается.
6. teleoperator27 - 01 Декабря, 2017 - 11:08:07 - перейти к сообщению
CODE (html):
скопировать код в буфер обмена
  1.   <span id="sort" data-sort="asc">А-Я</span>    




CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. $(document).ready(function () {
  3.                 $('#sort').on('click', function(){
  4.                                 var sort = $(this).attr('data-sort');
  5.                                 sort == 'asc' ? $(this).attr('data-sort', 'desc').text('Я-А') : $(this).attr('data-sort', 'asc').text('А-Я') ;
  6.                                 value = $(this).attr('data-sort');
  7.                                 console.log(value); //проверим в консоли
  8.                                 $.ajax({
  9.                                                 data:value,
  10.                                                 success:function (html){
  11.                                                         $("#tovar").html(html).hide().fadeIn(2000);
  12.                                                 }
  13.                                         });
  14.                         });
  15.         });
  16.  

Дальше на сервере принимаешь в data значение asc или desc на и дальше на пыхе как обычно, делаешь запрос
7. Vladimir Kheifets - 01 Декабря, 2017 - 12:50:56 - перейти к сообщению
leshiy пишет:
А без js вообще не работает.Ведь index.php не перегружается.

А Вы пробовали? Вы действительно думаете, что всё работает только у клиента в браузере?
PHP-скрипт обрабатывает $_GET параметры, переданные клиентом через URL.
за деревьями леса не видно...
8. leshiy - 01 Декабря, 2017 - 16:57:30 - перейти к сообщению
Спасибо teleoperator27!Все работает!
Только чуток подправил.
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. $.ajax({
  3. data:'sort_id='+value,
  4.  
9. teleoperator27 - 01 Декабря, 2017 - 19:54:28 - перейти к сообщению
leshiy пишет:
Спасибо teleoperator27!Все работает!
Только чуток подправил.
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. $.ajax({
  3. data:'sort_id='+value,
  4.  
Ну я там особо в детали не стал заморочиваться, ответил на вопрос по кнопке. ) А уж данные аяксом передать проблем не должно быть)
10. Строитель - 01 Декабря, 2017 - 20:14:59 - перейти к сообщению
leshiy, спасибо можно выразить кликом на Спасибо - уровень вашей репутации это позволяет.

 

Powered by ExBB FM 1.0 RC1