За последние 24 часа нас посетили 57645 программистов и 1848 роботов. Сейчас ищут 889 программистов ...

Cортировки выведенных в таблице данных по возрастанию и убыванию

Тема в разделе "PHP для новичков", создана пользователем SaRoman96, 19 мар 2017.

  1. SaRoman96

    SaRoman96 Новичок

    С нами с:
    19 мар 2017
    Сообщения:
    5
    Симпатии:
    0
    Здравствуйте. У меня такая задача: "Добавьте возможность сортировки выведенных в таблице данных по возрастанию и убыванию (сортировку производить кликом по заголовку столбца)". Другие задачи я уже реализовал:
    1. Создать страницу с формой. Форма должна содержать текстовые поля (<input type="text">),переключатели (<input type="radio"), флажки (<input type="checkbox"), список (<select>...</select>),поле для загрузки файла (изображения)
    2. Создайте скрипт, обрабатывающий данные, посылаемые формой. Данные должны записываться в файл.
    3. Создайте скрипт, читающий загруженные данные из файла и выводящий их в окно браузера. Отобразить данные в виде таблицы. Загруженные файлы выводить в виде картинки.
    В итоге получилось вот это
    2017-03-19_124650.png
    Как сделать чтобы столбцы "Имя" и Фамилия имели значения Фамилия asc и desc В одной ссылке. То есть как в PhpMyAdmin тыкнул на заголовок столбца, он отсортировал по убыванию, тыкнул еще раз отсортировал по возрастанию.
    Код самого скрипта
    PHP:
    1. <?php
    2. setcookie(da,$_GET["field"],time()+5230);
    3. include("Sravnenie.php");
    4. if (sizeof ($_POST)>4){
    5.  
    6.    // Проверяем загружен ли файл
    7.     if(is_uploaded_file($_FILES["photo"]["tmp_name"]))
    8.     {
    9.      // Если файл загружен успешно, перемещаем его
    10.      // из временной директории в конечную
    11.         move_uploaded_file($_FILES["photo"]["tmp_name"], "uploads/".$_FILES["photo"]["name"]);
    12.     }
    13.     if (is_array($_POST));
    14.     foreach ($_POST as $key => $value) {
    15.         if ($key=='submit')
    16.             continue;
    17.         // echo "$value<br>";
    18.  
    19.         if (is_array($value)) {
    20.             foreach ($value as $value1) {
    21.             // echo "$value1<br>";
    22.                 $string.=$value1;
    23.                 $string.=' ';
    24.  
    25.             }
    26.  
    27.         }
    28.         else $string.=$value; $string.=',';
    29.     }
    30.  
    31.     $string.='\uploads\\'.$_FILES['photo']['name'];
    32.     file_put_contents('list.txt',$string."\r\n",FILE_APPEND);
    33. }
    34. // ==========ВЫвод=========================================
    35.     $mass=file('list.txt');  
    36.     foreach($mass as $key=>$str)
    37.     {
    38.         $mass1[]=explode(',',$str);
    39.    
    40.     }
    41.     echo '</a><a href="form.php?field=fam_down">Фамилия asc</a><br>';
    42.     echo '  <a href="form.php?field=fam_up">Фамилия уб</a><br>';
    43.     echo '<a href="form.php?field=name_down">Имя asc</a><br>';
    44.     echo '  <a href="form.php?field=name_up">Имя уб</a><br>';
    45. //============================================
    46.     if (isset ($_GET["field"]))
    47.     {
    48.         $field=$_GET["field"];
    49.         // echo $field;
    50.     }
    51.     else
    52.     {
    53.         $field=$_COOKIE["da"];
    54.     }
    55. //============================================                  
    56.     switch ($field):
    57.     case "fam_down":
    58.     usort($mass1, "fam_down");
    59.     break;      
    60.     case "fam_up":
    61.     usort($mass1, "fam_up");
    62.     break;      
    63.     case "name_down":
    64.     usort($mass1, "name_down");
    65.     break;      
    66.     case "name_up":
    67.     usort($mass1, "name_up");
    68.     break;
    69.     endswitch;
    70. //============================================
    71.     echo '<table border=1>';
    72.     echo '<tr>';
    73.     echo '<td>Фамилия  </td>';
    74.     echo '<td>Имя  </td>';
    75.     echo '<td>Пол  </td>';
    76.     echo '<td>Год</td>';
    77.     echo '<td>Профессия</td>';
    78.     echo '<td>Фото  </td>';
    79.     echo '</tr>';
    80. //============================================  
    81.     foreach($mass1 as $key=>$mass)
    82.     {
    83.         echo '<tr>';
    84.         foreach($mass as $k=>$X)
    85.         {
    86.             if ($X==''||$X=='Выберите Год'||trim($X)=="\uploads\\")
    87.                 echo '<td>Не указано</td>';
    88.             else
    89.             {
    90.                 echo '<td>';
    91.                 if ($k==5)
    92.                 {
    93.                    
    94.                     str_replace('lab4.ru\uploads\\','',$X);
    95.                     echo '<img src="'.$X.'" style="width:100">';
    96.                 }
    97.                 else
    98.                 {
    99.                     echo $X;
    100.                 }
    101.                 echo '</td>';
    102.             }
    103.         }
    104.         echo '</tr>';
    105.     }
    106.     echo '</table>';
    107. ?>
    Сравнение букв для сортировки
    PHP:
    1. <pre>
    2. <?php
    3. //=====
    4.     function fam_down($a,$b)
    5.         {
    6.             if($a[0]==$b[0])
    7.                 return 0;
    8.             return ($a[0]<$b[0])?-1:1;
    9.         }
    10. //=====  
    11.     function fam_up($a,$b)
    12.         {
    13.             if($a[0]==$b[0])
    14.                 return 0;
    15.             return ($a[0]<$b[0])?1:-1;
    16.         }
    17. //=====  
    18.     function name_down($a,$b)
    19.         {
    20.             if($a[1]==$b[1])
    21.                 return 0;
    22.             return ($a[1]<$b[1])?-1:1;
    23.         }
    24. //=====  
    25.     function name_up($a,$b)
    26.         {
    27.             if($a[1]==$b[1])
    28.                 return 0;
    29.             return ($a[1]<$b[1])?1:-1;
    30.         }
    31. //=====
    32. ?>
    33. </pre>
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Условным оператором
     
  3. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    Если я правильно понял задачу, можно при нажатии создавать переменную и устанавливать ей значение, например, "up" и "down" в зависимости от типа сортировки. А потом проверять, при клике, если up - делать down.
    --- Добавлено ---
    Можно при нажатии на заголовок таблицы отправлять POST запрос, а лучше GET, Чтоб сохранялся порядок сортировки (Созздавать ссылку на подобии "http://mySite.pzd?sort=name&tupe=up"), где sort - столбец, по которому сортируем, а type - порядок сортировки (По возрастанию, или убыванию).
     
  4. SaRoman96

    SaRoman96 Новичок

    С нами с:
    19 мар 2017
    Сообщения:
    5
    Симпатии:
    0
    Да, я думаю в этом направление, получается a href="http://mySite.pzd?sort=name&tupe=up">Фамилия /a, но если я нажму опять на неё, то тип сортировки не изменится. а Ссылка должна быть одна. Про бывал, чтобы по нажатию на ссылку скрипт складывал число, и от зависимости четное или нечетное менялся тип сортировки, но ничего не вышло
     
  5. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    Н так ты в зависимости от настоящей сортировки ссылку подставляй. Если сейчас up, то делай "http://mySite.pzd?sort=name&tupe=down" и наоборот.
     
    SaRoman96 нравится это.
  6. SaRoman96

    SaRoman96 Новичок

    С нами с:
    19 мар 2017
    Сообщения:
    5
    Симпатии:
    0
    Точно! Спасибо, все получилось