|
 168.9 Кб |
|
| Вот решил написать Архив фильмов. Ниже прикрепил рисунок на котором будет понятливей видно как отображается информация в архиве. Хочется, чтобы не 2008-11 выводилось, а Ноябрь 2008 и тд...Приложу ниже 2 файла. Первый из них формирует ссылку для перехода на второй с указанием года и месяца, после перехода нам выводятся все фильмы, которые были добавлены в тот месяц.
Первый файл:
<h2>Архив</h2>
<?
$result4 = mysql_query("SELECT DISTINCT left(date,7) AS month FROM data ORDER BY month DESC",$db);
if (!$result4)
{
echo "<p>Запрос на выборку данных из базы не прошел! <br> <strong>Код ошибки:</strong></p>";
exit (mysql_error());
}
if (mysql_num_rows ($result4)>0)
{
$myrow4 = mysql_fetch_array($result4);
do
{
printf ("<p><a href='view_date.php?date=%s'>%s</a></p>", $myrow4["month"], $myrow4["month"]);
}
while ($myrow4 = mysql_fetch_array($result4));
}
else
{
echo "<p>В таблице нет записей!</p>";
exit();
}
?>
|
Второй файл:
<? include ("blocks/bd.php");
if (isset($_GET['date'])) { $date = $_GET['date']; }
else { exit("<p>Вы обратились к файлу без необходимых параметров. Проверьте адресную строку браузера.</p>"); }
$date_title = $date;
$date_begin = $date;
$date++;
$date_end = $date;
$date_begin = $date_begin."-01";
$date_end = $date_end."-01";
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title><?php echo "Фильмы за $date_title"; ?></title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<meta name="description" content="<?php echo $myrow["meta_d"]; ?>" />
<meta name="keywords" content="<?php echo $myrow["meta_k"]; ?>" />
<link href="style.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="wrap">
<div id="header">
</div>
<div id="content">
<div id="sidebar">
<? include ("blocks/righttd.php"); ?>
</div>
<div id="left">
<div id="tab">
<? include ("blocks/tabhead.php"); ?>
<div id="tabcontent"><? echo "Фильмы за $date_title"; ?></div>
</div>
<?php
$result = mysql_query("SELECT id,title,description,date,author,mini_img,view,rating,q_vote FROM data WHERE date >= '$date_begin' AND date < '$date_end'",$db);
if (!$result)
{
echo "<p>Запрос на выборку данных из базы не прошел! <br> <strong>Код ошибки:</strong></p>";
exit (mysql_error());
}
if (mysql_num_rows ($result)>0)
{
$myrow = mysql_fetch_array($result);
do
{
$r = $myrow["rating"]/$myrow["q_vote"];
$r = intval($r);
printf ("<table class='post' cellspacing='0' cellpadding='0'>
<tr>
<td class='post' colspan='3'><h2>%s<div style='margin-bottom:12px' align='left'><span class='postinfo'>Дата добавления: %s<br>Фильм добавил: %s</span></h2></div></td>
</tr>
<tr>
<td class='post' colspan='3'><img class='centerimg' src='%s'></td>
</tr>
<tr>
<td class='post' colspan='3'><div style='margin-bottom:12px' align='justify'><p> %s</p></div></td>
</tr>
<tr>
<td class='post' colspan='3'>
<div style='margin-bottom:12px' align='left'>
<span class='postinfo'>Просмотров: %s<br>Рейтинг: <img style='margin:0px; border:0px; background:#f6f6f6; padding:0px; margin-top:5px;' src='images/%s.gif'></span>
<div style='margin-bottom:12px' align='right'>
<span class='postinfo'><a href='view_full.php?id=%s'>Перейти к фильму</a></span>
</div>
</div>
</td>
</tr>
</table>",$myrow["title"],$myrow["date"],$myrow["author"],$myrow["mini_img"],$myrow["description"],$myrow["view"],$r,$myrow["id"]);
}
while ($myrow = mysql_fetch_array($result));
}
else
{
echo "<p>Заметок за такой период не существуют!</p>";
exit();
}
?>
</div>
<div class="clear"></div>
</div>
</div>
</body>
</html>
|
Есть функция:
function month_name($number){
$month_names = array
(
01 => 'Январь',
02 => 'Февраль',
03 =>'Март',
04 =>'Апрель',
05 =>'Май',
06 =>'Июнь',
07 =>'Июль',
08 =>'Август',
09 =>'Сентябрь',
10 =>'Октябрь',
11 =>'Ноябрь',
12 =>'Декабрь'
);
return $month_names[$number];
}
|
А как теперь ее использовать, чтобы мне выводило не 2008-11, а Ноябрь 2008..Заранее благодарен
Структура таблици
CREATE TABLE `data` (
`id` int(5) NOT NULL auto_increment,
`jan` int(2) NOT NULL default '0',
`meta_d` varchar(255) NOT NULL default '',
`meta_k` varchar(255) NOT NULL default '',
`description` text NOT NULL,
`text` text NOT NULL,
`view` int(7) NOT NULL default '0',
`author` varchar(100) NOT NULL default '',
`date` date NOT NULL default '0000-00-00',
`mini_img` varchar(255) NOT NULL default '',
`img` varchar(255) NOT NULL default '',
`title` varchar(255) NOT NULL default '',
`rating` int(10) NOT NULL default '5',
`q_vote` int(10) NOT NULL default '1',
PRIMARY KEY (`id`),
FULLTEXT KEY `text` (`text`)
) TYPE=MyISAM AUTO_INCREMENT=8 ;
|
| |
|
|
|
|
|
|
|
для: TetRiska
(20.11.2008 в 03:02)
| | Вай вай вай, сколько букаф... :)))))))))
Ну мне ничего умнее в голову не пришло, как сделать таким образом:
<?
function month_name($date){
$month = preg_replace("#\d{4}-(.+?)-.+#i", "$1", $date);
$year = preg_replace("#(\d{4})-.+#i", "$1", $date);
$month_names = array
(
01 => 'Январь',
02 => 'Февраль',
03 =>'Март',
04 =>'Апрель',
05 =>'Май',
06 =>'Июнь',
07 =>'Июль',
08 =>'Август',
09 =>'Сентябрь',
10 =>'Октябрь',
11 =>'Ноябрь',
12 =>'Декабрь'
);
return $month_names[$month]." ".$year;
}
| а в коде поставьте как то так примерно:
<?
month_name($myrow["date"])
| Может кто нибудь предложит более ровный вариант, но этот тоже работает. | |
|
|
|
|
|
|
|
для: Николай2357
(20.11.2008 в 03:38)
| | Подставил все как положено...Но
Ругается на :
return $month_names[$month]." ".$year;
|
Пишет, что: Notice: Undefined index:
И на:
printf ("<p><a href='view_date.php?date=%s'>%s</a></p>", $myrow4["month"], month_name($myrow4["date"]));
|
Пишет, что: Notice: Undefined index: date
Мож перед выполнением функции надо превести дату YY:MM:DD в такой вид как DD:MM:YY? | |
|
|
|
|
|
|
|
для: TetRiska
(20.11.2008 в 04:43)
| | Чесно говоря, совсем не хочется столько много читать. Вы можете четко поставить задачу?
Пример:
1. У меня есть дата в формате 2008-11.
2. Мне нужно получить: .Ноябрь 2008.
Или у Вас другие форматы?
возьмите ту функцию, что я написал, поместите в отдельный файл, напишите снизу
<?
$date = "2008-11-12";
echo month_name($date);
| и запустите этот скрипт. Если будут нотисы - ну не знаю. У меня по крайней мере все работает. | |
|
|
|
|
|
|
|
для: Николай2357
(20.11.2008 в 03:38)
| | Если можно обойтись без рег. выражений, значит лучше обойтись без них:
<?
$month_names = array
(1 => 'Январь',
'Февраль',
'Март',
'Апрель',
'Май',
'Июнь',
'Июль',
'Август',
'Сентябрь',
'Октябрь',
'Ноябрь',
'Декабрь'
);
$date = "2008-11";
$date = strtotime($date);
echo $month_names[date("n", $date)] . " " . date("Y", $date);
|
| |
|
|
|
|
|
|
|
для: sim5
(20.11.2008 в 07:40)
| | Вот, я же говорил, что кто нибудь предложит более ровный вариант. :))
А про нотисы так и не понятно. Может быть функция не в том месте? | |
|
|
|
|
|
|
|
для: Николай2357
(20.11.2008 в 08:04)
| | Просто проверить получаемый массив. | |
|
|
|
|
|
|
|
для: sim5
(20.11.2008 в 07:40)
| | После того как слепил такое:
$month_names = array
(1 => 'Январь',
'Февраль',
'Март',
'Апрель',
'Май',
'Июнь',
'Июль',
'Август',
'Сентябрь',
'Октябрь',
'Ноябрь',
'Декабрь'
);
$result4 = mysql_query("SELECT DISTINCT left(date,7) AS month FROM data ORDER BY month DESC",$db);
$result4 = strtotime($result4);
echo $month_names[date("n", $result4)] . " " . date("Y", $result4);
|
Получили и варнинг и нотис :(
Warning: date(): Windows does not support dates prior to midnight (00:00:00), January 1, 1970 in k:\home\localhost\www\video_blog\blocks\righttd.php on line 104
Notice: Undefined offset: 0 in k:\home\localhost\www\video_blog\blocks\righttd.php on line 104
|
| |
|
|
|
|
|
|
|
для: TetRiska
(20.11.2008 в 15:04)
| | Вы сперва проверьте результат своего запроса. | |
|
|
|
|
|
|
|
для: sim5
(20.11.2008 в 15:11)
| | Насколько я вижу, то в масиве лежит такая дата формата 2008-11 ...запросом
$result4 = mysql_query("SELECT DISTINCT left(date,7) AS month FROM data ORDER BY month DESC",$db);
| мы ее получили и записали в масив
$myrow4 = mysql_fetch_array($result4);
|
| |
|
|
|
|
|
|
|
для: TetRiska
(20.11.2008 в 15:25)
| | Как я понял у вас выводятся все даты из таблицы.
Тогда $myrow4 = mysql_fetch_array($result4) надо прогонять через цикл. | |
|
|
|
|
|
|
|
для: AcidTrash
(20.11.2008 в 15:31)
| | Нет не все...Выводятся те которые не повторяются, в запросе указано ж это
$result4 = mysql_query("SELECT DISTINCT left(date,7) AS month FROM data ORDER BY month DESC",$db);
|
и потом в цикле, который есть, прогоняются значения массива $myrow4
do
{
printf ("<p><a href='view_date.php?date=%s'>%s</a></p>", $myrow4["month"], $myrow4["month"]);
}
while ($myrow4 = mysql_fetch_array($result4));
}
|
я выше пример кода приводил, где идет формировка запроса и вывод...Остается правильно применить тот массив дат :( | |
|
|
|
|
|
|
|
для: TetRiska
(20.11.2008 в 15:48)
| | Вот чтобы не терзать себя вопросами, проверьте то, что вы хотите преобразовать. Если вы передаете строку с датой, то ошибок не будет, конечно если у вас дата "не царского периода". | |
|
|
|
|
|
|
|
для: sim5
(20.11.2008 в 15:51)
| | Как точнее проверить то, что заносится в массив $myrow после выполнения запроса
$result4 = mysql_query("SELECT DISTINCT left(date,7) AS month FROM data ORDER BY month DESC",$db);
| ? Вывести на экран?, тоесть echo $myrow["month"]; ? После вывода имеем результат 2008-11... в базе поле с датой стоит по умолчанию 0000-00-00... | |
|
|
|
|
|
|
|
для: TetRiska
(20.11.2008 в 15:04)
| | А вы собственно пытаетесь strtotime`мить дескриптор запроса.
После строки с mysql_query, впишите
$result4=mysql_result($result4,0,"month");
|
| |
|
|
|
|
|
|
|
для: AcidTrash
(20.11.2008 в 15:13)
| | Вписал, результат тот же | |
|
|
|
|
|
|
|
для: TetRiska
(20.11.2008 в 15:21)
| | Вот посидел и нашел выход как перевести:
$month_names = array
(1 => 'Январь',
2 =>'Февраль',
3 =>'Март',
4 =>'Апрель',
5 =>'Май',
6 =>'Июнь',
7 =>'Июль',
8 =>'Август',
9 =>'Сентябрь',
10 =>'Октябрь',
11 =>'Ноябрь',
12 =>'Декабрь'
);
$result4 = "2008-11";
list ($year,$date) = explode("-",$result4);
echo $month_names[$date], " " ,$year;
|
Выводит Ноябрь 2008 как и надо было, но есть одно НО...Как только в $result4 выполняю запрос
$result4 = mysql_query("SELECT DISTINCT left(date,7) AS month FROM data ORDER BY month DESC",$db);
|
который выберает не повторяющиеся даты и обрезает день, из чего получается 2008-11, выводятся следующие нотисы:
Notice: Undefined offset: 1 in k:\home\localhost\www\video_blog\blocks\righttd.php on line 103
103 -
list ($year,$date) = explode("-",$result4);
|
Notice: Undefined index: in k:\home\localhost\www\video_blog\blocks\righttd.php on line 104
-Resource id #8
104 -
echo $month_names[$date], "-" ,$year;
|
В чем же дело? :(
Я предпологаю что запрос нам возвращает 2008-11 в формате даты, тоесть нада ее конвертнуть? Или я ошибаюсь? | |
|
|
|
|