[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Разбор кода
Zzepish
Вот я написал код! Помогите мне пожалуйста сделать его качественным!


<?php
error_reporting(E_ALL);
$db=mysql_connect('localhost','root','');
mysql_select_db('work');
mysql_set_charset('UTF-8');

//Переменные
$summa=1;
$time=time();
$self_url=$_SERVER['PHP_SELF'];
$ip=$_SERVER['REMOTE_ADDR'];

$nik=isset($_POST['nik']) ? mysql_real_escape_string(trim($_POST['nik'])): null;

$text=isset($_POST['text']) ? mysql_real_escape_string($_POST['text']) : null;


if(isset($_POST['btn']) && !empty ($nik) && !empty($text)){

$user=mysql_query("SELECT * FROM `user` WHERE `ip`='$ip'");
$user_info=mysql_fetch_assoc($user);

if($user_info['time']+3<$time){

if($user_info['money']-$summa>=0){

$summa=$user_info['money']-$summa;

mysql_query("UPDATE `user` SET `money`='$summa',`time`='$time'");

mysql_query("INSERT INTO `mssges` (`nik`,`msg`) VALUES('$nik','$text')") or die(mysql_error());

header('Location:'.$self_url);
}

else{

$message='У вас недосточно денег на отсылку письма';}
}


else

$message='Вы можете отправлять сообщение не чаще чем раз в 3 секунды!';

}
?>
<!DOCTYPE html>
<
head>
<
meta charset="utf=8">
</
head>
<
body>
<?php
if(isset($message)) echo $message;
?>
<form method="post">
<
input type="next" name="nik" placeholder="Введите ваш ник"></br>
<
textarea cols="40" name="text" rows="5" placeholder="Введите текст"></textarea></br>
<
input type="submit" name="btn" value="Отправить"><hr>
<?php
$msges=mysql_query('SELECT * FROM `mssges`');

while($all_msges=mysql_fetch_assoc($msges)){
$nik_out=htmlspecialchars($all_msges['nik']);
$msg_out=nl2br($all_msges['msg']);
echo '<b>'.$nik_out.'</b> пишет:</br>'.$msg_out.'</br>';
}

?>



:(



Спустя 5 минут, 54 секунды (28.05.2012 - 15:07) redreem написал(а):
начни с форматирования

Спустя 20 минут, 28 секунд (28.05.2012 - 15:27) Zzepish написал(а):
redreem
А по подробней, если не сложно плз laugh.gif

Спустя 5 минут, 8 секунд (28.05.2012 - 15:32) redreem написал(а):

Спустя 1 минута, 2 секунды (28.05.2012 - 15:33) inpost написал(а):
Для начала форматирование, то есть каждая вложенность - +4 пробела, кроме этого:
http://www.google.ru/#hl=ru&newwindow=1&sc...iw=1920&bih=987
Читаем всю первую страницу.

Далее 2 ошибки, которые я назвал + вывод ошибок, не исправлено.

Спустя 2 минуты, 48 секунд (28.05.2012 - 15:36) ADiel написал(а):
О каком качестве можно говорить в данном случае?
Это малюсенький код, написанный на коленке.

for(;$all_msges=mysql_fetch_assoc($msges);) # в топку


- $msg_out=str_replace("\n",' </br> ',htmlspecialchars($all_msges['msg']));
+
$msg_out=nl2br(htmlspecialchars($all_msges['msg']));



echo '<b>'.$nik_out.'</b> пишет:</br>'.$msg_out.'</br>';


?>
<b><?php echo $nik_out ?></b> пишет: </br>
<?php echo $msg_out ?>
</br>
<?php

И в этом роде. Вообще я бы подготовил массив с данными, а потом вывел бы в шаблоне.
Кстати, вот пример if

<?php if($param): ?>
<div>Param true </div>
<?php else : ?>
<div> Тут куча html, можно забыть, что открыт if или запутаться в скобках.. Потому я использую такой синтаксис </div>
<?php endif; ?>

Спустя 55 секунд (28.05.2012 - 15:37) inpost написал(а):

Спустя 6 минут, 33 секунды (28.05.2012 - 15:44) Zzepish написал(а):
Кстати- зачем форматировать? если для меня итак текст читаем?

Спустя 47 секунд (28.05.2012 - 15:44) ADiel написал(а):
header("Location:$self_url");

А что мне мешает позволить браузеру не послушаться этого заголовка?
В данном случае, ничего страшного не произойдет, а в других случаях таким способом даже авторизацию можно обойти

Цитата
Кстати- зачем форматировать? если для меня итак текст читаем?

Для других.
Потом придется дописать еще 500 строк к этому коду. Посмотрел бы я, какой он читаемый.

Спустя 2 минуты, 53 секунды (28.05.2012 - 15:47) inpost написал(а):
Zzepish
Когда напишешь код среднего уровня, а потом вернёшься к нему через 1-2 недели, то поймешь разницу. Я, бывало, один скрипт на 700-800 строк переписывал и дополнял раз 6 или 7. Постоянно меняя способ защиты и дополнял функционал, в такой каше ты будешь путаться ещё пол года, пока поймешь где что и к кому... Красиво и удобно пишешь - это ты себя уважаешь.

Спустя 59 минут, 21 секунда (28.05.2012 - 16:47) Zzepish написал(а):
inpost
Я так и не понял, чем тебе $btn не нравится? ведь по умолчанию- кнопка нажата, значит $btn==1

Спустя 46 минут, 18 секунд (28.05.2012 - 17:33) inpost написал(а):
Ты вывод ошибок включил? Посмотрел, что тебе WARNING сразу написали? ПРавильное программирование - программирование БЕЗ ОШИБОК!
У тебя код на 70% состоит из Попова, кстати.

Спустя 3 часа, 38 минут, 46 секунд (28.05.2012 - 21:12) Zzepish написал(а):
Котеров вообще советовал через $_REQUEST делать! но я не согласен!

Спустя 16 минут, 11 секунд (28.05.2012 - 21:28) inpost написал(а):
Zzepish
Нет, он как раз писал о том, что надо распределять четко всё. Просто в примерах показывал $_REQUEST.

Спустя 8 минут, 27 секунд (28.05.2012 - 21:36) Zzepish написал(а):
inpost
еще он писал, что нужно юзать так @$_REQUEST[], ибо он не зависит ни от GET-формы, ни от POST! Но тогда можно будет в адресной строке задать значение!

Спустя 4 минуты, 44 секунды (28.05.2012 - 21:41) Игорь_Vasinsky написал(а):
Цитата
@$_REQUEST[...]
зло

if(isset($_REQUEST[...])) 
- лучик надежды

Спустя 5 минут, 1 секунда (28.05.2012 - 21:46) Zzepish написал(а):
Игорь_Vasinsky
А разница? Так просто идет проверка! Но через адресную строку ее все-равно реально задать) хотя тогда можно сделать проверку на значение, но это уже детали и лишний код! Все-равно не понимаю! Чем проверка на $btn (при нажатии значение ведь==1) не понравилось inpost

Спустя 1 минута, 50 секунд (28.05.2012 - 21:48) Игорь_Vasinsky написал(а):
я тебе о чём сказал щас? нотисы и варнинги не глушат слобаками, от них нужно избавлятся путём отладки, а не тупо прятать.

и не более.

Спустя 7 секунд (28.05.2012 - 21:48) inpost написал(а):
Свою голову на плечах ещё никто не отменял.
Хотя покажи, где конкретно он именно так рекомендовал? Назови страницу из книги smile.gif

Спустя 3 минуты, 46 секунд (28.05.2012 - 21:52) Zzepish написал(а):
inpost
5 сек! Только найти дай =)

Спустя 4 минуты, 48 секунд (28.05.2012 - 21:57) Zzepish написал(а):
Во! Страница 205! Описание $_REQUEST

Спустя 3 минуты, 19 секунд (28.05.2012 - 22:00) Zzepish написал(а):
А! Я понял! Ты намекаешь на юзание action="какой_то_скрипт.php"! Но не удобно же(

Спустя 2 минуты, 45 секунд (28.05.2012 - 22:03) inpost написал(а):
Zzepish
195, почитай про собаку, там как раз говорится её вред!

Спустя 6 минут, 19 секунд (28.05.2012 - 22:09) Zzepish написал(а):
inpost
Я знаю! Читал: только юзать, если не повлечет абсолютно никаких действий за собой не заданная переменная! Или как-то так!

Спустя 1 минута, 59 секунд (28.05.2012 - 22:11) Zzepish написал(а):
может делать через is_set($_POST['btn'])?

Спустя 59 секунд (28.05.2012 - 22:12) inpost написал(а):
вообще надо в 99% случаев отказаться от собаки, за исключением с коннектом к БД.
Не is_set, а isset

Спустя 1 минута, 44 секунды (28.05.2012 - 22:14) Игорь_Vasinsky написал(а):
бинго!

Спустя 2 минуты, 57 секунд (28.05.2012 - 22:17) Zzepish написал(а):
смотрите! я так понимаю:
isset($_POST['btn']) дает TRUE при нажатии!
Но if($btn)- тоже, ведь, TRUE при нажатии!

Спустя 5 минут, 34 секунды (28.05.2012 - 22:22) Zzepish написал(а):
Я подредактировал код! На на 2 переменные все-равно выдает ошибки! Я их отметил. И что с ними делать(

Спустя 2 минуты, 24 секунды (28.05.2012 - 22:25) inpost написал(а):
У тебя есть переменная: $_POST['nik'], зачем её дублировать в $nik ? Это лишнее и неправильно. Сразу работай непосредственно с $_POST['nik'] и т.д. далее.
Стоит лишь изменять в том случае, если с переменной будешь проводить операции в дальнейшем.

Спустя 11 секунд (28.05.2012 - 22:25) Игорь_Vasinsky написал(а):
Цитата
isset($_POST['btn']) дает TRUE при нажатии!
Но if($btn)- тоже, ведь, TRUE при нажатии!


да.

Цитата
$text=mysql_real_escape_string($_POST['text']); //Ошибка


ну тернарная операция же есть

$var = isset($var) ? filter($var) : null;

Спустя 1 минута, 47 секунд (28.05.2012 - 22:27) Zzepish написал(а):
Игорь_Vasinsky
я гдет видел такое, но не придал значение (подумал, что писал идиот):

if(isset($_POST['nik'])) $nik=$_POST['nik'];

В такой вариации!

Спустя 3 минуты, 50 секунд (28.05.2012 - 22:30) Игорь_Vasinsky написал(а):
biggrin.gif в моём журнале прочти про тернарный оператор.

Спустя 6 секунд (28.05.2012 - 22:30) Zzepish написал(а):
Вот! Подправил! ошибки не выдает!

Спустя 12 минут, 58 секунд (28.05.2012 - 22:43) Zzepish написал(а):
Игорь_Vasinsky
ПОдправил код согласно твоему примеру)

Спустя 6 минут, 6 секунд (28.05.2012 - 22:50) Игорь_Vasinsky написал(а):
молодец!

Спустя 2 минуты, 52 секунды (28.05.2012 - 22:52) Zzepish написал(а):
ПРи проверке на error_reporting(E_ALL); ошибок не выдает!

Спустя 2 минуты, 31 секунда (28.05.2012 - 22:55) Zzepish написал(а):
Игорь_Vasinsky
Теперь код не совсем нубский?)

Спустя 20 минут, 53 секунды (28.05.2012 - 23:16) inpost написал(а):
До сих пор нубский, ты же меня проигнорировал.

Спустя 3 минуты, 7 секунд (28.05.2012 - 23:19) Zzepish написал(а):
inpost
Если че- не учитывай форматирование!

Спустя 1 час, 58 минут, 10 секунд (29.05.2012 - 01:17) Zzepish написал(а):
inpost
Дык в дальнейшем ее и проще пихать куданить! Разве не так? И короче, и у добней

Спустя 50 минут, 17 секунд (29.05.2012 - 02:07) inpost написал(а):
Удобнее объекты или их представление в виде группировки в массивы по смыслу, но никак не независимые переменные, которые ничем друг с другом не связаны вовсе.
Лишняя переменная - лишняя ячейка в памяти занята, зачем забивать бесполезным?
Если я по коду пишу $_POST['key'] - значит я сразу вижу, что данные пришли из формы, а не откуда-то из левого скрипта!

Спустя 5 часов, 28 минут, 37 секунд (29.05.2012 - 07:36) YVSIK написал(а):
Цитата (Zzepish @ 28.05.2012 - 22:12)
Котеров вообще советовал через $_REQUEST делать! но я не согласен!

хМ)) что-то уж выражение знакомое )) где-то оно уже проскакивало))
подобным, Шариков, Карла Маркса критиковал
вообщем как говорил прохфесор Преаброженский
в топку их обоих , и Котерова и Маркса этого )) в ТОПКУ biggrin.gif

Спустя 5 минут, 28 секунд (29.05.2012 - 07:41) YVSIK написал(а):
Цитата (Zzepish @ 29.05.2012 - 00:19)
inpost
Если че- не учитывай форматирование!

а если не игнорировать? все-же а написать так ))

<?php 
<?php
error_reporting(E_ALL);
$db = mysql_connect('localhost', 'root', '');
mysql_select_db('work');
mysql_set_charset('UTF-8');
//Переменные
$summa = 1;
$time = time();
$self_url = $_SERVER['PHP_SELF'];
$ip = $_SERVER['REMOTE_ADDR'];
$nik = isset($_POST['nik']) ? mysql_real_escape_string(strip_tags(trim($_POST['nik']))) : null;
$text = isset($_POST['text']) ? mysql_real_escape_string($_POST['text']) : null;

if(isset($_POST['btn']) && !empty($nik) && !empty($text))
{
$user = mysql_query("SELECT * FROM `user` WHERE `ip`='$ip'");
$user_info = mysql_fetch_assoc($user);

if($user_info['time'] + 3 < $time)
{

if($user_info['money'] - $summa > = 0)
{
$summa = $user_info['money'] - $summa;
mysql_query("UPDATE `user` SET `money`='$summa',`time`='$time'");
mysql_query("INSERT INTO `mssges` (`nik`,`msg`) VALUES('$nik','$text')") or die(mysql_error());
header("Location:$self_url");
}
else
{
$message = 'У вас недосточно денег на отсылку письма';
}
}

else
{
$message = 'Вы можете отправлять сообщение не чаще чем раз в 3 секунды!';
}
}

?>
<!DOCTYPE html>
<
head>
<
meta charset="utf=8">
</
head>
<
body>
<?php
if(isset($message))
{
echo $message;
}
?>
<form method="post">
<
input type="next" name="nik" placeholder="Введите ваш ник"></br>
<
textarea cols="40" name="text" rows="5" placeholder="Введите текст"></textarea></br>
<
input type="submit" name="btn" value="Отправить"><hr>
<?php $msges = mysql_query('SELECT * FROM `mssges`');
while($all_msges = mysql_fetch_assoc($msges))
{
$nik_out = htmlspecialchars($all_msges['nik']);
$msg_out = nl2br($all_msges['msg']);
echo '<b>'. $nik_out .'</b> пишет:</br>'. $msg_out .'</br>';
}
?>

и ещё сравнивать их, разница будет очевина)

Спустя 20 минут, 10 секунд (29.05.2012 - 08:02) twin написал(а):
Ты считаешь, что этого достаточно?
$user = mysql_query("SELECT * FROM `user` WHERE `ip`='$ip'");


А тут что strip_tags() делает?
  $nik = isset($_POST['nik']) ? mysql_real_escape_string(strip_tags(trim($_POST['nik']))) : null;

Спустя 31 минута, 55 секунд (29.05.2012 - 08:34) Игорь_Vasinsky написал(а):
mysql_query("UPDATE `user` SET `money`='$summa',`time`='$time'");
mysql_query("INSERT INTO `mssges` (`nik`,`msg`) VALUES('$nik','$text')") or die(mysql_error());


понять не могу... какая строка обделена вниманием? первая или вторая? :lol:

Спустя 11 часов, 50 минут, 2 секунды (29.05.2012 - 20:24) Zzepish написал(а):
Игорь_Vasinsky
А обязательно везде лепить or die ?

Спустя 2 минуты, 23 секунды (29.05.2012 - 20:26) Zzepish написал(а):
twin
$user = mysql_query("SELECT * FROM `user` WHERE `ip`='$ip'");

это ж я просто для примера влепил) а что?

Спустя 43 секунды (29.05.2012 - 20:27) Zzepish написал(а):
twin
strip_tags() -чтоб теги в нике вырезать! Не?

Спустя 50 секунд (29.05.2012 - 20:27) Kuliev написал(а):
Цитата (Zzepish @ 29.05.2012 - 21:24)
Игорь_Vasinsky
А  обязательно везде лепить or die ?

Если не хочешь писать постоянно OR DIE() создай обертку для MYSQL_QUERY и будет тебе счастье...

Спустя 31 минута, 17 секунд (29.05.2012 - 20:59) Zzepish написал(а):
Kuliev
Дык оно ж никак не влияет, только на вывод ошибок!

Спустя 3 минуты, 38 секунд (29.05.2012 - 21:02) Игорь_Vasinsky написал(а):
вот я и спрашиваю - тебе нужен вывод ошибок? у тя в одной строке есть в другой нет. понятно? ты либо отлаживаешь либо нет.

Спустя 17 минут, 37 секунд (29.05.2012 - 21:20) Zzepish написал(а):
Игорь_Vasinsky
да я одну, скорей сего проворонил просто biggrin.gif

Спустя 14 часов, 23 минуты, 22 секунды (30.05.2012 - 11:43) Zerstoren написал(а):
Цитата (Zzepish @ 29.05.2012 - 18:20)
Игорь_Vasinsky
да я одну, скорей сего проворонил просто  :D

по этому стоит делать обертки.
К примеру:

function query($sql, $debug = false) {
$result = mysql_query($sql);
if($debug && !$result) die(mysql_error());
return $result
}

При публикации проекта, $debug, как значение по умолчанию оставляем false, а при разработке в true.

В общем такое малюсенькое абстрагирование.

Спустя 6 минут, 24 секунды (30.05.2012 - 11:50) Zzepish написал(а):
Zerstoren
Эт ООП уже так?

Спустя 26 минут, 15 секунд (30.05.2012 - 12:16) Ser18 написал(а):
Нет

Спустя 53 минуты, 27 секунд (30.05.2012 - 13:09) Zzepish написал(а):
Ser18
А абстрагирование не к ООП относится?

Спустя 7 минут, 49 секунд (30.05.2012 - 13:17) inpost написал(а):
Zzepish
При чём тут функции к ООП? ООП - это наследие между классами и распределение их на цепочки. Даже сами классы по отдельности не будут никаким ООП.

Спустя 23 минуты, 51 секунда (30.05.2012 - 13:41) Ramzil_Nixon написал(а):
<?php
error_reporting(E_ALL);
$db=mysql_connect('localhost','root','');
mysql_select_db('work');
mysql_set_charset('UTF-8');
//Переменные
$summa=1;
$time=time();
$self_url=$_SERVER['PHP_SELF'];
$ip=$_SERVER['REMOTE_ADDR'];
$nik=isset($_POST['nik']) ? mysql_real_escape_string(strip_tags(trim($_POST['nik']))): null;
$text=isset($_POST['text']) ? mysql_real_escape_string($_POST['text']) : null;
if(isset($_POST['btn']) && !empty ($nik) && !empty($text))
{
$user=mysql_query("SELECT * FROM `user` WHERE `ip`='$ip'");
$user_info=mysql_fetch_assoc($user);
if($user_info['time']+3<$time)
{
if($user_info['money']-$summa>=0)
{
$summa=$user_info['money']-$summa;
mysql_query("UPDATE `user` SET `money`='$summa',`time`='$time'");
mysql_query("INSERT INTO `mssges` (`nik`,`msg`) VALUES('$nik','$text')") or die(mysql_error());
header("Location:".$self_url);
}
else
{
$message='У вас недосточно денег на отсылку письма';
}
}

else
$message='Вы можете отправлять сообщение не чаще чем раз в 3 секунды!';
}
?>
<!DOCTYPE html>
<
head>
<
meta charset="utf=8">
</
head>
<
body>
<?php if(isset($message)) echo $message; ?>
<form method="post">
<
input type="next" name="nik" placeholder="Введите ваш ник"></br>
<
textarea cols="40" name="text" rows="5" placeholder="Введите текст"></textarea>
</
br>
<
input type="submit" name="btn" value="Отправить">
<
hr>
<?php $msges=mysql_query('SELECT * FROM `mssges`');
while($all_msges=mysql_fetch_assoc($msges))
{
$nik_out=htmlspecialchars($all_msges['nik']);
$msg_out=nl2br($all_msges['msg']);
echo '<b>'.$nik_out.'</b> пишет:</br>'.$msg_out.'</br>';
}
?>

Спустя 2 минуты, 48 секунд (30.05.2012 - 13:44) twin написал(а):
Цитата (Zzepish @ 29.05.2012 - 17:26)
twin
$user = mysql_query("SELECT * FROM `user` WHERE `ip`='$ip'");

это ж я просто для примера влепил) а что?

Ну если для примера и безопасность не волнует, то да.

Спустя 1 минута, 16 секунд (30.05.2012 - 13:45) twin написал(а):
Цитата (Zzepish @ 29.05.2012 - 17:27)
twin
strip_tags() -чтоб теги в нике вырезать! Не?

Чем "теги" то помешали? А если у меня такой ник - <twin>?

Спустя 3 минуты, 32 секунды (30.05.2012 - 13:49) inpost написал(а):
Ramzil_Nixon
У тебя те же ошибки, что выше говорились... особенно с моей стороны.

Спустя 1 час, 3 минуты, 20 секунд (30.05.2012 - 14:52) Zzepish написал(а):
twin
А! Согласен. Прогнал
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.