Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Проблеммы с сортировкой при нажатии кнопки
 
 автор: kronck   (29.09.2010 в 15:29)   письмо автору
 
 

Задача - при нажатии кнопки данные в базе сортировались по дате в базе данных

Вот сама табличка

CREATE TABLE IF NOT EXISTS `up` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(255) NOT NULL,
  `lastname` varchar(255) NOT NULL,
  `date` datetime NOT NULL,
  `lastdate` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=4 ; 


Индексный файл с инпутами
<?php 
$db 
mysql_connect ("localhost","root","");
mysql_select_db ("up",$db);
if (isset(
$_POST['id']))   {$id $_POST['id']; if ($id == '') {unset($id);}}
if (isset(
$_POST['title']))   {$title $_POST['title']; if ($title == '') {unset($title);}}
?>

<body>

<form action="update.php" method="post">

<?php 
$result 
mysql_query("SELECT * FROM up",$db);
if (!
$result) { 
echo 
"<p>Запрос не прошел. Напишите об этом администратору. Код ошибки:</p>";
exit (
mysql_error());
}
if (
mysql_num_rows($result) > 0)
{
$myrow mysql_fetch_array($result);
do
{
printf ("<p><input name='id' type='radio' value='%s'><label> %s </label></p>",$myrow["id"],$myrow["title"]);
}
while (
$myrow mysql_fetch_array($result));
}
else 
{
echo 
"<p>Информация по запросу не может быть извлечена. В таблице нет записей.</p>";
exit ();
}
?>
<input name="submit" type="button" value="поднять данные" />
</form>
</body>
</html>


Код обработчика

<?php 
$db 
mysql_connect ("localhost","root","");
mysql_select_db ("up",$db);
if (isset(
$_POST['id']))   {$id $_POST['id']; if ($id == '') {unset($id);}}
if (isset(
$_POST['title']))   {$title $_POST['title']; if ($title == '') {unset($title);}}
?>
<html>
бла бла бла

<?php 

if (isset($id))  
{

$result mysql_query ("SELECT * FROM up ORDER BY lastdate,id  DESC");

if (
$result == 'true') {echo "<p>Ваш урок обновлен</p>";}
else {echo 
"<p>Ваш урок НЕ ПОДНЯТ</p>";}

}
else 
{
echo 
"<p>Вы не выбрали кнопку, не обновленно</p>";
}
?>
</html>


Сортирую данные по ORDER BY lastdate DESC, вроде запрос правильный на сортировки не происходит! как исправить?

  Ответить  
 
 автор: Slo_Nik   (29.09.2010 в 16:58)   письмо автору
 
   для: kronck   (29.09.2010 в 15:29)
 

>вроде запрос правильный на сортировки не происходит! как исправить?

Так "правильный" или "вроде"? Вы определитесь.
Во-первых:
Где у Вас выставлен уровень ошибок через error_reporting() ?
Во-вторых:
Где Вы выполняете запрос на обновление записи? Что-то я его не нашёл.
В-третьих:
Откажитесь от использования do{} while(), используйте просто while()

  Ответить  
 
 автор: sim5   (29.09.2010 в 17:10)   письмо автору
 
   для: Slo_Nik   (29.09.2010 в 16:58)
 

Уровни ошибок на локалном сервере надо определить раз и навсегда в php.ini, а в коде самом это ни к чему, не стоит на сервере ошибки светить )

  Ответить  
 
 автор: Slo_Nik   (29.09.2010 в 17:15)   письмо автору
 
   для: sim5   (29.09.2010 в 17:10)
 

А разве тяжело потом будет удалить одну строку?

По поводу php.ini я с Вами не согласен, надо не лениться писать error_reporting(), хуже от этого не будет, особенно для совсем новичков.

  Ответить  
 
 автор: sim5   (29.09.2010 в 17:22)   письмо автору
 
   для: Slo_Nik   (29.09.2010 в 17:15)
 

Ну да, если писать за год одну станицу кода, и ваш сайт, это одна страница, тогда да, можно и убрать строчку.
Не соглашайтесь, это ваше право.

  Ответить  
 
 автор: Slo_Nik   (29.09.2010 в 17:56)   письмо автору
 
   для: sim5   (29.09.2010 в 17:22)
 

Конечно же моё.
А была бы эта строка в коде, может у человека не возникли вопросы, почему не работает....

И не обязательно вписывать error_reporting в каждый скрипт, и Вы это прекрасно понимаете.

  Ответить  
 
 автор: sim5   (29.09.2010 в 18:04)   письмо автору
 
   для: Slo_Nik   (29.09.2010 в 17:56)
 

Если у человека локальный сервер изначально будет настроен на обязательный вывод любых предупреждений и ошибок, то уж точно он будет в любом случае видеть причину (если конечно понимает). Например, у меня именно так и настроен он - я не хочу задумываться о добавлении этого в скрипты, и помнить, что это еще надо выбросить перед отправкой на сервер.
Вот если вы утром встаете и кодите целый день не выключая свой сервер, и других забот у вас нет, тогда я с вами согласен, иначе... ;-)

  Ответить  
 
 автор: kronck   (30.09.2010 в 04:45)   письмо автору
 
   для: Slo_Nik   (29.09.2010 в 16:58)
 

Извеняюсь, я так и не понял как вы представляетете обновление записи, т.к. там всего 3 записи в базе , и происходит выбор через чекбоксы, формочки для изменения текста нет, я не понимаю как через чекбоксы можно обновить данные :/
да мы можем написать update up set и указать необходимые поля, но мы и изменим сами данные, а задача состоит в том , что бы существующие данные просто поднять (сортировать по дате) .
Сейчас из базы просто выводится следующее: данные 1, данные 2, данные 3 при выборе одного из чекбоксов и нажатии на кнопку поднять, данные должны сортироваться по последней дате, (при чем данные под номер 3, записаны самые свежие по сравнению с другими данные, т.е. мне надо поднять данные N 1 (самые старые данные)). Это просто тестовый пример, для моего понимания.
Желею, что начал изучать этот язык от великого "гуру" попова.
Не понимаю, зачем еще нужен один обработчик? разве моего написанного не достаточно?
Вы меня запутали.. :)

  Ответить  
 
 автор: Лена   (30.09.2010 в 10:57)   письмо автору
 
   для: kronck   (30.09.2010 в 04:45)
 

Пока что ничего не понятно.

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

Допустим, у меня на странице 3 записи:
Данные 1
Данные2
Данные 3

При выборе Данные 1 что должно произойти? Чем отличается выбор "данные 1" от "данные 2"? Дайте примеры своих записей.

>нажатии на кнопку поднять, данные должны сортироваться по последней дате,
при нажатии на кнопку "Поднять данные" у вас сейчас ничего не происходит. Потому что у вас тип кнопки - button,
<input name="submit" type="button" value="поднять данные" />
чтобы сервер получил данные и направил запрос в базу(сортировать записи), вам нужно либо установить тип кнопки submit, или повесить обработчик onClick(), который будет эти данные отправлять на сервер.
Может, вам UPDATE больше здесь нужен, я же не знаю...
Проясните ситуацию.

  Ответить  
 
 автор: kronck   (30.09.2010 в 12:22)   письмо автору
 
   для: Лена   (30.09.2010 в 10:57)
 

-- phpMyAdmin SQL Dump
-- version 3.2.3
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Generation Time: Sep 30, 2010 at 06:14 PM
-- Server version: 5.1.40
-- PHP Version: 5.2.12

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

--
-- Database: `up`
--

-- --------------------------------------------------------

--
-- Table structure for table `up`
--

CREATE TABLE IF NOT EXISTS `up` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(255) NOT NULL,
  `lastname` varchar(255) NOT NULL,
  `date` datetime NOT NULL,
  `lastdate` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=4 ;

--
-- Dumping data for table `up`
--

INSERT INTO `up` (`id`, `title`, `lastname`, `date`, `lastdate`) VALUES
(1, 'Проверка данных', 'Проверка данных 1', '2010-09-29 21:27:10', '2010-09-29 21:27:17'),
(2, 'Проверка данных 2', 'Проверка данных 2', '2010-09-29 21:37:31', '2010-09-29 21:37:36'),
(3, 'Проверка данных 3', 'Проверка данных 3', '2010-09-29 22:02:30', '2010-09-29 22:02:34');


Елена, вот сама табличка, еще раз повторюсь , это простой пример, для моего понимаю языка.
Да прошу прошения у меня радиокнопки, и происходит выбор из одного значения.
При выборе одного значения (любого) происходит поднятие данные наверх (т.е. сортировка по последней дате)
Да точно, как я не заметил, тип кнопки button, исправил его на submit, но все равно пишет, что ваши данные не подняты. Т.К. не правильный запрос у обработчика. HELP

  Ответить  
 
 автор: Лена   (30.09.2010 в 14:03)   письмо автору
 
   для: kronck   (30.09.2010 в 12:22)
 

У вас вот эти строки неправильные:

$result = mysql_query ("SELECT * FROM up ORDER BY lastdate,id DESC");
if ($result == 'true') {echo "<p>Ваш урок обновлен</p>";}

Запрос SELECT в случае успеха возвращает идентификатор ресурса, а не true, true возвращают INSERT,UPDATE и т.д.
сделайте
$result = mysql_query ("SELECT * FROM up ORDER BY lastdate,id DESC");
print $result; - сами увидите.

Все равно не понятно - вы хотите значения в базе поменять, или вывести на страницу с учетом сортировки. Есть просто выбрать, вам нужно так:
$result = mysql_query ("SELECT * FROM up ORDER BY lastdate DESC,id");
if(mysql_num_rows($result)>0)
{echo "<p>Ваш урок обновлен</p>";}
else ...

  Ответить  
 
 автор: kronck   (30.09.2010 в 14:10)   письмо автору
 
   для: Лена   (30.09.2010 в 14:03)
 

Спасибо!
но я допетрил сам :)
В файле index.php написал запрос
$result = mysql_query("SELECT * FROM up ORDER BY lastdate DESC",$db);


В обработчике написал :
$result = mysql_query ("UPDATE up SET lastdate = '$date' WHERE id='$id'");


$date приравнял сегоднящную дату, все заработало. Всем спасибо

  Ответить  
 
 автор: Trianon   (30.09.2010 в 13:47)   письмо автору
 
   для: kronck   (30.09.2010 в 04:45)
 

>да мы можем написать update up set и указать необходимые поля, но мы и изменим сами данные, а задача состоит в том , что бы существующие данные просто поднять (сортировать по дате) .

Это значит, что значение поля, по которому выполняется сортировка при выводе, нужно поменять.
Поменять значение можно лишь sql-оператором update. Где он?

  Ответить  
 
 автор: kronck   (30.09.2010 в 13:57)   письмо автору
 
   для: Trianon   (30.09.2010 в 13:47)
 

Как я понимаю UPDATE просто обновляет данные, собственно по логике вещей, при сортировке мы с помощью update меняем данные в строке lastdate таблицы up. ( на более ранние данные).
Помогите написать правильный запрос.

  Ответить  
 
 автор: Лена   (29.09.2010 в 21:41)   письмо автору
 
   для: kronck   (29.09.2010 в 15:29)
 


$result = mysql_query ("SELECT * FROM up ORDER BY lastdate DESC,id"); 


DESC действует только на то поле, имя которого расположено строго перед ним. А у вас значения сортироваись в возрастающем порядке.

  Ответить  
 
 автор: kronck   (30.09.2010 в 04:50)   письмо автору
 
   для: Лена   (29.09.2010 в 21:41)
 

Елена спасибо, узнал кое что новое по поводу DESC, однако сортировки по дате (поднятия данных) так и не проиходит.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования