Forum Webscript.Ru
Программирование => PHP => Тема начата: 3D-Dragon от 27 Ноября 2001, 19:47:09
-
Я начинающий в PHP помогите разобраться.
Я вставляю новости на сайте в зависимости от вызываемой даты (1810 - это например 18 октября)
в url путем вложения в index.php и добавления к ссылке $news=1810
$url = "";
if ($link == 1110) { $url = "news/1110.html"; }
if ($link == 1510) { $url = "news/1510.html"; }
if ($link == 1710) { $url = "news/1710.html"; }
if ($link == 1810) { $url = "news/1810.html"; }
# и т.д.
if ($url == "") { $url = "error.phtml"; }
INCLUDE ($url);
Этот список постоянно растет и очень неудобно его постоянно пополнять и редактировать.
Вопрос:
Как можно (если можно) присвоить дате (1810) переменную и вызывать eё из url типа
http://127.0.0.1/index.php?news=(переменная)
а потом эта переменная будет обрабатываться скриптом и выдавать нужную ссылку ?
Или как по другому организовать все это.
Хочу все это сделать на MySQL, но как у начинающего ничего не получается :(
-
if ($link == 1110) { $url = "news/1110.html"; }
if ($link == 1510) { $url = "news/1510.html"; }
if ($link == 1710) { $url = "news/1710.html"; }
if ($link == 1810) { $url = "news/1810.html"; }
можно заменить без mysql
для вывода всех новостей по возрастанию
for ($i=1;$i<=12;$i++) {
for ($j=1;$j<=31;$j++) {
{
$link=$i.$j;
$url="news/".$link.".html";
if (@fopen ($url, "r") { INCLUDE ($url);}
}
}
могут быть неточности с fopen
звиняйте ляпал быстро по теории
-
Если правильно понял
$link=trim($link);
if ($link) {
$url="news/".$link.".html";
}
else {
$url = "error.phtml";
}
INCLUDE ($url);
-
в MySQL усе просто
create table news(
id int(11) NOT NULL auto_increment,
date datetime,
body text,
PRIMARY KEY (id),
UNIQUE KEY id (id)
)
а потом с помощью php выводить:
$result = mysql_query("select * from news order by date desc limit 5");
while($row = mysql_fetch_array($result)) {
print $row["date"]." - ".$row["body"]."
\\n";
}
order by date desc - сортировать по дате,
limit 5 выводить последние пять новостей.
а добавлять -
mysql_query("insert into news values(\'\', \'2001-11-27 11:11:11\', \'моя новость номер 1\')");
можно просто поле date а не datetime, тогда будет просто \'2001-11-27\'
-
Спасибо, не ожидал так быстро ответа и столько вариантов !!!
Уже запутался :(
Britva
Я все таки хочу это сделать на MySQL.
Дело в том что новости выходят не всегда ежедневно и выводить их нужно по ссылкам из календаря.
Если "не влом" глянь структуру на http://all-xp.net.ru
-
Можно закинуть все новости в БД, а при отрисовывании календаря проверять, существует ли новость в таблице.
Вот посмотри я для теста выложил - http://ms.eugeny.com/news.php
Есть хороший класс - DateCalc для всего этого
-
Britva
Мне стыдно за незнания, как новости запихивать в базу и как быть со старыми новостями ?
И где взять этот DateCalc ?
-
почитай для начала статьи на
http://webscript.ru
http://detail.phpclub.net
и как быть со старыми новостями ?
конвертер написать :)
И где взять этот DateCalc ?
пиши, я могу выслать
-
Прочитал то я практически все, только толку от этого никакого :(
Я так и не нашел нормального примера по MySQL
Везде написано типа как ты написал
create table news(
id int(11) NOT NULL auto_increment,
date datetime,
body text,
PRIMARY KEY (id),
UNIQUE KEY id (id)
)
Мне понятно, что создается таблица news c полями id, date, body.
Но я никак не пойму для чего эти null, not null, primary key :(
И что с этой таблицей делать дальше.
Кстати полно статей как выводить данные, а как вводить не встречал.
-
вообщем то просто можно перевести с англ. на русский
primary key - первичный ключ, unique key - уникальный
null - ноль
not null не ноль, т.е. поле не может быть 0, или пусто.
купи книжечку http://books.ru/shop/books/9673
-
ИМХО если не планируется поиск по новостям, то лучше сделать таблицу вроде такого
CREATE TABLE news(
id int not null auto_increment,
date date,
primary key(id));
А тексты новостей хранить в отдельной папке в файлах с именами .txt и при выводе новостей вставлять их с помощью virtual().
Такая таблица имеет фиксированную длинну а значит быстрее работает.
А при отрисовке календаря делать примерно такое:
SELECT id,DAYOFMONTH(date) AS day FROM news WHERE YEAR(date)=$year and MONTH(date)=$month" ORDER BY date ASC;
Получишь id новостей и day - числа указанного месяца ($month) указанного года ($year), на которые есть новость в БД. Используя эти даты рисуешь календарь
-
Britva
Я во всем разобрался и уже написал скрипт.
Поделись DataCalc, пожалуйста.
-
Пиши, я тебе вышлю (mail at eugeny.com)
а наз-ся он DateCalc а не DataCalc :)
-
М-да, спасибо за DateCalc,
но я не пойму как мне его прикрутить к своим нуждам :(
-
Britva,
Как при отрисовывании календаря проверять, существует ли новость в таблице ?
И как это прикрутить к DateCalk и вывести этот календарь ?
-
3D-Dragon
Выполняешь запрос к базе для соответствующего дня в цикле
в DateCalc есть просто много полезных функций для отрисовки самого календаря