|
|
|
| Задача - при нажатии кнопки данные в базе сортировались по дате в базе данных
Вот сама табличка
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, вроде запрос правильный на сортировки не происходит! как исправить? | |
|
|
|
|
|
|
|
для: kronck
(29.09.2010 в 15:29)
| | >вроде запрос правильный на сортировки не происходит! как исправить?
Так "правильный" или "вроде"? Вы определитесь.
Во-первых:
Где у Вас выставлен уровень ошибок через error_reporting() ?
Во-вторых:
Где Вы выполняете запрос на обновление записи? Что-то я его не нашёл.
В-третьих:
Откажитесь от использования do{} while(), используйте просто while() | |
|
|
|
|
|
|
|
для: Slo_Nik
(29.09.2010 в 16:58)
| | Уровни ошибок на локалном сервере надо определить раз и навсегда в php.ini, а в коде самом это ни к чему, не стоит на сервере ошибки светить ) | |
|
|
|
|
|
|
|
для: sim5
(29.09.2010 в 17:10)
| | А разве тяжело потом будет удалить одну строку?
По поводу php.ini я с Вами не согласен, надо не лениться писать error_reporting(), хуже от этого не будет, особенно для совсем новичков. | |
|
|
|
|
|
|
|
для: Slo_Nik
(29.09.2010 в 17:15)
| | Ну да, если писать за год одну станицу кода, и ваш сайт, это одна страница, тогда да, можно и убрать строчку.
Не соглашайтесь, это ваше право. | |
|
|
|
|
|
|
|
для: sim5
(29.09.2010 в 17:22)
| | Конечно же моё.
А была бы эта строка в коде, может у человека не возникли вопросы, почему не работает....
И не обязательно вписывать error_reporting в каждый скрипт, и Вы это прекрасно понимаете. | |
|
|
|
|
|
|
|
для: Slo_Nik
(29.09.2010 в 17:56)
| | Если у человека локальный сервер изначально будет настроен на обязательный вывод любых предупреждений и ошибок, то уж точно он будет в любом случае видеть причину (если конечно понимает). Например, у меня именно так и настроен он - я не хочу задумываться о добавлении этого в скрипты, и помнить, что это еще надо выбросить перед отправкой на сервер.
Вот если вы утром встаете и кодите целый день не выключая свой сервер, и других забот у вас нет, тогда я с вами согласен, иначе... ;-) | |
|
|
|
|
|
|
|
для: Slo_Nik
(29.09.2010 в 16:58)
| | Извеняюсь, я так и не понял как вы представляетете обновление записи, т.к. там всего 3 записи в базе , и происходит выбор через чекбоксы, формочки для изменения текста нет, я не понимаю как через чекбоксы можно обновить данные :/
да мы можем написать update up set и указать необходимые поля, но мы и изменим сами данные, а задача состоит в том , что бы существующие данные просто поднять (сортировать по дате) .
Сейчас из базы просто выводится следующее: данные 1, данные 2, данные 3 при выборе одного из чекбоксов и нажатии на кнопку поднять, данные должны сортироваться по последней дате, (при чем данные под номер 3, записаны самые свежие по сравнению с другими данные, т.е. мне надо поднять данные N 1 (самые старые данные)). Это просто тестовый пример, для моего понимания.
Желею, что начал изучать этот язык от великого "гуру" попова.
Не понимаю, зачем еще нужен один обработчик? разве моего написанного не достаточно?
Вы меня запутали.. :) | |
|
|
|
|
|
|
|
для: kronck
(30.09.2010 в 04:45)
| | Пока что ничего не понятно.
>выбор через чекбоксы
у вас не чекбоксы, у вас радиокнопки. А значит, возможен выбор только одного значения из списка.
Допустим, у меня на странице 3 записи:
Данные 1
Данные2
Данные 3
При выборе Данные 1 что должно произойти? Чем отличается выбор "данные 1" от "данные 2"? Дайте примеры своих записей.
>нажатии на кнопку поднять, данные должны сортироваться по последней дате,
при нажатии на кнопку "Поднять данные" у вас сейчас ничего не происходит. Потому что у вас тип кнопки - button,
<input name="submit" type="button" value="поднять данные" />
чтобы сервер получил данные и направил запрос в базу(сортировать записи), вам нужно либо установить тип кнопки submit, или повесить обработчик onClick(), который будет эти данные отправлять на сервер.
Может, вам UPDATE больше здесь нужен, я же не знаю...
Проясните ситуацию. | |
|
|
|
|
|
|
|
для: Лена
(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 | |
|
|
|
|
|
|
|
для: 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 ... | |
|
|
|
|
|
|
|
для: Лена
(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 приравнял сегоднящную дату, все заработало. Всем спасибо | |
|
|
|
|
|
|
|
для: kronck
(30.09.2010 в 04:45)
| | >да мы можем написать update up set и указать необходимые поля, но мы и изменим сами данные, а задача состоит в том , что бы существующие данные просто поднять (сортировать по дате) .
Это значит, что значение поля, по которому выполняется сортировка при выводе, нужно поменять.
Поменять значение можно лишь sql-оператором update. Где он? | |
|
|
|
|
|
|
|
для: Trianon
(30.09.2010 в 13:47)
| | Как я понимаю UPDATE просто обновляет данные, собственно по логике вещей, при сортировке мы с помощью update меняем данные в строке lastdate таблицы up. ( на более ранние данные).
Помогите написать правильный запрос. | |
|
|
|
|
|
|
|
для: kronck
(29.09.2010 в 15:29)
| |
$result = mysql_query ("SELECT * FROM up ORDER BY lastdate DESC,id");
|
DESC действует только на то поле, имя которого расположено строго перед ним. А у вас значения сортироваись в возрастающем порядке. | |
|
|
|
|
|
|
|
для: Лена
(29.09.2010 в 21:41)
| | Елена спасибо, узнал кое что новое по поводу DESC, однако сортировки по дате (поднятия данных) так и не проиходит. | |
|
|
|
|