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

Форум MySQL

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

 

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

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

тема: Вывод новостей за день, неделю, месяц с помощью GET-запроса
 
 автор: Shadow69   (07.02.2007 в 09:49)   письмо автору
 
 

Имеется база данных следующего вида:

CREATE TABLE news (
id_news int(11) NOT NULL auto_increment,
name tinytext NOT NULL,
body text NOT NULL,
putdate datetime NOT NULL default '0000-00-00 00:00:00',
url tinytext NOT NULL,
url_text tinytext NOT NULL,
url_pict tinytext NOT NULL,
hide enum('show','hide') NOT NULL default 'show',
PRIMARY KEY (id_news)
) TYPE=MyISAM;

Выводим все имеющиеся данные из базы:


<?php
  
if(isset($_GET['id_news']))
  {
    
$query "SELECT * FROM news WHERE hide='show' AND id_news=".$_GET['id_news'];
  }
  else
  {
    
$query "SELECT id_news,
                   name,
                   body,
                   DATE_FORMAT(putdate,'%d.%m.%Y') as putdate_format,
                   url,
                   url_text,
                   url_pict,
                   hide
              FROM news 
              WHERE hide='show' AND putdate <= NOW()
              ORDER BY putdate DESC"
;
  }
  
$new mysql_query($query);
  if (!
$newputerror("Ошибка при обращении к блоку новостей");
  if(
mysql_num_rows($new) > 0)
  {
    while(
$news mysql_fetch_array($new))
    {
        
// Выводим заголовок новости
        
echo "<p class='zagnews'>".$news['name']."&nbsp;&nbsp;<em class=datanews>".$news['putdate_format']."</em></p>";    // Выводим тело новости перводя символы         

        // Выводим тело новости переводя символы 
        // переноса строки в тег <br>
        
echo "<p class='text'>";
        
// Выводим изображение
        
if(trim($news['url_pict']) != "" && trim($news['url_pict']) != "-")
        echo 
"<img align=right class=img src=".$news['url_pict'].">";
        
        echo 
nl2br($news['body'])."</p>";
        
        
// Выводим URL
        
if(trim($news['url']) != "" && trim($news['url']) != "-")
        echo 
"<p class='linkr'><a class='link' href=".$news['url'].">".$news['url_text']."</a></p>";        
    }
  }
?>


Вопрос, уважаемые форумчане, в следующем: как с помощью GET-запроса (например, http://news.ru/index.php?act=27-01-2007) вывести новости за неделю, месяц, год и т.д.

Думаю, что нужно подставлять переменную в WHERE. Но как? И думаю что с помощью функции mktime(). Но… Всё равно одни вопросы.

   
 
 автор: ZuArt   (07.02.2007 в 10:01)   письмо автору
 
   для: Shadow69   (07.02.2007 в 09:49)
 

В первую очередь - зачем вот этот кусок "AND putdate <= NOW()" ??? по логике вещей новости явно не должны вноситься будущим числом =))) а значит всегда для всех записей это условие верно, а значит совершенну ненужное - только нагрузку дополнительную создает.

второе - что именно-то нужно? выводить за год, месяц, неделю??? или нужны просто SQL-запросы для всех 3-х вариантов?

   
 
 автор: Trianon   (07.02.2007 в 10:06)   письмо автору
 
   для: ZuArt   (07.02.2007 в 10:01)
 

>В первую очередь - зачем вот этот кусок "AND putdate <= NOW()" ???

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

   
 
 автор: ZuArt   (07.02.2007 в 10:09)   письмо автору
 
   для: Trianon   (07.02.2007 в 10:06)
 

=) убедил ;) - такое бывает =)

   
 
 автор: Trianon   (07.02.2007 в 10:45)   письмо автору
 
   для: Shadow69   (07.02.2007 в 09:49)
 

> как с помощью GET-запроса (например, http://news.ru/index.php?act=27-01-2007) вывести новости за неделю, месяц, год и т.д.

Если задача ставится именно так, можно предложить обрабатывать два поля (например from и to) и выводить данные, которые попадают в промежуток между ними.
<?
$from 
mysql_escape_string($_GET['from']);
$tomysql_escape_string($_GET['to']);
$query "SELECT ...... WHERE putdate BETWEEN '$from' AND '$to' ORDER BY putdate";

   
 
 автор: gLip   (07.02.2007 в 12:05)   письмо автору
 
   для: Trianon   (07.02.2007 в 10:45)
 

Спасибо -)))...
совсем забыл про это(((

   
 
 автор: gLip   (07.02.2007 в 10:48)   письмо автору
 
   для: Shadow69   (07.02.2007 в 09:49)
 

<?php
$tomorrow = mktime(0, 0, 0, date("m") , date("d")+1, date("Y"));
$lastmonth = mktime(0, 0, 0, date("m")-1, date("d"), date("Y"));
$nextyear = mktime(0, 0, 0, date("m"), date("d"), date("Y")+1);
?>

смотри -)

   
 
 автор: ZuArt   (07.02.2007 в 10:59)   письмо автору
 
   для: Shadow69   (07.02.2007 в 09:49)
 

Если дата храниться в формате DATE..., то


<?php
$tomorrow 
date("Y-m-d"mktime(000date("m") , date("d")+1date("Y")));
$lastmonth date("Y-m-d"mktime(000date("m")-1date("d"), date("Y")));
$nextyear date("Y-m-d"mktime(000date("m"), date("d"), date("Y")+1));
?>

   
 
 автор: Shadow69   (07.02.2007 в 11:43)   письмо автору
 
   для: ZuArt   (07.02.2007 в 10:59)
 

Всем спасибо!

А что может значить этот запрос: http://news.ru/index.php?min=31-01-2007?

Что такое min? И как он взаимодействует с sql-запросом?

else
{
....
FROM news
WHERE hide='show' AND putdate <= NOW() AND min = ????????
ORDER BY putdate DESC";
}

   
 
 автор: Trianon   (07.02.2007 в 11:46)   письмо автору
 
   для: Shadow69   (07.02.2007 в 11:43)
 

Это не запрос SQL, а имя документа.
Как этот документ формируется, и какие sql-запросы при этом порождает, известно лишь скрипту index.php
Само по себе min (в отрыве от контекста) не значит ничего. Просто три буквы.

   
 
 автор: ZuArt   (07.02.2007 в 12:01)   письмо автору
 
   для: Shadow69   (07.02.2007 в 11:43)
 

Рискну предположить, что min - это параметр, с какого дня выводить новости, а при отсутствии последней даты, она, похоже берется по дефолту как текущая... что-то типа этого, видимо получается

FROM news
WHERE hide='show' AND putdate BETWEEN '$min' AND NOW()
ORDER BY putdate DESC";

   
 
 автор: Shadow69   (07.02.2007 в 14:38)   письмо автору
 
   для: ZuArt   (07.02.2007 в 12:01)
 

Ещё раз всем огромное спасибо за ответы.

А как вывести дату соответствующую недельному, месячному сроку?
Например, сегодня 7-02-2007. А нужно вывести 31-01-2007.

$date = echo date () ????

http://news.ru/index.php?min=$date.

   
 
 автор: Shadow69   (08.02.2007 в 08:16)   письмо автору
 
   для: Shadow69   (07.02.2007 в 14:38)
 

Блин, туплю! :-)

Вот так:

$date = date("Y-m-d", mktime(0, 0, 0, date("m") , date("d")-7, date("Y")));
http://news.ru/index.php?min=$date.


Только выводит в формате 2007-01-31. А надо 31-01-2007.

   
 
 автор: Trianon   (08.02.2007 в 09:05)   письмо автору
 
   для: Shadow69   (08.02.2007 в 08:16)
 

http://news.ru/index.php?min=$date.
Только выводит в формате 2007-01-31. А надо 31-01-2007


Зачем? Это же внутренний формат?

   
Rambler's Top100
вверх

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