Форум программистов, компьютерный форум, киберфорум
PHP
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 26.08.2013
Сообщений: 29

Проблемы с php таблицей сортировки

27.08.2013, 18:05. Показов 769. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Помогите пожалуйста решить мою проблему с сортировкой таблицы. У меня вот такая проблема: когда я сортирую по ценам, сортировка обращает внимание только на первую цифру.

Вот пример в картинках:


а вот mysql таблица:


Сам код:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<?php
$dblocation = "localhost";   // Имя сервера
$dbuser     = "Danil";        // Имя пользователя
$dbpswrd    = "1234561";            // Пароль
$dbname     = "catalog";    // Имя базы данных
 
DEFINE('ITEMS_PER_PAGE', 16);
 
// Соединение с сервером базы данных
$dblink = mysql_connect( $dblocation, $dbuser, $dbpswrd );
mysql_query( 'SET NAMES cp1251' );
mysql_query('SET NAMES utf8');
// Выбираем базу данных
mysql_select_db( $dbname, $dblink );
?>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Таблица</title>
</head>
 
<body>
<?php
 
// Выбираем из БД общее количество записей
$query = "SELECT COUNT(*) FROM catalog1 WHERE 1";
$res = mysql_query( $query );
$total = mysql_result( $res, 0, 0 );
    
// Проверяем передан ли номер текущей страницы (постраничная навигация)
if ( isset($_GET['page']) ) {
  $page = (int)$_GET['page'];
  if ( $page < 1 ) $page = 1;
} else {
  $page = 1;
}
 
$uri = $_SERVER['PHP_SELF'].'?';
if ( $_SERVER['QUERY_STRING'] != '' ) {
  foreach( $_GET as $key => $value ) {
    if ( $key != 'page' ) $uri = $uri.$key.'='.urlencode($value).'&';
  }  
}
// Сколько всего получится страниц
$cnt_pages = ceil( $total / ITEMS_PER_PAGE );
if ( $page > $cnt_pages ) $page = $cnt_pages;
// Начальная позиция
$start = ( $page - 1 ) * ITEMS_PER_PAGE;
 
// По умолчанию сортировка по наименованию, по возрастанию
$orderby = 'price';
$sort = 'ASC';
if ( isset( $_GET['orderby'] ) and isset( $_GET['sort'] ) ) {
  if ( in_array( $_GET['orderby'], array( 'code', 'title', 'price' ) ) ) $orderby = $_GET['orderby'];
  if ( in_array( $_GET['sort'], array( 'ASC', 'DESC' ) ) ) $sort = $_GET['sort'];
}
 
$query = 'SELECT code, title, description, price
          FROM catalog1
          ORDER BY '.$orderby.' '.$sort.'
          LIMIT '.$start.', '.ITEMS_PER_PAGE;
$res = mysql_query( $query );
 
echo '<h1>Каталог продукции</h1>'."\n";
// Выводим "шапку" таблицы
echo '<table border="1" cellpadding="4" cellspacing="0" style="border-collapse: collapse; empty-cells: show;">'."\n";
echo '<tr>';
if ( $sort == 'ASC' ) {
  $tmp = 'DESC';
  $image = 'down.gif';
} else {
  $tmp = 'ASC';
  $image = 'up.gif';
}
if ( $orderby == 'code' )
  echo '<th><a href="'.$_SERVER['PHP_SELF'].'?orderby=code&sort='.$tmp.'&page='.$page.'">Код</a>&nbsp;<img src="'.$image.'" alt="" /></th>';
else
  echo '<th><a href="'.$_SERVER['PHP_SELF'].'?orderby=code&sort=ASC&page='.$page.'">Код</a></th>';
if ( $orderby == 'title' )
  echo '<th><a href="'.$_SERVER['PHP_SELF'].'?orderby=title&sort='.$tmp.'&page='.$page.'">Наименование</a>&nbsp;<img src="'.$image.'" alt="" /></th>';
else
  echo '<th><a href="'.$_SERVER['PHP_SELF'].'?orderby=title&sort=ASC&page='.$page.'">Наименование</a></th>';
echo '<th>Описание</th>';
if ( $orderby == 'price' )
  echo '<th><a href="'.$_SERVER['PHP_SELF'].'?orderby=price&sort='.$tmp.'&page='.$page.'">Цена</a>&nbsp;<img src="'.$image.'" alt="" /></th>';
else
  echo '<th><a href="'.$_SERVER['PHP_SELF'].'?orderby=price&sort=ASC&page='.$page.'">Цена</a></th>';
echo '</tr>'."\n";
while( $prd = mysql_fetch_array($res) ) {
  echo '<tr>'; 
  echo '<td>'.$prd['code'].'</td>';
  echo '<td>'.$prd['title'].'</td>';
  echo '<td>'.$prd['description'].'</td>'; 
  echo '<td>'.$prd['price'].'</td>';    
  echo '</tr>'."\n";
}
echo '</table>'."\n";
 
// Строим постраничную навигацию
if ( $cnt_pages > 1 )
{
    echo '<div style="margin:1em 0">&nbsp;Страницы: ';
    // Проверяем нужна ли стрелка "В начало"
    if ( $page > 3 )
        $startpage = '<a href="'.$uri.'page=1"><<</a> ... ';
    else
        $startpage = '';
    // Проверяем нужна ли стрелка "В конец"
    if ( $page < ($cnt_pages - 2) )
        $endpage = ' ... <a href="'.$uri.'page='.$cnt_pages.'">>></a>';
    else
        $endpage = '';
 
    // Находим две ближайшие станицы с обоих краев, если они есть
    if ( $page - 2 > 0 )
        $page2left = ' <a href="'.$uri.'page='.($page - 2).'">'.($page - 2).'</a> | ';
    else
        $page2left = '';
    if ( $page - 1 > 0 )
        $page1left = ' <a href="'.$uri.'page='.($page - 1).'">'.($page - 1).'</a> | ';
    else
        $page1left = '';
    if ( $page + 2 <= $cnt_pages )
 
        $page2right = ' | <a href="'.$uri.'page='.($page + 2).'">'.($page + 2).'</a>';
    else
        $page2right = '';
    if ( $page + 1 <= $cnt_pages )
        $page1right = ' | <a href="'.$uri.'page='.($page + 1).'">'.($page + 1).'</a>';
    else
        $page1right = '';
 
    // Выводим меню
    echo $startpage.$page2left.$page1left.'<strong>'.$page.'</strong>'.$page1right.$page2right.$endpage."\n";
 
    echo '</div>'."\n";
}
?>
</body>
</html>
Весь код я взял уже готовый с другого сайта, но там как видно не стали помогать мне.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.08.2013, 18:05
Ответы с готовыми решениями:

Проблемы с php таблицей
Здравствуйте! Помогите пожалуйста решить мою проблему с php таблицей, сейчас вам всё объясню. Мне нужно сделать так чтобы таблица сама...

Проблемы с таблицей управления доступом
Здравствуйте! При добавлений пользователя в таблицу управления доступом не отображается адресная книга Domino (файл names.nsf сервера) ,...

Работа с таблицей. Текстовый файл. Проблемы с кириллицей
Доброго времени суток, форумчане! Имеется текстовый файл, в котором находится таблица. (телеметрия) Каждый столбец, это параметр, в...

7
 Аватар для crautcher
2450 / 2301 / 597
Регистрация: 27.05.2011
Сообщений: 7,845
28.08.2013, 13:47
Цена в базе у вас какой тип поля, нужно число, а у вас по видимому текст.
1
Заблокирован
28.08.2013, 20:15
Кстати, чтобы получить количество записей в таблице не обязательно их подсчитывать. Они уже подсчитаны и лежат тут

SQL
1
2
3
4
5
$q = 'SELECT 
        `table_rows` 
        FROM `information_schema`.`tables`
        WHERE `table_schema` = "' .  $db . '"' .
                AND `table_name` = "' . $tb . '";';
Если не знаете $db можно попробовать функцию database();

По теме добавить нечего. Переделайте текстовое поле в decimal, думаю (8,2) хватит.
1
0 / 0 / 0
Регистрация: 26.08.2013
Сообщений: 29
28.08.2013, 20:45  [ТС]
Цитата Сообщение от crautcher Посмотреть сообщение
Цена в базе у вас какой тип поля, нужно число, а у вас по видимому текст.

Я только недавно начал учиться программированием, и не могу до конца понять ваш текст.Допустим у меня в базе цена в поле изначально занесено VARCHAR, я правильно понял вас? или же нет?
0
Заблокирован
28.08.2013, 20:54
Тогда вы можете писать там 120 рублей 30 копеек. varchar же.

Иначе зачем текст?
1
0 / 0 / 0
Регистрация: 26.08.2013
Сообщений: 29
28.08.2013, 21:52  [ТС]
Цитата Сообщение от sqlnub Посмотреть сообщение
Тогда вы можете писать там 120 рублей 30 копеек. varchar же.

Иначе зачем текст?
Я попробовал как вы сказали, и почти что понял в чём суть... но не подскажите как сделать, чтобы только например нормально сортировалось по рублям без копеек? только одно целое число.
0
 Аватар для crautcher
2450 / 2301 / 597
Регистрация: 27.05.2011
Сообщений: 7,845
29.08.2013, 11:11
Цитата Сообщение от Kenpack Посмотреть сообщение
в поле изначально занесено VARCHAR
Ну а нужно числовой тип поля
0
0 / 0 / 0
Регистрация: 26.08.2013
Сообщений: 29
29.08.2013, 16:27  [ТС]
Всем спасибо за помощь, решил проблему.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.08.2013, 16:27
Помогаю со студенческими работами здесь

Сортировки. Проблемы с памятью
#include &lt;time.h&gt; #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;conio.h&gt; unsigned int count; struct stack {int left; ...

Проблемы с методом сортировки
Здравствуйте. Проблема с выводом. Само задание: &quot;Разработайте приложение Windows Form, наглядно демонстрирующее алгоритм сортировки...

Проблемы с отображением записей в таблице после сортировки
После добавления записи нужно, чтобы она заняла соответствующее место в таблице, согласно сортировке. При вызове метода AdoDC.Refresh...

Требуется создать php-скрипт, который создает страницу с таблицей возможных цветов HTML
Как это возможно осуществить простым способом?

Составить программу, в которой будет реализована работа с таблицей по варианту. Для работы пользователя с таблицей будет
Добрый день. Есть такое задание: Составить программу, в которой будет реализована работа с таблицей по варианту. Для работы пользователя...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru