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

Форум PHP

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

 

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

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

тема: Перевод даты 2008-11 в Ноябрь 2008 и тд, помогите решить проблемку
 
 автор: TetRiska   (20.11.2008 в 03:02)   письмо автору
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 ;

  Ответить  
 
 автор: Николай2357   (20.11.2008 в 03:38)   письмо автору
 
   для: 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"])
Может кто нибудь предложит более ровный вариант, но этот тоже работает.

  Ответить  
 
 автор: TetRiska   (20.11.2008 в 04:43)   письмо автору
 
   для: Николай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?

  Ответить  
 
 автор: Николай2357   (20.11.2008 в 05:31)   письмо автору
 
   для: TetRiska   (20.11.2008 в 04:43)
 

Чесно говоря, совсем не хочется столько много читать. Вы можете четко поставить задачу?
Пример:
1. У меня есть дата в формате 2008-11.
2. Мне нужно получить: .Ноябрь 2008.
Или у Вас другие форматы?
возьмите ту функцию, что я написал, поместите в отдельный файл, напишите снизу

<?
$date 
"2008-11-12";
echo 
month_name($date);
и запустите этот скрипт. Если будут нотисы - ну не знаю. У меня по крайней мере все работает.

  Ответить  
 
 автор: sim5   (20.11.2008 в 07:40)   письмо автору
 
   для: Николай2357   (20.11.2008 в 03:38)
 

Если можно обойтись без рег. выражений, значит лучше обойтись без них:
<?
$month_names 
= array  
(
=> 'Январь',  
'Февраль',  
'Март',  
'Апрель',  
'Май',  
'Июнь',  
'Июль',  
'Август',   
'Сентябрь',  
'Октябрь',  
'Ноябрь',  
'Декабрь'  
);
$date "2008-11";
$date strtotime($date);
echo 
$month_names[date("n"$date)] . " " date("Y"$date);

  Ответить  
 
 автор: Николай2357   (20.11.2008 в 08:04)   письмо автору
 
   для: sim5   (20.11.2008 в 07:40)
 

Вот, я же говорил, что кто нибудь предложит более ровный вариант. :))
А про нотисы так и не понятно. Может быть функция не в том месте?

  Ответить  
 
 автор: sim5   (20.11.2008 в 08:08)   письмо автору
 
   для: Николай2357   (20.11.2008 в 08:04)
 

Просто проверить получаемый массив.

  Ответить  
 
 автор: TetRiska   (20.11.2008 в 15: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

  Ответить  
 
 автор: sim5   (20.11.2008 в 15:11)   письмо автору
 
   для: TetRiska   (20.11.2008 в 15:04)
 

Вы сперва проверьте результат своего запроса.

  Ответить  
 
 автор: TetRiska   (20.11.2008 в 15:25)   письмо автору
 
   для: sim5   (20.11.2008 в 15:11)
 

Насколько я вижу, то в масиве
$myrow4["month"]
лежит такая дата формата 2008-11 ...запросом
$result4 = mysql_query("SELECT DISTINCT left(date,7) AS month FROM data ORDER BY month DESC",$db);
мы ее получили и записали в масив
$myrow4 = mysql_fetch_array($result4);

  Ответить  
 
 автор: AcidTrash   (20.11.2008 в 15:31)   письмо автору
 
   для: TetRiska   (20.11.2008 в 15:25)
 

Как я понял у вас выводятся все даты из таблицы.
Тогда $myrow4 = mysql_fetch_array($result4) надо прогонять через цикл.

  Ответить  
 
 автор: TetRiska   (20.11.2008 в 15:48)   письмо автору
 
   для: 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));

}


я выше пример кода приводил, где идет формировка запроса и вывод...Остается правильно применить тот массив дат :(

  Ответить  
 
 автор: sim5   (20.11.2008 в 15:51)   письмо автору
 
   для: TetRiska   (20.11.2008 в 15:48)
 

Вот чтобы не терзать себя вопросами, проверьте то, что вы хотите преобразовать. Если вы передаете строку с датой, то ошибок не будет, конечно если у вас дата "не царского периода".

  Ответить  
 
 автор: TetRiska   (20.11.2008 в 16:13)   письмо автору
 
   для: 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...

  Ответить  
 
 автор: AcidTrash   (20.11.2008 в 15:13)   письмо автору
 
   для: TetRiska   (20.11.2008 в 15:04)
 

А вы собственно пытаетесь strtotime`мить дескриптор запроса.
После строки с mysql_query, впишите
$result4=mysql_result($result4,0,"month"); 

  Ответить  
 
 автор: TetRiska   (20.11.2008 в 15:21)   письмо автору
 
   для: AcidTrash   (20.11.2008 в 15:13)
 

Вписал, результат тот же

  Ответить  
 
 автор: TetRiska   (21.11.2008 в 13:20)   письмо автору
 
   для: 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 в формате даты, тоесть нада ее конвертнуть? Или я ошибаюсь?

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

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