|
|
|
| Уважаемый Cheops!
Помогите решить задачку (извелся я весь):
Имеется sql-таблица:
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
// Устанавлинваем соединение с базой данных
require_once("config.php");
// Защита от инъекционных запросов
if(!preg_match("|^[\d]*$|",$_GET['id_news'])) puterror("Ошибка при обращении к блоку новостей");
// Запрашиваем новость id_news (она должна быть видимой hide='show')
// Если скрипту передан первичный ключ выводимой новости отображаем только одну новость
if(isset($_GET['id_news']))
{
$query = "SELECT * FROM news WHERE hide='show' AND id_news=".$_GET['id_news'];
}
// если параметр 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
LIMIT $all_number_news";
}
$new = mysql_query($query);
if (!$new) puterror("Ошибка при обращении к блоку новостей");
if(mysql_num_rows($new) > 0)
{
while($news = mysql_fetch_array($new))
{
// Выводим заголовок новости
echo "<p class='zagnews'>".$news['name']." <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>";
}
}
?>
|
А как лучше релизовать вывод новостей в определенный период времени? Например, с 1 декабря 2006 года по 5 декабря.
Как понимаю нужно создать форму:
<form method="post" action="index.php" name="post">
<input type="hidden" name="active" value="arch">
<input type="hidden" name="menu" value="1">
<select name="minday">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5" selected>5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13">13</option>
<option value="14">14</option>
<option value="15">15</option>
<option value="16">16</option>
<option value="17">17</option>
<option value="18">18</option>
<option value="19">19</option>
<option value="20">20</option>
<option value="21">21</option>
<option value="22">22</option>
<option value="23">23</option>
<option value="24">24</option>
<option value="25">25</option>
<option value="26">26</option>
<option value="27">27</option>
<option value="28">28</option>
<option value="29">29</option>
<option value="30">30</option>
<option value="31">31</option>
</select>
<select name="minmon">
<option value="1">Января</option>
<option value="2">Февраля</option>
<option value="3">Марта</option>
<option value="4">Апреля</option>
<option value="5">Мая</option>
<option value="6">Июня</option>
<option value="7">Июля</option>
<option value="8">Августа</option>
<option value="9">Сентября</option>
<option value="10">Октября</option>
<option value="11">Ноября</option>
<option value="12" selected>Декабря</option>
</select>
<select name="minyear">
<option value="2005">2005</option>
<option value="2006" selected>2006</option>
</select>
</td><td>
<select name="maxday">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5" selected>5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13">13</option>
<option value="14">14</option>
<option value="15">15</option>
<option value="16">16</option>
<option value="17">17</option>
<option value="18">18</option>
<option value="19">19</option>
<option value="20">20</option>
<option value="21">21</option>
<option value="22">22</option>
<option value="23">23</option>
<option value="24">24</option>
<option value="25">25</option>
<option value="26">26</option>
<option value="27">27</option>
<option value="28">28</option>
<option value="29">29</option>
<option value="30">30</option>
<option value="31">31</option>
</select>
<select name="maxmon">
<option value="1">Января</option>
<option value="2">Февраля</option>
<option value="3">Марта</option>
<option value="4">Апреля</option>
<option value="5">Мая</option>
<option value="6">Июня</option>
<option value="7">Июля</option>
<option value="8">Августа</option>
<option value="9">Сентября</option>
<option value="10">Октября</option>
<option value="11">Ноября</option>
<option value="12" selected>Декабря</option>
</select>
<select name="maxyear">
<option value="2005">2005</option>
<option value="2006" selected>2006</option>
</select>
</td>
</tr>
<tr>
<td colspan=2 align=center>
<input type="submit" value="Отправить">
</form>
|
А вот что делать дальше не очень понятно. Разделять ячейку даты на три отдельные составляющие (дата, месяц, год)???
??? | |
|
|
|
|
|
|
|
для: Shadow69
(05.12.2006 в 11:16)
| | Я использую функцию mktime, хоть я и не Хеопс
mktime ( [int hour [, int minute [, int second [, int month [, int day [, int year [, int is_dst]]]]]]] )
|
секунды проставь нулевыми
а день месяц и год подставляй из формы
where putdate between date("d.m.Y", mktime(0, 0, 0, $_POST['month'],$_POST['day'], $_POST['year'])) and
date("d.m.Y", mktime(0, 0, 0, $_POST['month1'],$_POST['day1'], $_POST['year1']))
|
могу ошибаться в мелочах, но примерно так | |
|
|
|
|
|
|
|
для: himic
(05.12.2006 в 11:43)
| | himic, спасибо за подсказку. Ни за что бы не догадался. Буду экспериментировать.
<select name="minday">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5" selected>5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13">13</option>
<option value="14">14</option>
<option value="15">15</option>
<option value="16">16</option>
<option value="17">17</option>
<option value="18">18</option>
<option value="19">19</option>
<option value="20">20</option>
<option value="21">21</option>
<option value="22">22</option>
<option value="23">23</option>
<option value="24">24</option>
<option value="25">25</option>
<option value="26">26</option>
<option value="27">27</option>
<option value="28">28</option>
<option value="29">29</option>
<option value="30">30</option>
<option value="31">31</option>
</select>
</form>
|
и т.д.
А можно сделать чтобы число, месяц, год в html-форму вставлялись автоматически? И текущий месяц, год были активными. | |
|
|
|
|
|
|
|
для: Shadow69
(05.12.2006 в 14:30)
| | канечна можно
<select name="minday">
<?
for($i=1;$i<=31;$i++){
?>
<option value="<?=$i?>" <? if($i==date("d")) echo 'selected="selected"' ?>><?=$i?></option>
<?
}
?>
</select>
|
| |
|
|
|
|
|
|
|
для: himic
(05.12.2006 в 11:43)
| | Я использую функцию mktime, хоть я и не Хеопс
mktime ( [int hour [, int minute [, int second [, int month [, int day [, int year [, int is_dst]]]]]]] )
секунды проставь нулевыми
а день месяц и год подставляй из формы
where putdate between date("d.m.Y", mktime(0, 0, 0, $_POST['month'],$_POST['day'], $_POST['year'])) and
date("d.m.Y", mktime(0, 0, 0, $_POST['month1'],$_POST['day1'], $_POST['year1']))
могу ошибаться в мелочах, но примерно так
Может быть что-то не так делаю, но конструкция не работает... | |
|
|
|
|
|
|
|
для: himic
(05.12.2006 в 11:43)
| | Подскажите, пожайлуста, почему не работает эта конструкция:
...
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 putdate between date("d.m.Y", mktime(0, 0, 0,
$_POST['month'],$_POST['day'],
$_POST['year']))
and date("d.m.Y", mktime(0, 0, 0,
$_POST['month1'],$_POST['day1'],
$_POST['year1']))
ORDER BY putdate DESC
LIMIT $all_number_news";
}
...
|
| |
|
|
|
|
|
|
|
для: Shadow69
(23.01.2007 в 16:08)
| | В чём выражается "не работа"? | |
|
|
|
|
|
|
|
для: cheops
(24.01.2007 в 00:17)
| | Cheops, огромная признательность за ответ.
Выдаёт ошибку: Parse error: syntax error, unexpected T_STRING in D:\www\html\my_drive\zapros\formanews.php on line 107
Как раз в строке WHERE putdate between date("d.m.Y", mktime(0, 0, 0, $_POST['minmon'],$_POST['minday'], $_POST['minyear'])) and
date("d.m.Y", mktime(0, 0, 0, $_POST['maxmon'],$_POST['maxday'], $_POST['maxyear'])) | |
|
|
|
|
|
|
|
для: Shadow69
(26.01.2007 в 08:00)
| | Вот Ваш оператор.
$query = "SELECT id_news,
name,
body,
DATE_FORMAT(putdate,'%d.%m.%Y') as putdate_format,
url,
url_text,
url_pict,
hide
FROM news
WHERE putdate between date("
|
От одной кавычки до другой. Так понятно? | |
|
|
|
|
|
|
|
для: Shadow69
(23.01.2007 в 16:08)
| | Внутри двойных кавычек другие двойные кавычки следует экранировать, т.е. поступать примерно так
<?php
$query = "SELECT ... WHERE putdate between date(\"d.m.Y\", ... ";
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(26.01.2007 в 13:20)
| | cheops, спасибо!
А что такое "between"? | |
|
|
|
|
|
|
|
для: Shadow69
(26.01.2007 в 13:45)
| | Оператор X BEETWEN from AND to возвращает true (истина) если to > X > from | |
|
|
|
|
|
|
|
для: cheops
(26.01.2007 в 13:20)
| | Игорь, ну Вы же не всерьез считаете, что экранирование кавычек здесь решит проблему?
to Shadow69 :
a BETWEEN b AND c чиатется как a находится между b и с
a BETWEEN b AND c значит то же что и a >= b and a <= c | |
|
|
|
|
|
|
|
для: Trianon
(26.01.2007 в 14:09)
| | cheops, Trianon, ещё раз огромное спасибо!
Trianon, а что может решить проблему? | |
|
|
|
|
|
|
|
для: Shadow69
(26.01.2007 в 14:24)
| | У Вас несколько частей запроса написано на языке php, и еще несколько - на языке SQL.
И всё перемешано в кучу.
Нужно найти php-части и отделить их от всего остального , исполнив их
раньше, чем начнете формировать текст SQL запроса. | |
|
|
|
|
|
|
|
для: cheops
(26.01.2007 в 13:20)
| | >Внутри двойных кавычек другие двойные кавычки следует экранировать, т.е. поступать примерно так
>
<?php
>$query = "SELECT ... WHERE putdate between date("d.m.Y", ... ";
>?>
|
>Игорь, ну Вы же не всерьез считаете, что экранирование кавычек здесь решит проблему?
>
>to Shadow69 :
>a BETWEEN b AND c чиатется как a находится между b и с
>a BETWEEN b AND c значит то же что и a >= b and a <= c
при экранировании кавычек, выдаёт следующее:
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in D:\www\html\drive\archive.php on line 131 | |
|
|
|
|