Совет новичкам по поводу оформления своего говнокода

ps2007

Новичок
Совет новичкам по поводу оформления своего говнокода

Прошу администрацию не удалять мое сообщение.
Хочу показать, как из говнокода, который обычно пишут новички сделать более-менее читаемый код.
Исходный код:

PHP:
<?php 
$result=query( 
"SELECT*FROM`".PREFIX."posts`WHERE`id`='".intval($id)."'ORDER BY`id`DESC",__FILE__,__LINE__ 
); 
$count=mysql_num_rows($result); 
while($row=mysql_fetch_assoc($result)) 
{$body_material.='<div class="material"> 
<div class="material_wrapper"> 
<img src="'.htmlspecialchars($row['wrapper']).'" alt=""/> 
</div> 
<div class="material_right"> 
<div class="material_info"> 
<h1>'.htmlspecialchars($row['name']).'</h1> 
<div class="material_date_and_name"><a href="#">'.htmlspecialchars($row['login']). '</a> | '.format_date($row['date']).'</div> 
</div> 
<div class="the_full_area"></div> 
<div class="material_about"> 
'.htmlspecialchars($row['about']).' 
</div> 
</div> 
<br/><br/><br/> 
</div> 
<div class="the_full_area"></div> 
<div class="material_author"> 
<div class="material_author_avatar"> 
<img src="http://youexpert.ru/skins/default/design/img/no_avatar.jpg" alt=""/> 
</div> 
<div class="material_author_about"> 
<h1>Автор: <a href="#">'.htmlspecialchars($row['login']).'</a></h1> 
<p>Об авторе</p> 
</div> 
<div class="the_full_area"></div> 
</div> 
<div class="material_content"> 
// ЗДЕСЬ НУЖНО НАПИСАТЬ УСЛОВИЕ ЕСЛИ ПЕРЕМЕННАЯ FINAL существуето то.. 
<h1>Предварительный просмотр финального итога</h1> 
<p class="material_image"><a href="'.nl2br(bb_tag(htmlspecialchars($row['final']))).'"><img width="600" height="400" src="'.nl2br(bb_tag(htmlspecialchars($row['final']))).'" alt=""/></a></p> 
// ДО СЮДА 
<p>'.nl2br(bb_tag(htmlspecialchars($row['content']))).'<br/><br/><a href="'.htmlspecialchars($row['download']).'">Скачать</a> <a href="'.htmlspecialchars($row['demo']).'">Демо</a></p> 
</div>';}
Все перепутано, не видно ни структуры HTML, ни логики скрипта. Нужно сначала подготовить данные для вывода, т.е. выполнить запросы, произвести вычисления, прочее. Затем нужно только вывести результаты.
Вот что получилось после небольшой реорганизации:

PHP:
<?php

// получаем данные, никакого вывода
$result = query(
	"SELECT * FROM `".PREFIX."posts` WHERE `id` = '".intval($id)."'ORDER BY`id`DESC",__FILE__,__LINE__
	);
$count = mysql_num_rows($result);

$data = array();
while($row = mysql_fetch_assoc($result))
{
	$data[] = $row;
}


// выводим HTML, здесь не должно быть никаких запросов
foreach ($data as $row)
{
?>
<div class="material">
	<div class="material_wrapper">
		<img src="<?=htmlspecialchars($row['wrapper'])?>" alt=""/>
	</div>
	<div class="material_right">
		<div class="material_info">
			<h1><?=htmlspecialchars($row['name'])?></h1>
			<div class="material_date_and_name"><a href="#"><?=htmlspecialchars($row['login'])?></a> | <?=format_date($row['date'])?></div>
		</div> 
		<div class="the_full_area"></div> 
		<div class="material_about">
			<?=htmlspecialchars($row['about'])?>
		</div>
	</div>
	<br/><br/><br/>
</div>

<div class="the_full_area"></div> 
<div class="material_author"> 
	<div class="material_author_avatar"> 
		<img src="http://youexpert.ru/skins/default/design/img/no_avatar.jpg" alt=""/> 
	</div>
	<div class="material_author_about"> 
		<h1>Автор: <a href="#"><?=htmlspecialchars($row['login'])?></a></h1>
		<p>Об авторе</p>
	</div>
	<div class="the_full_area"></div> 
</div> 
<div class="material_content">
	// ЗДЕСЬ НУЖНО НАПИСАТЬ УСЛОВИЕ ЕСЛИ ПЕРЕМЕННАЯ FINAL существуето то..
<? if (isset($FINAL)) {?>
	<h1>Предварительный просмотр финального итога</h1> 
	<p class="material_image">
		<a href="<?=nl2br(bb_tag(htmlspecialchars($row['final'])))?>"><img width="600" height="400" src="<?=nl2br(bb_tag(htmlspecialchars($row['final'])))?>" alt=""/></a>
	</p>
	// ДО СЮДА
<?}?>
	<p><?=nl2br(bb_tag(htmlspecialchars($row['content'])))?>
		<br/><br/>
		<a href="<?=htmlspecialchars($row['download'])?>">Скачать</a>
		<a href="<?=htmlspecialchars($row['demo'])?>">Демо</a>
	</p>
</div>
<?}?>
Я не претендую на абсолютную правильность сделанного, я хотел показать суть.
 

dr-sm

Новичок
прекрасное начинание!
хочу заметить тока, имхо, такой синтаксис лучше смотрится
PHP:
<? foreach ($blabla): ?>
<omg></omg>
<? if ($omg): ?>
<omg></omg>
<? endif; ?>
<? endforeach;?>
 

ps2007

Новичок
>> такой синтаксис лучше смотрится
это дело вкуса и стандартов на оформление кода :)
 

Xeon303

Новичок
Согласен с dr-sm, так лучше. Не надо будет искать к чему относится закрывающая скобка.
 

Фанат

oncle terrible
Команда форума
проблема в том, что новички это все равно не читают.
а конкретно тому, которому это преднозначалось - и вовсе... не в прок.
 

AmdY

Пью пиво
Команда форума
dr-sm
это заблуждение, не знаю кому пришла идея, что это синтаксис для шаблонов. когда много кода попробуй определить где конец блока, а при { } навёл и нормальный редактор тебе подсветил пару. не проверял, но с фолдингом тоже возможны проблемы. в примере только явно не хватает mysql_escape_string, что у новичков и не только является частой ошибка. в офтопе кто-то crm рекомендовал, наполненную дырами для инъекций, да ещё с выводом ошибок.
 

Духовность™

Продвинутый новичок
хочу заметить тока, имхо, такой синтаксис лучше смотрится
+1

намного лучше

-~{}~ 30.01.10 19:26:

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

PHP:
<?}?>
 

Фанат

oncle terrible
Команда форума
давайте предыдущее сообщение будет последним на эту исключительно важную тему, как писать скобочки.
 

Sigorma

Новичок
PHP:
// получаем данные, никакого вывода
$result = query(
    "SELECT * FROM `".PREFIX."posts` WHERE `id` = '".intval($id)."'ORDER BY`id`DESC",__FILE__,__LINE__
    );
есть мнение что тут не хватает демонстративной проверки результата функции mysql_query вместо использования самописных библиотек.
 

SiMM

Новичок
Как минимум __FILE__ и __LINE__ там лишние, тем более при использовании самописных библиотек - [m]debug_backtrace[/m] работает ещё с 4.3, т.е. лет 7 как.
 

Фанат

oncle terrible
Команда форума
Нет, не лишние. Это просто устаревший подход, да.
debug_backtrace тут тоже, в сущности, не нужен - trigger_error сам проставит штампик
 
Сверху