Как правильно писать код?

Anatolyi

Новичок
Как правильно писать код?

Добрый день.
Вот тут у меня появился вопрос, о правильности написания скриптов.
Пример того, как я это делаю представле в внизу...
Я просто всегда все писал таким образом. Все вроде как работает, все норм,
и у меня пока-что больших трудностей с таким подходом не возникает.

С чего открыл эту тему, так это, после того как написал скрипт одному человеку на
форуме, и выложил его в форум... Тут пришел какой-то ЗНАТОК и говорит, что мне надо
читать книгу, как все пишется. Возможно это и так, но книгу я читал, и было это давно
и после этого опыт кое-какой имел с написанием скриптов на PHP.

Я сразу полез на webscript и глянул какие там скрипты в каталогах, первый попавшийся оказался:
****://www.webscript.ru/cgi-bin/jump.cgi?ID=1104
Написан он по той же самой технологии.


Подскажите плз, как надо?



Как все делаю я:
(просто показываю сам смысл, накидал одному парню, которому нужно было че-то подобное)

PHP:
<?
$set_login = "admin";     // Логин для входа в админку :))
$set_password = "admin";  // Пароль туда же

if(!isset($_POST[send]) && !isset($_GET[admin])) // Выводим форму для обратной связи
{
print "
<form action='$PHP_SELF' method=post>
Ф.И.О.: <input type=text name=name><br>
Пожелания: <textarea name=desire></textarea><br>
Телефон: <input type=text name=telephone><br>
<input type=submit name=send value='Заказать'>
</form>
";
}

if(isset($_POST[send])) // Пишем сообщение в файл
{

$text = "Ф.И.О.: $_POST[name]<br>Пожелания: $_POST[desire]<br>Телефон: $_POST[telephone]<br><br>\n";

$file = @fopen("base.php","a");
fwrite($file,$text);
fclose($file);

print "Заказ добавлен успешно!";
}


if(isset($_GET[admin])) // Работаем с админкой...
{

if(isset($_POST[log]) && isset($_GET[clear])) // Очищаем базу по требованию
{
$file = @fopen("base.php","w");
fwrite($file,"");
fclose($file);
}


// Если подошел пароль, выводим базу
if(isset($_POST[log]) && $_POST[login]==$set_login && $_POST[password] == $set_password)
{
$file = fopen("base.php","r");
if(filesize("base.php") != 0)
$text = fread($file,filesize("base.php"));
fclose($file);

print "
<form action='$PHP_SELF?admin&clear' method=post>
<input type=hidden name=log>
<input type=submit name=clear value='Очистить базу'>
</form>
";
print $text;
}
else // Если не подошел, заново требуем логин и пароль
unset($_POST[log]);


// Запрашиваем логин и пароль
if(!isset($_POST[log]))
print "
<form action='$PHP_SELF?admin' method=post>
Логин: <input type=text name=login><br>
Пароль:  <input type=password name=password><br>
<input type=submit name=log value='Войти'>
</form>
";
}

?>
 

Кром

Новичок
Вообще, да. Код - отстой.

>Подскажите плз, как надо?

Больше писать кода и читать умных книг. В конце концов это придет.
 

Anatolyi

Новичок
Кром
То есть методика правильная?
А в чем отстой заключается, сказать можете?
 

Toshka

Новичок
у меня лично нет ни строчки прямого вывода на страничку(echo, print и т.п.). все в шаблоне... по моему, более правильный подход. и удобней гораздо в конечном итоге
 

Кром

Новичок
>То есть методика правильная?

Какая методика?

>А в чем отстой заключается, сказать можете?

Ну как бы это сказать... во всем. Общее впечатлений ужасное. Криво в каждой строчке. Обычно такой код сам программист переписывает полностью заново где-то через год-два.
Т.е. еще раз повторяю, что с опытом все придет.
 

Sky_Flex

Новичок
ой как я вовремя... :)
вот кусок кода (просто copy/past):
PHP:
		// если форма уже заполнена
		if (isset($_GET['log'])) {
			// проверим данные пользователя
			$login = substr(addslashes($_POST['login']), 0,20);
			$pass = $_POST['pass'];
			// если есть ошибки => выведем
			$er = 0;
			if (empty($login))  {  $content .= _ERROR_ELOGIN;   $er++;  }
			if (empty($pass))	{  $content .= _ERROR_EPASS;    $er++;  }
			if ($_SESSION['image_cod'] != $_POST['image_cod'])
								{  $content .= _ERROR_NOIMAGE;   $er++;  }
			// если ошибок нет, продолжаем							 
			if ($er == 0) {
				$pwd = md5($md5.substr(addslashes($pass),0,20)); echo $pwd;
				$activ_ = mysql_query("SELECT id_user FROM user WHERE login = '".$login."' AND pwd = '".$pwd."' AND active = '1'");
				$activ = mysql_num_rows($activ_);
				$res =mysql_fetch_array($activ_);
				// если логин/пароль верны
				if ($activ > 0) {
					// установим сесию, что пользователь авторизировался
					$_SESSION['login'] = 1;
					$_SESSION['user_name'] = $login;
					$_SESSION['user_id'] = $res['id_user'];
					// перенаправим пользователя в кабинет
					header('Location:h++p://'.$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF'].'?q=kabinet');
				}
				else   $content .= _ERROR_NO_LOG_PWD;
			}
		}
отстой ?
книжки читал и читаю, скрипты пишу - номне самому почему то кажется что много что не так. много?
 

Кром

Новичок
Этот фрагмент лучше, по крайне мере отступы есть. :)
Но тоже нужно работать. Нет проверок на существование переменных в массиве _POST, проверок ошибок при работе с базой. Какие-то непонятные
echo $pwd;
Location:h++p
лишние
$er++
и т.д.
 

Sky_Flex

Новичок
echo $pwd; - я же сказал - просто copy/past - это тестил когда :)

про $er - это так определяю есть ли ошибка. чтобы если есть - вывести ее. (Хочется все ошибки показать на этой же странице. - может и не правильно делаю, но другого способа - к сожалению не знаю.)
хочется шаблонности - а классы и шаблонизаторы типа смарти - так и не вкурил :(
а про книгу - спасибо, как будут деньги - конечно куплю - но... там про пхп ведь нет... и чет не понял - там все книга как правильно строить и писать Читабельный код? прикольно...

P.S.: а почему вложенность более 3-х недопустима?, ну т.е. лучге не допускать?

P.S.S: и проверки на существование в масиве пост... они есть - только сюда это не скопировал: типо так:
PHP:
if (!empty($_POST['login']) AND !empty($_POST['pass'])) {

}
P.S.S.S: книги может и не те читал :) я имел ввиду про пхп читаю книжки - вот эти:
1. http://covers.allshops.ru/x/x_/x_1/x_19944big.jpg - прочитал
2. http://covers.allshops.ru/p/pa/pal/pal349big.jpg - дочитываю
3. http://covers.allshops.ru/p/pa/pal/pal853big.jpg - прочитал
 

master_x

Pitavale XXI wieku
Sky_Flex
P.S.S: и проверки на существование в масиве пост... они есть - только сюда это не скопировал: типо так:

if (!empty($_POST['login']) AND !empty($_POST['pass'])) {

}
это не проверка на существование. смотри isset
 

Sky_Flex

Новичок
нет это то я понимаю... но зачем мне проверять на существование?(блин сам себе противоречу :) не так я в верхнем посте выразился.) я проверяю заполнил ли ее пользователь... isset пройдет и просто если переменная установленна... или переданна в Пост - пустой.
 

zarus

Хитрожопый макак
Автор оригинала: master_x
Sky_Flex
!empty() - это не проверка на существование. смотри isset
:confused: бредите?
empty($value) = (!isset($value) || $value == null {пустое значение})

-~{}~ 27.01.06 12:47:

PHP:
$activ = mysql_num_rows($activ_);
$res =mysql_fetch_array($activ_);
// если логин/пароль верны
if ($activ > 0) { ... }
Вот эта часть довольно растянута - можно сделать все одной строкой. Единственное условие - запрос должен быть составлен корректно и не возвращать ошибку исполнения:
PHP:
if (false != ($res = mysql_fetch_array($activ_))) {
  .... // здесь будет доступна переменная $res
}
-~{}~ 27.01.06 12:52:

PHP:
if (...) {
}
elseif (...) {
}
else {
}
Даже разработчики PHP для библиотеки PEAR рекомендуют использовать конструкцию
PHP:
if (...) {
} elseif (...) {
} else {
}
З.Ы. А вообще о "стандартах правильного написания кода" на PHP можно почитать на сайте PEAR в описании для разработчиков (developers). По крайней мере, я стараюсь им следовать.
 
Сверху