Скрипт новостей. Нормально ли написано?

Kostya\spb

Новичок
Скрипт новостей. Нормально ли написано?

Вот тут накарякал, нормально хоть сделано? или можно как то убрать или ваще все заменить наболее простое.

PHP:
<?

include("./main.php");

$main['title'] = 'Новости';
$main['body'] = '';

$connect = connect();

if (!empty($_GET['id']) and preg_match("/^[\d]+$/",$_GET['id']))
{
	$query = mysql_query("SELECT *, DATE_FORMAT(add_date, '%d.%m.%Y') as add_date2 FROM news WHERE id_nws='".$_GET['id']."'") or die(mysql_error());

	if (mysql_num_rows($query))
	{
		$news = mysql_fetch_array($query);

		$main['body'] = '
		<tr><td class=menu align=center height=15 bgcolor=#4882bf>Новости: '.$news['add_date2'].'</td></tr>
		<tr><td><table cellspacing=5 cellpadding=1 width=100% border=0><tr><td>'.$news['news'].'</td></tr></table></td></tr>';
	}
	else
	{
		$main['body'] = '
		<tr><td class=menu align=center height=15 bgcolor=#4882bf>Ошибка</td></tr>
		<tr><td align=center><font color=#de0000>Такой новости не существует!</font></td></tr>';
	}
}
else if (preg_match("/^all+$/",$_GET['id']))
{
	$query = mysql_query("SELECT *, DATE_FORMAT(add_date, '%d.%m.%Y') as add_date2 FROM news ORDER BY add_date DESC") or die(mysql_error());

	if (mysql_num_rows($query))
	{
		$main['body'] = '<tr><td class=menu align=center height=15 bgcolor=#4882bf>Новости</td></tr>';
		
		while ($news = mysql_fetch_array($query))
		{
			$small_news = substr($news['news'], 0, 100);

			$main['body'] .= '
			<tr><td>
			<table cellspacing=5 cellpadding=1 width=100% border=0><tr><td>
			['.$news['add_date2'].'] <a title="'.$news['add_date2'].'" href="http://'.$main['host'].'/news.php?id='.$news['id_nws'].'">'.$small_news.' ...</a>
			</td></tr></table>
			</td></tr>';
		}
	}
	else
	{
		$main['body'] = "
		<tr><td class=menu align=center height=15 bgcolor=#4882bf>Ошибка</td></tr>
		<tr><td align=center><font color=#de0000>Новостей нет!</font></td></tr>";
	}
}
else
{
	$main['body'] = "
	<tr><td class=menu align=center height=15 bgcolor=#4882bf>Ошибка</td></tr>
	<tr><td align=center><font color=#de0000>Такой новости не существует!</font></td></tr>";
}

disconnect($connect);

?>
 

Кром

Новичок
Ну если изменять, то все полностью. Переписать под шаблоны.
А убыстрять тут тоже совершенно нечего.

Так что лучше начинай его усложнять. Добавлять новый функционал и избавляться от зависимостей.
 

Kostya\spb

Новичок
А что можно улучшить? мне кроме вывода даты и текста ненадо больше ничего.

На счет шаблонов, а как еще тут можно перевести?

Там забыл написать внизу еще три строчки

templ($top)
templ($news)
templ($bottom)

-~{}~ 18.07.05 19:45:

Автор оригинала: Romantik
ИМХО лучше сделать так
$id= intval($_GET['id']);
if($id>0){
....
И применять уже не $_GET['id'], а $id
А разница. Мне впринцыпе нетрудно и так написать
 

Кром

Новичок
>А что можно улучшить?

Например это:
>$small_news = substr($news['news'], 0, 100);
 

Кром

Новичок
Сделай подобную функцию, но чтобы слова не обрывались. При этом если последнее слово больше чем надо, то строка урезается в меньшую сторону. Учитывай, что если будет передан кусок html кода, то нужно выкинуть все теги. Чтобы можно было использовать эту функцию для текста записанного в htmlentities (&1234).
 

Kostya\spb

Новичок
На счет хтмл тегов забыл. а во на счет того чтобы отбрасывались слова, фик знает. для публикации одной, двух новостей в месяц думаю так сойдет
 

Кром

Новичок
Осталось еще два пункта. :)

1. Сделай подобную функцию, но чтобы слова не обрывались.При этом если последнее слово больше чем надо, то строка урезается в меньшую сторону.
2. Чтобы можно было использовать эту функцию для текста записанного в htmlentities (&1234).
 

Kostya\spb

Новичок
Первоя я понел, я вот на счет второго. Чото неочень догоняю. эт как?
 

Кром

Новичок
Ну вот тебе текстовая строка. Подели ее на части на 30 символе (под символом я подразумеваю именно букву).

PHP:
$str = '&#1074;&#1086;&#1090; &#1090;&#1077;&#1082;&#1089;&#1090;&#1086;&#1074;&#1072;&#1103; &#1089;&#1090;&#1088;&#1086;&#1082;&#1072; &#1082;&#1086;&#1090;&#1086;&#1088;&#1091;&#1102; &#1085;&#1091;&#1078;&#1085;&#1086; &#1087;&#1086;&#1076;&#1077;&#1083;&#1080;&#1090;&#1100; &#1085;&#1072; &#1095;&#1072;&#1089;&#1090;&#1080;';
 

SelenIT

IT-лунатик :)
Имхо, вместо
PHP:
if (mysql_num_rows($query))
    {
        $news = mysql_fetch_array($query);
вполне достаточно
PHP:
if ($news = mysql_fetch_array($query)) 
    {
т.к. mysql_fetch_ххх возвращает false, когда возвращать ей нечего.
 

Kostya\spb

Новичок
Нашол на сайте пхп.нет вроде работает.

PHP:
function snews($s, $n)
{
	for ($i=0; $i<strlen($s); $i++)
	{
		$str = ($n + $i >= strlen($s) ? $s : ($s{$n+$i} == " " ? substr($s,0,$n+$i) . " ..." : ""));
		if ( $str != "" ) { return $str; }
	}
}
 
   echo snews('Строка от которой нужно отрезать кусок!!', 10);
Только я немогу понять как работает вот это кусок. Немог бы ты объяснить или дать ссылку на доку где это объясняется

$str = ($n + $i >= strlen($s) ? $s : ($s{$n+$i} == " " ? substr($s,0,$n+$i) . " ..." : ""));

вначале типа если i + кол_сим-лов_ >= длинне_строки ... а вот дальше незнаю для чего вопросик и потом : и далее потом опять вопросик
 
Сверху