Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Избранное > Библиотека самых бесполезных кусков кода


Автор: IZ@TOP 23.8.2006, 09:47
Недавно было обсуждение в одной теме - обсуждалось сколько можно валяться под столом глядя в чужой код.
Эта тема будет посвящена всему тому что пишут некоторые особоодаренные индивидумы. И/или начинающие пыхеры.
Прошу господ программистов постить, все что подвернется под руку, заслуживающее, так или иначе, постинга в данной теме. Желательно с комментарием о причине его ужасающей бесполезности, проблем безопасности и просто плохого стиля программирования.

Для новичков это будет основой для оценки своего кода.

Я пожалуй начну первым. Следующий код мне прислал человек, которого я собеседовал для своей старой работы на з.п. приблезительно близкой к 1000 у.е.:
Код

<?php
/**
 * File name admin.php
 * @author anonymous
 * 
 * Данный код предоставлен только в познавательных целях. 
 * Ни кто не несет ответственности за проблемы возникшие в результате
 * его использования.
 */


/**
 * Аффтар! Ну скажи мне, что это за непонятные инклуды и вызовы функций? 
 * Для чего?
 */

#include ('index2.php');
#include ('news.php');
#include ('shubl.php');
#shablon();
#addnews();
#shablon2();'



/**
 * Код конечно закоментен, но видно register_globals стоит в on))
 * Запомните дети - ни когда и ни при каких обстоятельствах не пользуйтесь 
 * авторегистрацией глобальных переменных или их симуляторами вроде extract'a!
 */
/*
  if ($HTTP_SERVER_VARS["argc"] != 0)
  {
   header("location: $PHP_SELF");
   exit;
  }
  */
  //global $pasfile;
//echo $pasfile;

/**
 * Замечательная конструкция! Естественно у меня на FreeBSD где расположен мой сервер
 * пароль от админки будет лежать в корне на диске C:! И естественно если он не найден
 * я умолчу об этом факте дабы ни кто не знал почему на странице пусто!
 */
if ($pasfile == 0) {  
   if (!file_exists ("c:\\password.txt"))
     {
//      header ("Location: invalpas.html");
      exit;
     }
   if ($fp = fopen("c:\\password.txt", "r")) 
     {
         
     /**
      * Какая однако красота! Тут без поллитра не разберешься что человек хотел
      * сделать! Возможно проще использовать explode, file? :p
      */
     while (feof($fp) == 0) 
      { 
       $line = trim(fgets($fp,1000)); 
       $userPass = split(",", $line); 
       if (($userPass[0] == $username) and ($userPass[1] == $password)) 
        { 
        $file =  fopen("user.txt", "w");
         fwrite ($file,$username);
 $pasfile = 1;
   $spisok="none";  
   $title="Панель администрирования сайта";
   $head="Панель администрирования сайта";
   
   /**
    * А вот это вообще супер! Кто ни будь слышал что такое switch? А то я что-то подзабыл!
    */
   
 if (@$link=="addnews") { 
   require ('index2.html');
   require ('admin/news.html');
   require ('shubl.html');
 }
 if (@$link=="adduser") { 
   require ('index2.html');
   require ('admin/adduser.html');
   require ('shubl.html');
 } 
  if (@$link=="") { 
   require ('index2.html');
   require ('admin/pan.html');
   require ('shubl.html');
 } 
 
   exit;
        } 
      }
      
 /**
  * Ну конечно эти комментарии многословно описывают все что нам 
  * необходимо знать о коде! Пусть они и встретились нам разок -
  * пустячек, а приятно)))
  */
 
//** invalid username / password entered. **
  //    include ('invalpas.html');
   $pasfile = 0;
   header ("Location: invalpas.html");
     exit;
    }
} else
{
   $spisok="none";  
   $title="Панель администрирования сайта";
   $head="Панель администрирования сайта";
   
   
 /**
  * Ну и опять таки, я все ни как не могу вспомнить зачем
  * иногда пользуюсь кострукцией switch/case! ХЭЛП!
  */
 if (@$link=="addnews") { 
   require ('index2.html');
   require ('admin/news.html');
   require ('shubl.html');
 }
 if (@$link=="adduser") { 
   require ('index2.html');
   require ('admin/adduser.html');
   require ('shubl.html');
 } 
  if (@$link=="") { 
   require ('index2.html');
   require ('admin/pan.html');
   require ('shubl.html');
 } 
}
/*global $login;
if ($login == "ok"){
require ('index2.html');
require ('admin/addnews.html');
require ('shubl.html');
}
else
{
require ('invalpas.html');
}
*/
?>


Немного комментария к коду:
1. Ужасный стиль программирования.
2. Проблемы безопасности.
3. Если его и оптимизировать, то только переписав заново. Уж больно не оптимально.

И еще ссылка по теме http://forum.vingrad.ru/index.php?showtopic=108540. Собственно благодаря ему и радилась идея создать данный топик.

Автор: Greendrake 23.8.2006, 09:55
Думаю, любому более-менее опытному программисту сложно удержаться от пристрастной и субъективной оценки чужого кода. Зачастую превалирует "написано не так как пишу я, а я пишу наиболее оптимально, поэтому этот код - так себе".

Строгих и доказанных правил написания кода не существует - это творческий процесс (я не имею ввиду соблюдение читаемости, отступы и комментарии - это безусловно). Поэтому я убеждён, что придираться нужно в основном к работе кода. 

Автор: IZ@TOP 23.8.2006, 10:09
Greendrake, полностью поддерживаю! Именно этот вопрос я и хотел затронуть в данной теме! Стоит хотя бы пройтись по ссылке в теме.

Автор: Mal Hack 23.8.2006, 11:18
Цитата(Greendrake @  23.8.2006,  10:55 Найти цитируемый пост)
Думаю, любому более-менее опытному программисту сложно удержаться от пристрастной и субъективной оценки чужого кода. Зачастую превалирует "написано не так как пишу я, а я пишу наиболее оптимально, поэтому этот код - так себе".

Не согласен. Опытному кодер нормально воспримет код, если он однообразный и написан по человечески. А привычки (мелочи всякие) это можно и пропустить.

Цитата(Greendrake @  23.8.2006,  10:55 Найти цитируемый пост)
Строгих и доказанных правил написания кода не существует - это творческий процесс (я не имею ввиду соблюдение читаемости, отступы и комментарии - это безусловно). Поэтому я убеждён, что придираться нужно в основном к работе кода. 

Вообще, ыроде был рекомендательный ISO...

Автор: smartov 23.8.2006, 11:49
Цитата(Mal Hack @  23.8.2006,  10:18 Найти цитируемый пост)
Опытный кодер нормально воспримет код, если он однообразный и написан по-человечески

Поддерживаю.

Одно дело творчество. Другое дело незнание/неумение/нежелание. Творчество в программировании должно быть логически обосновано. А я не могу найти логического, стилистического или иного обоснования для кода, которым мне достался. Например:

Код

   if (!empty($_SESSION['loa_sortfield']))
      {
      if ($_SESSION['loa_sortfield'] == "loa_title")
         {
         $orderby = "obj_title";
         $ordertype = "text";
         }
      elseif ($_SESSION['loa_sortfield'] == "loa_type")
         {
         $orderby = "object";
         $ordertype = "text";
         }
      elseif ($_SESSION['loa_sortfield'] == "loa_action")
         {
         $orderby = "action";
         $ordertype = "text";
         }
      elseif ($_SESSION['loa_sortfield'] == "loa_date")
         {
         $orderby = "adate";
         $ordertype = "text";
         }
      elseif ($_SESSION['loa_sortfield'] == "loa_time")
         {
         $orderby = "atime";
         $ordertype = "text";
         }
      elseif ($_SESSION['loa_sortfield'] == "loa_user")
         {
         $orderby = "login";
         $ordertype = "text";
         }
      elseif ($_SESSION['loa_sortfield'] == "loa_ip")
         {
         $orderby = "ip_address";
         $ordertype = "text";
         }
      }


switch не только сэкономит тут место, но и сделает код читаемее и саппортнее. Я уж молчу о постоянно повторяющейся строке $ordertype = "text"; 7 раз! Одна и та же строка! Это у них творчество такое?

Или еще из перлов того проекта.
Для выставления прав на файлы, господа предыдущие "кодеры" использовали shell_exec('chmod....') (при том что есть родная функция), ну ладно, это дело такое, НО если вы уж так любиете shell_exec то зачем (?!) было для копирования директории со всем содержимым в другое место писать функцию (!) рекурсивную естественно, вместо того, чтобы просто и банально, как раз тут и заюзать shell_exec('cp...'). 
Мы иногда думаем, что может им за строчки кода платили.....

Или файлы, на 20 кб без (внимание!) без хотя бы единственной функции (!), в которых без поллитра не разобраться. То есть файл - одна большая процедура. При чем написана так, что идет if ($_POST...) то 200 строк кода, else - еще 200... В некоторых файлах вложенность скобок доходила до 8 (!).

Так же господа "те кодеры" постоянно перед самым выходом из файла, или перед директивой exit, ансетили по 5-8 переменок. В каждом месте вызова exit. В общем о каком творчестве речь? Это просто дилетанство.

Добавлено @ 12:00 
IZ@TOP
Код

      * сделать! Возможно просто explode(',', file_get_contents(...)) :p
      */
     while (feof($fp) == 0) 
      { 
       $line = trim(fgets($fp,1000)); 
       $userPass = split(",", $line); 


Просто explode не поможет. Нужно читать построчно.
Это если сначала $f =  file(...) а потом foreach ($f...) ... explode, то да.

Автор: IZ@TOP 23.8.2006, 12:38
Цитата(smartov @  23.8.2006,  12:49 Найти цитируемый пост)
Просто explode не поможет. Нужно читать построчно.
Это если сначала $f =  file(...) а потом foreach ($f...) ... explode, то да.

Естественно!))) Щас поправим)))

Автор: Vaulter 23.8.2006, 13:13
ну что ж..вверили мне систему сайтов. и не смешно мне было отнюдь smile
для начала:
Код

function mailsender($a, $b, $c, $d)
{
$head      = "Content-type: text/html; charset=windows-1251\n";
$head     .= "From: ************\n";
$head     .= "Reply-To: ***********\n";
    
if ($a == "1") 
{
$query333 = "select * from dec_mess where typemess='1'";
$result333 = mysql_query($query333);
$arw333 = mysql_fetch_array($result333);
if ($d != "0") { $ddd = 500+$d; $subj = "Номер заказа: $ddd\r\n"; $mess = "Номер заказа: $ddd\r\n"; }
else { $subj = ""; $mess = ""; }
$subj .= $arw333['subj']; 
$mess .= $arw333['mess']; 
}
elseif ($a == "2") 

$query333 = "select * from dec_mess where typemess='2'";
$result333 = mysql_query($query333);
$arw333 = mysql_fetch_array($result333);
if ($d != "0") { $ddd = 500+$d; $subj = "Номер заказа: $ddd\r\n"; $mess = "Номер заказа: $ddd\r\n"; }
else { $subj = ""; $mess = ""; }
$subj .= $arw333['subj']; 
$mess .= $arw333['mess'];
}
elseif ($a == "3") 

$query333 = "select * from dec_mess where typemess='3'";
$result333 = mysql_query($query333);
$arw333 = mysql_fetch_array($result333);
if ($d != "0") { $ddd = 500+$d; $subj = "Номер заказа: $ddd\r\n"; $mess = "Номер заказа: $ddd\r\n"; }
else { $subj = ""; $mess = ""; }
$subj .= $arw333['subj']; 
$mess .= $arw333['mess'];
}
elseif ($a == "4") 
{
$query333 = "select * from dec_mess where typemess='4'";
$result333 = mysql_query($query333);
$arw333 = mysql_fetch_array($result333);
if ($d != "0") { $ddd = 500+$d; $subj = "Номер заказа: $ddd\r\n"; $mess = "Номер заказа: $ddd\r\n"; }
else { $subj = ""; $mess = ""; }
$subj .= $arw333['subj']; 
$mess .= $arw333['mess']; 
}


  if ($c == "0")
  {
$query = "select email from dec_users where type_user='$b'";
$result = mysql_query($query);
  while ($arw = mysql_fetch_array($result))
  {
  $to = "$arw[email]";
  mail($to, $subj, $mess, $head);
  }
  }
  else
  {
  $query = "select id_kto_vip from dec_orders where id='$c'";
  $result = mysql_query($query);
  $arw = mysql_fetch_array($result);
  $query = "select email from dec_users where id='$arw[id_kto_vip]'";
  $result = mysql_query($query);
  $arw = mysql_fetch_array($result);
  $to = $arw['email'];
  mail($to, $subj, $mess, $head);
  }
  
}

прониклись? человеку деньги за это платились..... скотина...

Автор: smartov 23.8.2006, 13:18
Цитата(Vaulter @  23.8.2006,  12:13 Найти цитируемый пост)
($a, $b, $c, $d)

Убило наповал smile

Автор: Vaulter 23.8.2006, 13:54
гы, ща кстати заметил вот еще, как он его вызывал:
Код

mailsender("2", "2", "0", "$idorder");

ей богу не придумал! smile такое невозможно придумать smile

Добавлено @ 13:55 
а это я называю "упорный тип":
Код

  echo "день: <select name=dat_d><option value=1>1<option value=2>2<option value=3>3<option value=4>4<option value=5>5<option value=6>6<option value=7>7<option value=8>8<option value=9>9<option value=10>10<option value=11>11<option value=12>12<option value=13>13<option value=14>14<option value=15>15<option value=16>16<option value=17>17<option value=18>18<option value=19>19<option value=20>20<option value=21>21<option value=22>22<option value=23>23<option value=24>24<option value=25>25<option value=26>26<option value=27>27<option value=28>28<option value=29>29<option value=30>30<option value=31>31</select>";
  echo " месяц: <select name=dat_m><option value=1>1<option value=2>2<option value=3>3<option value=4>4<option value=5>5<option value=6>6<option value=7>7<option value=8>8<option value=9>9<option value=10>10<option value=11>11<option value=12>12</select>";
  echo " год: <select name=dat_y><option value=2006>2006<option value=2007>2007<option value=2008>2008<option value=2009>2009<option value=2010>2010<option value=2011>2011<option value=2012>2012</select><br>";



Добавлено @ 13:57 
из разряда тоже "упорного типа" smile
Код

if ($a['type_user']==6) $query = "select * from dec_orders where status = '3' OR status = '4' OR status='7' OR status = '9' OR status = '10' OR status='11' OR status='12' OR status='16' ORDER BY id DESC";
else $query = "select * from dec_orders where status = '3' OR status = '4' OR status='7' OR status = '9' OR status = '10' OR status='11' OR status='12' OR status='16' AND id_kto='$_SESSION[auth]' ORDER BY id DESC";


Автор: IvanB 23.8.2006, 19:34
Цитата(Vaulter @  23.8.2006,  13:54 Найти цитируемый пост)
а это я называю "упорный тип":
Выделить всёкод PHP
1:
2:
3:
    
  echo "день: <select name=dat_d><option value=1>1<option value=2>2<option value=3>3<option value=4>4<option value=5>5<option value=6>6<option value=7>7<option value=8>8<option value=9>9<option value=10>10<option value=11>11<option value=12>12<option value=13>13<option value=14>14<option value=15>15<option value=16>16<option value=17>17<option value=18>18<option value=19>19<option value=20>20<option value=21>21<option value=22>22<option value=23>23<option value=24>24<option value=25>25<option value=26>26<option value=27>27<option value=28>28<option value=29>29<option value=30>30<option value=31>31</select>";
  echo " месяц: <select name=dat_m><option value=1>1<option value=2>2<option value=3>3<option value=4>4<option value=5>5<option value=6>6<option value=7>7<option value=8>8<option value=9>9<option value=10>10<option value=11>11<option value=12>12</select>";
  echo " год: <select name=dat_y><option value=2006>2006<option value=2007>2007<option value=2008>2008<option value=2009>2009<option value=2010>2010<option value=2011>2011<option value=2012>2012</select><br>";


Добавлено @ 13:57 
из разряда тоже "упорного типа" smile
Выделить всёкод PHP
1:
2:
    
if ($a['type_user']==6) $query = "select * from dec_orders where status = '3' OR status = '4' OR status='7' OR status = '9' OR status = '10' OR status='11' OR status='12' OR status='16' ORDER BY id DESC";
else $query = "select * from dec_orders where status = '3' OR status = '4' OR status='7' OR status = '9' OR status = '10' OR status='11' OR status='12' OR status='16' AND id_kto='$_SESSION[auth]' ORDER BY id DESC";

А вот в этом как раз ничего плохого не вижу.... )
Хотя переносы всё же стоит иногда делать.

Автор: skyboy 23.8.2006, 23:46
IvanB, "плохого" может и нету здесь... но циклы, циклы-то на кой ляд придумали?!

Автор: Vaulter 24.8.2006, 08:55
IvanB, ну и плохо, что не видишь ничего плохого! smile

Автор: IZ@TOP 24.8.2006, 11:19
IvanB, спешал фо ю эта тема была создана, коль ничего страшного в том коде не видишь)))

Записался в программисты?
Будь так добр писать красиво!
Чтоб понятно и с комментом,
Безопасно для системы,
Чтоб потом не засмеяли,
И к пробабкам не послали!

Автор: Vaulter 24.8.2006, 11:36
IZ@TOP, жжошь! smile
продолжая тему.

Код

<table border="0" width="100%" cellspacing="0" cellpadding="0">
    <tr>
        <td width="50%" class="lksss" valign="top">
<br>
<?
include("dblib.inc.php");
$query = "select * from baza where cat='1'";
$result = mysql_query($query);
$nm = mysql_num_rows($result);
?>
<a href="./wapcat_1.html">Бухучёт, статистика</a> <small>(<?=$nm?>)</small>
<?
$query = "select * from baza where cat='2'";
$result = mysql_query($query);
$nm = mysql_num_rows($result);
?>
<a href="./wapcat_2.html">Иностранные языки</a> <small>(<?=$nm?>)</small>
<?
$query = "select * from baza where cat='3'";
$result = mysql_query($query);
$nm = mysql_num_rows($result);
?>
<a href="./wapcat_3.html">История</a> <small>(<?=$nm?>)</small>
<?
$query = "select * from baza where cat='4'";
$result = mysql_query($query);
$nm = mysql_num_rows($result);
?>
<a href="./wapcat_4.html">Медицина</a> <small>(<?=$nm?>)</small>
<?
$query = "select * from baza where cat='5'";
$result = mysql_query($query);
$nm = mysql_num_rows($result);
?>
<a href="./wapcat_5.html">Педагогика</a> <small>(<?=$nm?>)</small>
<?
$query = "select * from baza where cat='6'";
$result = mysql_query($query);
$nm = mysql_num_rows($result);
?>
<a href="./wapcat_6.html">Политология</a> <small>(<?=$nm?>)</small>
<?
$query = "select * from baza where cat='7'";
$result = mysql_query($query);
$nm = mysql_num_rows($result);
?>
<a href="./wapcat_7.html">Программирование</a> <small>(<?=$nm?>)</small>
<?
$query = "select * from baza where cat='8'";
$result = mysql_query($query);
$nm = mysql_num_rows($result);
?>
<a href="./wapcat_8.html">Психология</a> <small>(<?=$nm?>)</small>
<?
$query = "select * from baza where cat='9'";
$result = mysql_query($query);
$nm = mysql_num_rows($result);
?>
<a href="./wapcat_9.html">Разное</a> <small>(<?=$nm?>)</small>
<?
$query = "select * from baza where cat='10'";
$result = mysql_query($query);
$nm = mysql_num_rows($result);
?>
<a href="./wapcat_10.html">Русский язык и литература</a> <small>(<?=$nm?>)</small>
<?
$query = "select * from baza where cat='11'";
$result = mysql_query($query);
$nm = mysql_num_rows($result);
?>
<a href="./wapcat_11.html">Социология</a> <small>(<?=$nm?>)</small>
<?
$query = "select * from baza where cat='12'";
$result = mysql_query($query);
$nm = mysql_num_rows($result);
?>
<a href="./wapcat_12.html">Технические</a> <small>(<?=$nm?>)</small>
<?
$query = "select * from baza where cat='13'";
$result = mysql_query($query);
$nm = mysql_num_rows($result);
?>
<a href="./wapcat_13.html">Философия</a> <small>(<?=$nm?>)</small>
<?
$query = "select * from baza where cat='14'";
$result = mysql_query($query);
$nm = mysql_num_rows($result);
?>
<a href="./wapcat_14.html">Финансы и кредит</a> <small>(<?=$nm?>)</small>
<?
$query = "select * from baza where cat='15'";
$result = mysql_query($query);
$nm = mysql_num_rows($result);
?>
<a href="./wapcat_15.html">Химия и физика</a> <small>(<?=$nm?>)</small>
<?
$query = "select * from baza where cat='16'";
$result = mysql_query($query);
$nm = mysql_num_rows($result);
?>
<a href="./wapcat_16.html">Экономика</a> <small>(<?=$nm?>)</small>
<?
$query = "select * from baza where cat='17'";
$result = mysql_query($query);
$nm = mysql_num_rows($result);
?>
<a href="./wapcat_17.html">Юриспруденция</a> <small>(<?=$nm?>)</small>
</td>
        <td width="50%" class="lksss" valign="top">
<b>Шпаргалки школьникам:</b><br>
<?
include("dblib.inc.php");
$query = "select * from baza where cat='18'";
$result = mysql_query($query);
$nm = mysql_num_rows($result);
?>
<a href="./wapcat_18.html">Литература</a> <small>(<?=$nm?>)</small>
<?
$query = "select * from baza where cat='19'";
$result = mysql_query($query);
$nm = mysql_num_rows($result);
?>
<a href="./wapcat_19.html">Математика</a> <small>(<?=$nm?>)</small>
<?
$query = "select * from baza where cat='20'";
$result = mysql_query($query);
$nm = mysql_num_rows($result);
?>
<a href="./wapcat_20.html">История</a> <small>(<?=$nm?>)</small>
<?
$query = "select * from baza where cat='21'";
$result = mysql_query($query);
$nm = mysql_num_rows($result);
?>
<a href="./wapcat_21.html">Человек и общество</a> <small>(<?=$nm?>)</small>
<?
$query = "select * from baza where cat='22'";
$result = mysql_query($query);
$nm = mysql_num_rows($result);
?>
<a href="./wapcat_22.html">Биология</a> <small>(<?=$nm?>)</small>
<?
$query = "select * from baza where cat='23'";
$result = mysql_query($query);
$nm = mysql_num_rows($result);
?>
<a href="./wapcat_23.html">Иностранные языки</a> <small>(<?=$nm?>)</small>
<?
$query = "select * from baza where cat='24'";
$result = mysql_query($query);
$nm = mysql_num_rows($result);
?>
<a href="./wapcat_24.html">Русский язык</a> <small>(<?=$nm?>)</small>
<?
$query = "select * from baza where cat='25'";
$result = mysql_query($query);
$nm = mysql_num_rows($result);
?>
<a href="./wapcat_25.html">Информатика</a> <small>(<?=$nm?>)</small>
<?
$query = "select * from baza where cat='26'";
$result = mysql_query($query);
$nm = mysql_num_rows($result);
?>
<a href="./wapcat_26.html">Право</a> <small>(<?=$nm?>)</small>
<?
$query = "select * from baza where cat='27'";
$result = mysql_query($query);
$nm = mysql_num_rows($result);
?>
<a href="./wapcat_27.html">Обществознание</a> <small>(<?=$nm?>)</small>
<?
$query = "select * from baza where cat='28'";
$result = mysql_query($query);
$nm = mysql_num_rows($result);
?>
<a href="./wapcat_28.html">География</a> <small>(<?=$nm?>)</small>
<?
$query = "select * from baza where cat='29'";
$result = mysql_query($query);
$nm = mysql_num_rows($result);
?>
<a href="./wapcat_29.html">Природоведение</a> <small>(<?=$nm?>)</small>
</td>
</tr>
</table>

Автор: smartov 24.8.2006, 12:59
млиин.. 29 раз... упорный тип, без вопросов... он наверное себе макросы в редакторе писал smile

Автор: Darhazer 24.8.2006, 13:27
Мой любимий кусок кода, не помню где его видел, но сразу в WTF отправил
Код
if (unlink("../news_photos/smalls/".$filename_old) == TRUE) {
     unlink("../news_photos/smalls/".$filename_old);
 }


P.S. это из винграда:
http://forum.vingrad.ru/index.php?showtopic=47964&hl=

Автор: IZ@TOP 24.8.2006, 13:31
Darhazer, ЖЖЕШЬ НЕ ПАДЕЦКИ! У нас весь офис лежал!!!

Добавлено @ 13:33 
Мне тут рассказывали про комменты в коде, значит идет какой-то if, и там коммент:
Код


if(что-то != чего-то) { // По идее логика программы сюда доходить не должна
   $_variable = что-то;
}

Автор: Mal Hack 24.8.2006, 17:18
Цитата(IZ@TOP @  24.8.2006,  14:31 Найти цитируемый пост)
Мне тут рассказывали про комменты в коде, значит идет какой-то if, и там коммент:

Вспомнилось. На вовебе одно ламо код JS не рабочий дало. Код содержал комментарий:
Цитата
<!--Dummy comment to hide code from non-JavaScript browsers-->

Автор: smartov 24.8.2006, 18:07
Darhazer, ааааа smile ууужос smile smile smile

Автор: Ignat 24.8.2006, 18:34
Цитата(smartov @  24.8.2006,  13:59 Найти цитируемый пост)
млиин.. 29 раз... упорный тип, без вопросов... он наверное себе макросы в редакторе писал

Хуже... Я такого кода, наверное, километров 10 перефакторил. Так пишут поклонники копипаста.

Автор: vasac 24.8.2006, 18:53
Не далее, как вчера, наткнулся на код:
Код

$a = addslashes( stripslashes( addslashes( $str ) ) );


То ли чел покурил не того.
То ли я не понимаю всей глубинной сути.

Автор: Vreden 24.8.2006, 21:20
Так ребятки, знаю код безобразный, признаюсь мой, упорный тип, да, знаю, не кричите.
Код

<?
$login = $_POST['login'];
$parol = $_POST['parol'];
$parol_povtor = $_POST['parol_povtor'];
if (preg_match('~[^qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNMéöóêåíãøùçõúôûâàïðîëäæýÿ÷ñìèòüáþ¸ÉÖÓÊÅÍÃØÙÇÕÚÔÛÂÀÏÐÎËÄÆÝß×ÑÌÈÒÜÁÞ¨012345678 9]+~', $login))
{echo "<html><body bgcolor='black' text='green'><p align='center'> Îøèáêà. <br> Âû èñïîëüçîâàëè çàïðåùåííûå ñèìâîëû â èìåíè ïåðñîíàæà. Ïîïðîáóéòå åùå ðàç. <br><a href='registr.html'> Åù¸ ðàç </></p></body></html>";}
else
  {if (is_numeric($login[0]))
  {echo "<html><body bgcolor='black' text='green'><p align='center'> Îøèáêà. <br> Èìÿ âàøåãî ïåðñîíàæà íà÷èíàåòñÿ ñ öèôðû. Ïîïðîáóéòå åùå ðàç. <br><a href='registr.html'> Åù¸ ðàç </></p></body></html>";}
  else
    {if ($parol != $parol_povtor)
    {echo "<html><body bgcolor='black' text='green'><p align='center'> Îøèáêà. <br> Ââåäåííûå âàìè ïàðîëè íå ñîâïàäàþò. Ïîïðîáóéòå åùå ðàç. <br><a href='registr.html'> Åù¸ ðàç </></p></body></html>";}
    else
      {if ($login[0] == "")
      {echo "<html><body bgcolor='black' text='green'><p align='center'> Îøèáêà. <br> Ââåäèòå ïîæàëóéñòà Âàø ëîãèí. <br><a href='registr.html'> Åù¸ ðàç </></p></body></html>";}
      else
        {if ($parol[0] == "")
        {echo "<html><body bgcolor='black' text='green'><p align='center'> Îøèáêà. <br> Ââåäèòå ïîæàëóéñòà Âàø ïàðîëü. <br><a href='registr.html'> Åù¸ ðàç </></p></body></html>";}
        else
          {if ($login[0] == " ")
          {echo "<html><body bgcolor='black' text='green'><p align='center'> Îøèáêà. <br> Ëîãèí íå ìîæåò íà÷èíàòüñÿ ñ ïðîáåëà. <br><a href='registr.html'> Åù¸ ðàç </></p></body></html>";}
          else
            {$leng_login = strlen($login);
            {if ($leng_login < 3)
            {echo "<html><body bgcolor='black' text='green'><p align='center'> Îøèáêà. <br> Ëîãèí ñîñòîèò ìåíåå, ÷åì èç òðåõ ñèìâîëîâ. <br><a href='registr.html'> Åù¸ ðàç </></p></body></html>";}
            else
              {$leng_parol = strlen($parol);
              {if ($leng_parol < 8)
              {echo "<html><body bgcolor='black' text='green'><p align='center'> Îøèáêà. <br> Ïàðîëü ñîñòîèò ìåíåå, ÷åì èç âîñüìè ñèìâîëîâ. <br><a href='registr.html'> Åù¸ ðàç </></p></body></html>";}
              else
                {mysql_connect("localhost","root")or die (mysql_error());
                mysql_select_db("test") or die (mysql_error());
                $del = mysql_query (sprintf("select * from `user` where  login='%s'",$login)) or die (mysql_error());
                $del= mysql_fetch_array($del);
                if ($del[1]== $login)
                  {echo "<html><body bgcolor='black' text='green'><p align='center'> Îøèáêà. <br> Òàêîé ëîãèí óæå ñóùåñòâóåò. Ïðèäóìàéòå ïîæàëóéñòà äðóãîé. <br><a href='registr.html'> Åù¸ ðàç </></p></body></html>";}
                  else
                  {session_start();
                  session_register("loginuser");
                  session_register("paroluser");
                  $loginuser = $login;
                  $paroluser = $parol;
                  #setcookie ('loginuser', $login);
                  #setcookie ('paroluser', $parol);
                  header("location: registr2.html");}}}}}}}}}}}
?>

Переделайте плиз так, чтобы была та же самая логика проги, но выглядела правильно с точки зрения этой темы. И вообще скажите плиз, что не так?

Автор: jzZ 24.8.2006, 22:36
Код

}}}}}}}}}}}

Это вообще что такое  smile ))

Добавлено @ 22:38 
Весь код сущий кошмар, это я еще не говорю о стиле кодирования...

Автор: Ignat 25.8.2006, 08:40
Код

if (preg_match('~[^qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNMéöóêåíãøùçõúôûâàïðîëäæýÿ÷ñìèòüáþ¸ÉÖÓÊÅÍÃØÙÇÕÚÔÛÂÀÏÐÎËÄÆÝß×ÑÌÈÒÜÁÞ¨012345678 9]+~', $login))

Ой, мама... Где я?
Цитата(Vreden @  24.8.2006,  22:20 Найти цитируемый пост)
И вообще скажите плиз, что не так? 

Вообще, что здесь так?

Автор: Vreden 25.8.2006, 10:04
нууууууууууууу и кто-нибудь исправит?  smile 

Автор: Ignat 25.8.2006, 10:05
Цитата(Vreden @  25.8.2006,  11:04 Найти цитируемый пост)
нууууууууууууу и кто-нибудь исправит? 

Вероятно, нет. Здесь переписывать надо  smile 

Автор: Vreden 25.8.2006, 10:09
ну тогда больше код я здесь не буду показывать

Автор: Ignat 25.8.2006, 10:12
Цитата(Vreden @  25.8.2006,  11:09 Найти цитируемый пост)
ну тогда больше код я здесь не буду показывать 

Не верный ответ. Перепиши сам по правилам, высказанным в этой теме, а затем опубликуй. Тогда советы посыпятся как из ведра  smile 
А переписывать никто не будет.

Автор: Vreden 25.8.2006, 10:44
знал бы я как, все пишут мол это не так, это не так, а примеров кода, как сделать это не так - так!, не дают

Автор: Ignat 25.8.2006, 11:00
Тогда начнем:
1. С какой целью перечислены все алфавитно-цифровые символы в регулярке?
2. Для чего служит оператор || , это я не увидел у вас в коде, но он там напрашивается.
3. Откуда навыки комментировать знаком # ?
4. Если есть повторы кода, то почему не используются функции?


Автор: smartov 25.8.2006, 11:14
Vreden, у тебя похерилась кодировка. Ну и чтоли твои кракозябры раскодировать? Раскодировать не буду. Посему код со своими комментами.

Код

<?

function print_and_Die($messageHTML)
{
    echo $messageHTML;
    exit;
}

$login = $_POST['login'];
$parol = $_POST['parol'];
$parol_povtor = $_POST['parol_povtor'];

if (preg_match('/[^\w\d]+/', $login)) //non alphanumeric symbols in login
    print_and_Die("<html><body bgcolor='black' text='green'><p align='center'> Îøèáêà. <br> Âû èñïîëüçîâàëè çàïðåùåííûå ñèìâîëû â èìåíè ïåðñîíàæà. Ïîïðîáóéòå åùå ðàç. <br><a href='registr.html'> Åù¸ ðàç </></p></body></html>");

if (is_numeric($login[0])) //only numeric symbols in login
    print_and_Die("<html><body bgcolor='black' text='green'><p align='center'> Îøèáêà. <br> Èìÿ âàøåãî ïåðñîíàæà íà÷èíàåòñÿ ñ öèôðû. Ïîïðîáóéòå åùå ðàç. <br><a href='registr.html'> Åù¸ ðàç </></p></body></html>");

if ($parol != $parol_povtor) //passwords mismatch
    print_and_Die("<html><body bgcolor='black' text='green'><p align='center'> Îøèáêà. <br> Ââåäåííûå âàìè ïàðîëè íå ñîâïàäàþò. Ïîïðîáóéòå åùå ðàç. <br><a href='registr.html'> Åù¸ ðàç </></p></body></html>");

if (trim($login[0]) == "") //login is empty
    print_and_Die("<html><body bgcolor='black' text='green'><p align='center'> Îøèáêà. <br> Ââåäèòå ïîæàëóéñòà Âàø ëîãèí. <br><a href='registr.html'> Åù¸ ðàç </></p></body></html>");

if ($parol[0] == "") // password is empty
    print_and_Die("<html><body bgcolor='black' text='green'><p align='center'> Îøèáêà. <br> Ââåäèòå ïîæàëóéñòà Âàø ïàðîëü. <br><a href='registr.html'> Åù¸ ðàç </></p></body></html>");

if (strlen($login) < 3) //login length is less 3
    print_and_Die("<html><body bgcolor='black' text='green'><p align='center'> Îøèáêà. <br> Ëîãèí ñîñòîèò ìåíåå, ÷åì èç òðåõ ñèìâîëîâ. <br><a href='registr.html'> Åù¸ ðàç </></p></body></html>");

if (strlen($parol) < 8) //minimal passwd length = 8
    print_and_Die("<html><body bgcolor='black' text='green'><p align='center'> Îøèáêà. <br> Ïàðîëü ñîñòîèò ìåíåå, ÷åì èç âîñüìè ñèìâîëîâ. <br><a href='registr.html'> Åù¸ ðàç </></p></body></html>");

mysql_connect("localhost","root") or die(mysql_error());
mysql_select_db("test") or die (mysql_error());

$del = mysql_query('select * from `user` where  login="'.$login.'"') or die (mysql_error());
$del= mysql_fetch_array($del);

if ($del[1] == $login) //such user exists
    print_and_Die("<html><body bgcolor='black' text='green'><p align='center'> Îøèáêà. <br> Òàêîé ëîãèí óæå ñóùåñòâóåò. Ïðèäóìàéòå ïîæàëóéñòà äðóãîé. <br><a href='registr.html'> Åù¸ ðàç </></p></body></html>");

session_start();

//S_M_A_R_T_O_V COMMENT: SINCE PHP 4 THERE IS NO NEED IN session_register
//session_register("loginuser"); 
//session_register("paroluser");

//S_M_A_R_T_O_V COMMENT: STOP USING IDIOTIK REGISTER GLOBALS!!!!!!!!!!!!!!!!!!!!!!!!!
//$loginuser = $login;
//$paroluser = $parol;
//S_M_A_R_T_O_V COMMENT: ZACHEM HRANIT PAROL V SESSII??????

$_SESSION['loginuser'] = $login;
//$_SESSION['paroluser'] = $parol;
header("location: registr2.html");
?>

Автор: skyboy 25.8.2006, 11:28
блоки "<html><body>" и прочие части ты печатаешь в любом случае. так зачем тогда их в каждую ветвь if'a вставлять?

Автор: smartov 25.8.2006, 11:40
skyboy, угу smile но дальше оптимизячить меня задолбало. Я б вообще все не так писал

Автор: Ignat 25.8.2006, 11:42
Лёх, к запросу:
Код

$del = mysql_query('SELECT `login` FROM `user` WHERE `login`="'.$login.'"') or die (mysql_error());




Автор: smartov 25.8.2006, 11:59
Ignat, дырка в секьюрити smile а что к запросу smile

Автор: Ignat 25.8.2006, 12:33
Цитата(smartov @  25.8.2006,  12:59 Найти цитируемый пост)
а что к запросу 

В смысле SQL тоже по правилам оформлять надо.

еще порефакторил, взял за основу код smartov
Код

<?php

/**
* There is no include config file. So defines is used.
*/
//! Mysql
DEFINE( 'MYSQL_HOST', 'localhost' );
DEFINE( 'MYSQL_USER', 'root' );
DEFINE( 'MYSQL_PASS', '' );
DEFINE( 'MYSQL_DB', 'test' );

//! Sequrity
DEFINE( 'MIN_PASS_LEN', 8 );
DEFINE( 'MIN_LOGIN_LEN', 3 )

//! Errors
DEFINE( 'ERR_SHORT_PASS', 1<<0 );
DEFINE( 'ERR_SHORT_LOGIN', 1<<1 );
DEFINE( 'ERR_NON_ALPHA', 1<<2 );
DEFINE( 'ERR_ONLY_NUM', 1<<3 );
DEFINE( 'ERR_PASS_MISSMATCH', 1<<4 );
DEFINE( 'ERR_EMPTY_LOGIN', 1<<5 );
DEFINE( 'ERR_PASS_EMPTY', 1<<6 );

$messages = array();
$messages[ERR_SHORT_PASS] = "I^?e`a'e^a`. <br /> Ia`?i^eu n~i^n~o`i^e`o` i`a*i'a*a*, ?a*i` e`c, a^i^n~ui`e` n~e`i`a^i^ei^a^. <br /><a href='registr.html'> A*u`? ?a`c,";
$messages[ERR_SHORT_LOGIN] = "I^?e`a'e^a`. <br /> Ei^a~e`i' n~i^n~o`i^e`o` i`a*i'a*a*, ?a*i` e`c, o`?a*o~ n~e`i`a^i^ei^a^. <br /><a href='registr.html'> A*u`? ?a`c,";
$messages[ERR_NON_ALPHA] = "I^?e`a'e^a`. <br /> A^u^ e`n~ii^euc,i^a^a`ee` c,a`i?a*u`a*i'i'u^a* n~e`i`a^i^eu^ a^ e`i`a*i'e` ia*?n~i^i'a`?a`. Ii^i?i^a'o'e'o`a* a*u`a* ?a`c,. <br /><a href='registr.html'> A*u`? ?a`c,";
$messages[ERR_ONLY_NUM] = "I^?e`a'e^a`. <br /> E`i`y a^a`?a*a~i^ ia*?n~i^i'a`?a` i'a`?e`i'a`a*o`n~y n~ oe`o^?u^. Ii^i?i^a'o'e'o`a* a*u`a* ?a`c,. <br /><a href='registr.html'> A*u`? ?a`c, ";
$messages[ERR_PASS_MISMATCH] = "I^?e`a'e^a`. <br /> A^a^a*aa*i'i'u^a* a^a`i`e` ia`?i^ee` i'a* n~i^a^ia`aa`?o`. Ii^i?i^a'o'e'o`a* a*u`a* ?a`c,. <br /><a href='registr.html'> A*u`? ?a`c,";
$messages[ERR_EMPTY_LOGIN] = "I^?e`a'e^a`. <br /> A^a^a*ae`o`a* ii^?a`eo'e'n~o`a` A^a`? ei^a~e`i'. <br /><a href='registr.html'> A*u`? ?a`c,";
$messages[ERR_PASS_EMPTY] = "I^?e`a'e^a`. <br /> O`a`e^i^e' ei^a~e`i' o'?a* n~o'u`a*n~o`a^o'a*o`. I?e`ao'i`a`e'o`a* ii^?a`eo'e'n~o`a` a?o'a~i^e'. <br /><a href='registr.html'> A*u`? ?a`c,";
$messages[ERR_LOGIN_EXIST] = 'Text lost by Ignat =)';

function print_error( $messageHtml )
{
    open_body();
    echo $messageHtml;
    close_body();
}

function open_body( )
{
    echo '<html><body bgcolor="black" text="green"><p align="center">';
}

function close_body( )
{
    echo '</p></body></html>';
}

function test_login_duplicate( $login )
{
    $con = mysql_connect( MYSQL_HOST, MYSQL_USER, MYSQL_PASS ) or die( mysql_error() );
    mysql_select_db( MYSQL_DB ) or die ( mysql_error() );
    $res = mysql_query( 'SELECT `login` FROM `user` WHERE `login`="'.$login.'"') or die (mysql_error());
    $num = mysql_num_rows( );
    mysql_free_result( $res );
    mysql_close( $con );
    return ( $num == 0 ) ? true : false;
}

$login = $_POST['login'];
$parol = $_POST['parol'];
$parol_povtor = $_POST['parol_povtor'];

$error = 0;
//! non alphanumeric symbols in login
if ( preg_match( '/[^\w\d]+/', $login ) ) 
    $error = ERR_NON_ALPHA;
 //only numeric symbols in login
if ( is_numeric( $login ) )
    $error |= ERR_ONLY_NUM;
//passwords mismatch
if ( $parol != $parol_povtor )
    $error |= ERR_PASS_MISMATCH;
 //login is empty
if ( trim( $login[0] ) == "" ) 
    $error |= ERR_EMPTY_LOGIN
// password is empty
if ( $parol[0] == "" ) 
    $error |= ERR_EMPTY_PASS;
//login length is less MIN_LOGIN_LEN
if ( strlen( $login ) < MIN_LOGIN_LEN ) 
    $error |= ERR_SHORT_LOGIN;
//minimal passwd length MIN_PASS_LEN
if ( strlen( $parol ) < MIN_PASS_LEN ) 
    $error |= ERR_SHORT_PASS;
//such user exists
if ( !test_login_duplicate($login) ) 
    $error |= ERR_LOGIN_EXIST;

if ( $error > 0 )
{
    foreach( $messages as $err_code => $mesage )
        if ( $error&$err_code )
            print_error( $message );

    exit;
}



session_start();
//S_M_A_R_T_O_V COMMENT: SINCE PHP 4 THERE IS NO NEED IN session_register
//session_register("loginuser"); 
//session_register("paroluser");
//S_M_A_R_T_O_V COMMENT: STOP USING IDIOTIK REGISTER GLOBALS!!!!!!!!!!!!!!!!!!!!!!!!!
//$loginuser = $login;
//$paroluser = $parol;
//S_M_A_R_T_O_V COMMENT: ZACHEM HRANIT PAROL V SESSII??????
$_SESSION['loginuser'] = $login;
//$_SESSION['paroluser'] = $parol;
header("location: registr2.html");
?>

Автор: IZ@TOP 25.8.2006, 15:15
Я, если честно, предложил что то вроде этого для обработки данных:

Код

<?php
/**
 * Товарисчи, не пользуемся шорт тегами!
 */

class ValidateTypes {
    const typeNonEmptyString            = 1;
    const typeEmptyString               = 2;
    const typeNonEmptyInt               = 3;
    const typeEmptyInt                  = 4;
    const typeValidName                 = 5;
    const typeValidPassword             = 6;
    const typeValidMail                 = 7;
}

/**
 * Класс валидации данных и типов
 *
 */
abstract class _ValidateDataType {
    
    /**
     * Данные для валидации
     * 
     * @example array(
     *      'field_name1'   => 'mixvalue 1',
     *      'field_nameN'   => '...',
     * )
     *
     * @var array
     */
    protected $__validation_array;
    
    /**
     * Указание типов полей данных для последующей валидации
     *
     * @var array
     */
    protected $__validation_types;
    
    /**
     * Сообщения об ошибках для разных полей данных
     *
     * @example array(
     *      'field_name1'   => 'errormessage 1',
     *      'field_nameN'   => '...',
     * )
     * 
     * @var array
     */
    protected $__validation_errors;
    
    protected $__defined_errors;
    protected $__default_error              = 'Empty data %s';
    protected $__default_type               = 1;
    
    protected function set_errors(array $_validation_errors, $_merge) {
        if($_merge) {
            $this->__validation_errors  = array_merge($this->__validation_errors, $_validation_errors);
        } else {
            $this->__validation_errors  = $_validation_errors;
        }
        return true;
    }
    
    protected function set_array(array $_validation_array, $_merge = false) {
        if($_merge) {
            $this->__validation_array   = array_merge($this->__validation_array, $_validation_array);
        } else {
            $this->__validation_array   = $_validation_array;
        }
        return true;
    }
    
    protected function set_types(array $_validation_types, $_merge = false) {
        if($_merge) {
            $this->__validation_types   = array_merge($this->__validation_types, $_validation_types);
        } else {
            $this->__validation_types   = $_validation_types;
        }
        return true;
    }
    
    protected function __is_failed() {
        return 0 == sizeof($this->__validation_errors);
    }
    
    protected function check($_field) {
        $_checks = (isset($this->__validation_types[$_field])) ?
            $this->__validation_types[$_field] :
            $this->__default_type;
            
        switch ($type) {
            case ValidateTypes::typeEmptyInt : {
                break;
            }
            case ValidateTypes::typeEmptyString : {
                break;
            }
            case ValidateTypes::typeNonEmptyInt : {
                break;
            }
            case ValidateTypes::typeNonEmptyString : {
                break;
            }
            case ValidateTypes::typeValidMail : {
                break;
            }
            case ValidateTypes::typeValidName : {
                // проверяем логин
                break;
            }
            case ValidateTypes::typeValidPassword : {
                // Проверяем пароль
                break;
            }
        }
        
        return true;
    }
    
    protected function __set_error($_field) {
        $this->__defined_errors[] = sprintf(
            ((isset($this->__validation_errors[$_field])) ? 
                $this->__validation_errors[$_field] :
                $this->__default_error), $_field);
        
        return true;
    }
    
    public function get_defined_errors() {
        return $this->__defined_errors;
    }
    
    public function get_first_error() {
        return reset($this->__defined_errors);
    }
    
    public function get_last_error() {
        return end($this->__defined_errors);
    }
    
    public function validate() {
        foreach ($this->__validation_array as $_field => $_data) {
            if(false === $this->check($_field, $_data)) {
                $this->__set_error($_field);
            }
        }
        
        if($this->__is_failed()) {
            return false;
        }
        
        return true;
    }
}

class ValidateDataType extends _ValidateDataType {
    
    public function __construct(array $_validation_array = array(), array $_validation_types = array(), array $_validation_errors) {
        $this->set_array($_validation_array);
        $this->set_types($_validation_types);
        $this->set_errors($_validation_errors);
    }
    
    public function get_defined_errors() {
        echo "Error: " . implode("<br />Error: ", $this->__defined_errors);
    }
}

$validate   = new ValidateDataType(
    $_POST,
    array(
        'login' => array(
            ValidateTypes::typeValidName, 'min' => 3, 'max' => 10,
         ),
        'parol' => array(
            ValidateTypes::typeValidPassword, 'min' => 8, 'max'   => 30,
        )
    ),
    array(
        'login' => 'Неверный формат имени пользователя',
        'login' => 'Неверный формат пароля',
    )
);

if($validate->validate()) {
    $validate->display_errors();
    exit;
}

Автор: Ignat 25.8.2006, 15:36
IZ@TOP, зачОт,  smile 
Вот только одно замечание по коду:
аргументы в объявлениях и вызовах функций и методов класса принято обрамлять пробелами (по крайней мере меня за это "били долго").
Т.е. не так:
Код

    protected function check($_field) {
        $_checks = (isset($this->__validation_types[$_field])) ?
            $this->__validation_types[$_field] :
            $this->__default_type;

а так:
Код

    protected function check( $_field ) {
        $_checks = ( isset( $this->__validation_types[$_field] ) ) ?
            $this->__validation_types[$_field] :
            $this->__default_type;


Автор: IZ@TOP 25.8.2006, 16:23
Ignat, в каждой команде по своему))) Меня щас бьют за большие отступы)) Перучиваюсь по чуть-чуть. 

Конкурс для новичков! Найди в моем коде 1000 и одну ошибку! Ну не тысячу, хотябы пару, так как писалось все быстро и не как рабочий а как теоретический пример. В следующий раз вообще интерфейсы писать буду )

ООП РУЛЕЗ!

Автор: smartov 25.8.2006, 18:46
IZ@TOP, эк однако тебя штыркнуло smile
не хватает только
class HelloWorld.... smile

Автор: faost 25.8.2006, 18:55
Цитата(Ignat @ 25.8.2006,  15:36)
аргументы в объявлениях и вызовах функций и методов класса принято обрамлять пробелами 

А где принято? Очень вдруг интересно стало, откуда такая уверенность "в правильности" такого подхода

Примерно тот же вопрос к IZ@TOP по поводу 
Код

/**
 * Товарисчи, не пользуемся шорт тегами!
 */

Автор: Ignat 25.8.2006, 19:06
Цитата(faost @  25.8.2006,  19:55 Найти цитируемый пост)
откуда такая уверенность "в правильности" такого подхода

Я не претендую на истину. Меня в последнее время на работе много натаскивали на оформление кода. И вот был такой пунктик.
Хотя надо было выразиться так "ИМХО лучше оформлять пробелами". Кстати, я действительно проникся этим.


Автор: Muchenik 25.8.2006, 21:04
Цитата

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

Мне тоже не совсем понятно почему так. В таких случаях  использую стандарт pear:


Код

foo($bar, $baz, $quux);


Из стандартов кодирования PEAR:
Цитата

 Вызовы функций должны быть написаны без отступв между именем функции, открывающей скобкой и первым параметром. Отступы в виде пробела должны присутствовать после каждой запятой в перечислении параметров. Пробелов также не должно быть между последним параметром, закрывающей скобкой и точкой с запятой

Автор: smartov 26.8.2006, 10:39
Я тоже в коде стараюсь использовать PEAR-стандарт.

Автор: Rock 28.8.2006, 18:48
Кстати, не плохая тема, ведь учится как раз надо на чужих ошибках smile
Токо вот было бы лучше, если бы укзав код, вы бы указывали и на недостатки, объяснить, почему это не так. 
Как сделал IZ@TOP в первом посте, оставил свои комменты к когду
А то получается так, что с кода: 
Код

if (unlink("../news_photos/smalls/".$filename_old) == TRUE) {
     unlink("../news_photos/smalls/".$filename_old);
 }

Все знающие смеются smile А новички только затылки чешут, и продолжают делать так, возможно только никому теперь этого не показывая ))
Иначе эту тему смело в Юмор можно, да и только... имхо

Автор: Muchenik 28.8.2006, 20:21

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

if (unlink("../news_photos/smalls/".$filename_old) == TRUE) {
     unlink("../news_photos/smalls/".$filename_old);
 }


unlink - удаляет файл и возвращает TRUE в случае успешного завершения. 

т.е. в данном случае, программист пытается удалить файл повторно. 

Автор: Rock 28.8.2006, 20:27
я вкурсе, но начинающим это может быть неизвестно, ведь все-таки появился такой код, следовательно появится ещё раз, следовательно надо объяснить почему не надо так делать.
А ведь в понимании того человека возможно и было четкое представление, на основе которого код написан был smile
Код

if (unlink("../news_photos/smalls/".$filename_old) == TRUE) {
     unlink("../news_photos/smalls/".$filename_old);
 }

сначало проверка возможно ли это, а потом уже действие smile

Автор: smartov 29.8.2006, 11:29
Rock
Цитата(Rock @  28.8.2006,  19:27 Найти цитируемый пост)
 надо объяснить почему не надо так делать

Не прав ты, камрад. Это функция библиотечная и элементарная как 2х2
Любой новичок/начинающий/незнающий/прочий должен СНАЧАЛА ПРОЧТИТАТЬ МАНУАЛ, особенно после ознакомления с этой темой. RTFM, как говорится!
А если он будет продолжать делать точно так-же, только втихую, - то он просто ламер - т.е. человек, нежелающий учиться.

Автор: Rock 29.8.2006, 13:04
smartov, эту функцию я просто как пример привел, смысл то более глобальный, чем объяснение библиотечных функций

Автор: smartov 29.8.2006, 16:07
Rock, ну значит пример был неудачный. А обьяснять... кому. Друг-другу чтоль? Если спросят - обьясним.

Автор: faost 29.8.2006, 16:30
из библиотеки самых бесполезных кусков кода топик превращается в библиотеку самого бесполезного флуда =)

Автор: IZ@TOP 29.8.2006, 16:45
Модератор: прекращаем пустую болтовню!

Товарищи! Если выкладывате какой-то код, хотя бы слегка комментируйте в нем происходящее! Так действительно будет лучше.

Кто-то спрашивал на счет шорт тегов: не используйте это безобразие! Я час копался - почему у меня не видно файла, который сгенерирован для экспорта (расширением html) и, с XML контентом. 
Угадайте почему? Потому что кто-то поставил хандлер РНР на html файлы + на сервере в конфиге были разрешены шорт теги! В итоге РНР матерится трехэтажным матом на XML и мы получаем пустую страницу, ибо (для тех кто не в курсе) XML файл начинается с объявления <?xml!

Добавлено @ 16:48 
Код

if (unlink("../news_photos/smalls/".$filename_old) == TRUE) {
     unlink("../news_photos/smalls/".$filename_old);
}


Наверное человек просто хотел проверить существование файла. Из этого делаем вывод что нужно было делать так:

Код

if (is_file("../news_photos/smalls/".$filename_old)) {
     unlink("../news_photos/smalls/".$filename_old);
}


Добавлено @ 16:51 
Замечательно, нашел тему просто переполненную безобразием называемым "иф адом")) http://forum.vingrad.ru/index.php?showtopic=109772

Автор: smartov 29.8.2006, 17:07
IZ@TOP, не так страшен иф ад как текст с картинкой до Тега html......

Автор: Всемогущий 30.8.2006, 09:57
Привет всем
на форуме видел
Цитата

Код

if () {
/*допустим здесь 300 сторк кода*/
}
else {
/*и здесь 300 сторк кода*/
}


верно говорят трудно разбираться.
А чем можно заменить

Автор: skyboy 30.8.2006, 10:19
разбить на функции, к примеру

Автор: Alone 30.8.2006, 10:26
Это называется рефакторинг кода.

Автор: smartov 30.8.2006, 11:13
Всемогущий
тут дейтсивтельно подходов много.
Можно как подсказал товарищ, разбить на фукнции.
Первые триста строк - одна функция. Вторые (по else) - вторая.
Это самый простой и в общем-то неправильный вариант. 
Потому-что я считаю и мой опыт это подтверждает, что можно всегда избежать ситуаций в которых иф 300 строк элс - 300 строк.
Наверняка можно построить логику по другому. Многое наверняка общее. Многое наверняка можно написать по-другому.

Автор: skyboy 30.8.2006, 14:40
Цитата(smartov @  30.8.2006,  10:13 Найти цитируемый пост)
Первые триста строк - одна функция. Вторые (по else) - вторая.

необязательно так страшно. интуиция мне подсказывает, что почти наверняка 50% кода в обоих ветвях могут быть объединены в одну функцию. возможно - с разными параметрами. хотя, конечно, вариант
Цитата(smartov @  30.8.2006,  10:13 Найти цитируемый пост)
избежать ситуаций в которых иф 300 строк элс - 300 строк

правильнее.

Автор: smartov 30.8.2006, 14:47
Цитата(skyboy @  30.8.2006,  13:40 Найти цитируемый пост)
 интуиция мне подсказывает, что почти наверняка 50% кода в обоих ветвях могут быть объединены в одну функцию

Мне тоже, но реально кода в глаза я не видел...

Автор: Vaulter 1.9.2006, 12:14
Код

$tm = time();
$query = "insert into dec_orders (status, tema, doptreb, cat, type_work, year_sd, file_up, cena_end, email_z, type_sms, sms_kod) values ('8'";
for ($c=0; $c<$num; $c++) {
  if ($data[$c] == "бухучёт, статистика") $bla = 1;
  elseif ($data[$c] == "иностранные языки") $bla = 2;
  elseif ($data[$c] == "история") $bla = 3;
  elseif ($data[$c] == "медицина") $bla = 4;
  elseif ($data[$c] == "педагогика") $bla = 5;
  elseif ($data[$c] == "политология") $bla = 6;
  elseif ($data[$c] == "программирование") $bla = 7;
  elseif ($data[$c] == "психология") $bla = 8;
  elseif ($data[$c] == "разное") $bla = 9;
  elseif ($data[$c] == "русский язык и литература") $bla = 10;
  elseif ($data[$c] == "социология") $bla = 11;
  elseif ($data[$c] == "технические") $bla = 12;
  elseif ($data[$c] == "философия") $bla = 13;
  elseif ($data[$c] == "финансы и кредит") $bla = 14;
  elseif ($data[$c] == "химия и физика") $bla = 15;
  elseif ($data[$c] == "экономика") $bla = 16;
  elseif ($data[$c] == "юриспруденция") $bla = 17;
  elseif ($data[$c] == "реферат") $bla = 1;
  elseif ($data[$c] == "курсовая") $bla = 2;
  elseif ($data[$c] == "диплом") $bla = 3;
  elseif ($data[$c] == "диссертация") $bla = 4;
  elseif ($data[$c] == "другой") $bla = 5;
  else $bla = 0;
echo "<td>$data[$c]</td>";
$data[$c] = untag($data[$c]);
 if ($bla != 0) { $query .=", '$bla'"; $bla = 0; }
 else $query .=", '$data[$c]'";
}
$query .=")";

Автор: Ignat 2.9.2006, 09:48
Vaulter, только не говори, что это писал ты smile

Автор: RomanK 2.9.2006, 18:00
Вот... нашел. Цитирую только кусок кода:
Код

<?
print"
  <tr>
    <td width=754 height=19 colspan=3 background=img/1.gif class=text><font color=#FFFFFF><b>Информация на форуме</b></font></td>
  </tr>
  <tr>
    <td width=754 height=35 colspan=3 bgcolor=#EFEFEF class=niz>
Сегодня : $chislo $mesyac, $den_nedeli<br>
Всего тем оставленных за всю работу скрипта : $count <br>
В настоящее время присутствуют пользователей: $online<br>
<b>Статистика</b> :
<br>Уникальных: $unique
<br>Сегодня: $all_today
<br>Всего: $all

";


case("lol") :

print"";

break;
endswitch;
?>


Больше всего понравились строки - 16, 19, 21. smile

Автор: smartov 2.9.2006, 22:48
Не оценил. Просто какой-то недоработанный код и все :\

Написан конечно дубово но индусский стиль присутствует очень мало...
Да и не рабочий код по-идее...

Автор: Vaulter 3.9.2006, 10:11
Ignat, чур меня! тебе вот смешно! smile а мне пришлось ловить бугага на протяж. двух месяцев переделывая систему...
в итоге, с нуля свою накропал smile

Автор: RomanK 3.9.2006, 19:16
smartov, если это ты про код в моем посте, то это просто вырезка из большого кода, в котором мне понравились именно строки 16, 19, 21. Особенно понравилась строка 21. smile 
Интересно что этим хотел показать автор! smile

Автор: smartov 3.9.2006, 21:52
Ну строка 16 - строка как строка, ну может хотел он переносов в конце текста.
19, 21 - такое впечатление что кто-то что-то дебажил или временно проверял, а потом забыл убрать...

Автор: IZ@TOP 4.9.2006, 17:40
Всем офисом дружно катались под столами после просмотра такого кода:

Код

switch(TRUE) {
   default:
     // Что-то выполняется...
}

Автор: smartov 4.9.2006, 20:21
Мощно! smile)
Мы такой код называем Uber_really_что-то
В твоем случае Uber_realy_true smile

Автор: BuShaRt 11.9.2006, 18:00
 smile 
А зачем топ был созда? =)) Переименуйте его в "Забавные ошибки" 
Просто не чего интересного не узнал...

Автор: smartov 11.9.2006, 19:39
Цитата(BuShaRt @  11.9.2006,  17:00 Найти цитируемый пост)
Просто не чего интересного не узнал...

Это хорошо! smile

Автор: BuShaRt 11.9.2006, 20:25
smartov
Ну да, я конечно посмеялся, почуствовал себя не полным нубом, но все же было бы гораздо лучше, если бы люди рассказывали тут как стоит избавляться от определенных ошибок.... В самом первом посте были комменты, к которым можно прислушаться, а больше я нечего не увидел, лишь куча кода... 

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

Вот я кстате не понял вот тут:

Код

if (preg_match('/[^\w\d]+/', $login)) //non alphanumeric symbols in login    
    print_and_Die("<html><body bgcolor='black' text='green'><p align='center'> Îøèáêà. <br> Âû èñïîëüçîâàëè çàïðåùåííûå ñèìâîëû â èìåíè ïåðñîíàæà. Ïîïðîáóéòå åùå ðàç. <br><a href='registr.html'> Åù¸ ðàç </></p></body></html>");    
if (is_numeric($login[0])) //only numeric symbols in login    
    print_and_Die("<html><body bgcolor='black' text='green'><p align='center'> Îøèáêà. <br> Èìÿ âàøåãî ïåðñîíàæà íà÷èíàåòñÿ ñ öèôðû. Ïîïðîáóéòå åùå ðàç. <br><a href='registr.html'> Åù¸ ðàç </></p></body></html>");    
if ($parol != $parol_povtor) //passwords mismatch    
    print_and_Die("<html><body bgcolor='black' text='green'><p align='center'> Îøèáêà. <br> Ââåäåííûå âàìè ïàðîëè íå ñîâïàäàþò. Ïîïðîáóéòå åùå ðàç. <br><a href='registr.html'> Åù¸ ðàç </></p></body></html>");    
if (trim($login[0]) == "") //login is empty    
    print_and_Die("<html><body bgcolor='black' text='green'><p align='center'> Îøèáêà. <br> Ââåäèòå ïîæàëóéñòà Âàø ëîãèí. <br><a href='registr.html'> Åù¸ ðàç </></p></body></html>");    
if ($parol[0] == "") // password is empty    
    print_and_Die("<html><body bgcolor='black' text='green'><p align='center'> Îøèáêà. <br> Ââåäèòå ïîæàëóéñòà Âàø ïàðîëü. <br><a href='registr.html'> Åù¸ ðàç </></p></body></html>");    
if (strlen($login) < 3) //login length is less 3    
    print_and_Die("<html><body bgcolor='black' text='green'><p align='center'> Îøèáêà. <br> Ëîãèí ñîñòîèò ìåíåå, ÷åì èç òðåõ ñèìâîëîâ. <br><a href='registr.html'> Åù¸ ðàç </></p></body></html>");    
if (strlen($parol) < 8) //minimal passwd length = 8    
    print_and_Die("<html><body bgcolor='black' text='green'><p align='center'> Îøèáêà. <br> Ïàðîëü ñîñòîèò ìåíåå, ÷åì èç âîñüìè ñèìâîëîâ. <br><a href='registr.html'> Åù¸ ðàç </></p></body></html>"
);


А зачем каждый раз прерывать? не проще ли делать так?

Код

if (preg_match('/[^\w\d]+/', $login)) 
    $messages[] = ошибка.


Потом перенести в отдельный файл...

Код

<p align='center'> Ошибки:</p>
<p align='center'> Îøèáêà. <br> <messages> <br><a href='registr.html'> Åù¸ ðàç </></p>


и сделать так в подытоживание ошибок:
Код

$error = file ("html/error.html");
print $error[0];
foreach ($message as $val)
    {
        print (ereg_replace ("<messages>",$val,$error[1]));
    }    


Автор: smartov 11.9.2006, 20:35
BuShaRt, можно еще много чего красивого сделать. Я написал поправку а 5 минут чтобы показать как от этого можно хотя бы _минимально_ здыхаться. 
Код что я написал тоже корявый, но гораздно менее индусский чем оригинал.
Потом ребята еще навернули. Ты ж видел.

Цитата(BuShaRt @  11.9.2006,  19:25 Найти цитируемый пост)
Потом перенести в отдельный файл...

Даже в файл отдельный переносить не надо. Зачем? Накапливай в переменку.

Автор: BuShaRt 11.9.2006, 20:38
Цитата(smartov @  11.9.2006,  20:35 Найти цитируемый пост)
Даже в файл отдельный переносить не надо. Зачем? Накапливай в переменку.


Ты наверно не правилно понял... Я про перенос HTML кода в отдельный файл...

мешать HTML и PHP не хочеться не в каком виде...

Автор: BuShaRt 12.9.2006, 09:07
Вот сейчас разгребаю один из модудей RunCMS, вроде пример для подражания, а вот такой код увидеть обчное дело:

Код

<table border="0" cellpadding="0" cellspacing="0" width="100%" align="center">
        <tr>
<?php
        if ( $start >= $nombre && $total > $nombre ) {
?>
        <td align="left"><a href="index.php?start=<?php echo ($start - $nombre);?>&nombre=<?php echo $nombre;?>&let=<?php echo $let;?>&ordre=<?php echo $ordre;?>"><?php echo $PdmPrec;?></a></td>
<?php
        }
?>
        <td align="center"><b><?php echo $n_pages;?></b> <?php echo $TotalPages;?></td>
<?php
        if ( ($total - $start) > $nombre ) {
                ?>
                <td align="right"><a href="index.php?start=<?php echo ($start + $nombre);?>&nombre=<?php echo $nombre;?>&let=<?php echo $let;?>&ordre=<?php echo $ordre;?>"><?php echo $PdmSucc;?></a></td>
                <?php
        }
                ?>
        </tr>
</table> 


В чем же дело? Почему программисты позволили себе написать такой стращный код?

Добавлено @ 09:13 
Код

<? /*                                         </td>
                                </tr>
                        </table>
                </td>
        </tr>
</table> */ ?>

Автор: smartov 12.9.2006, 12:16
Цитата(BuShaRt @  11.9.2006,  19:38 Найти цитируемый пост)
Ты наверно не правилно понял... Я про перенос HTML кода в отдельный файл...
мешать HTML и PHP не хочеться не в каком виде...

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

Цитата(BuShaRt @  12.9.2006,  08:07 Найти цитируемый пост)
Вот сейчас разгребаю один из модудей RunCMS, вроде пример для подражания

Значит не такой уж пример для подражание как кажется.
Или писало много программеров. Ты бы видел код довольон широко рапсространенного движка OSCOmmerce. Там просто жесть.
А phpBB? Сколько там дыр. Так что не все что массово- пример для подражания.

Автор: Eugene_Bond 12.9.2006, 12:46
На эту тему есть http://community.livejournal.com/ru_sex_php/, но в последнее время активность спала..

Автор: BuShaRt 12.9.2006, 13:20
smartov
Ну так да, шаблон. В нем тег <messages>, который регуляркой заменяеться на текст ошибки=)

Хе.. Покажу ка я свой код, который мне не очень нравиться.. Можете посмеяться, но пожалуста откоментируйет над чем и чем моно заменить =)
То, что ввода не безопасен во второй форме я знаю... просто пока не дошел то туда, а функция field_validator как раз фильтрует ввод и возращает массив $messages. На примере описанного мной выше. 

Код

include ("config/config_index.php"); 
if (!$page) $page="index";

if($_POST["indexform"]) //Если был ввод в форму indexform
        {    
            field_validator("Логин", $_POST["login"], "alphanumeric", 4, 15);
            field_validator("Пароль", $_POST["password"], "string", 4, 15);
            if ($messages)
                {
                    GoIndex ($page); //Функция которая создает переменную $pages (в которой содержиться содержимое страници) и обращаюшееся к отдельному классу, который генерирует из шаблонов целостный html-код
                    exit;
                }
            if( !($row = CheckPass($_POST["login"], $_POST["password"],"index")) ) //проверка логина-пароля на совпадение
                {
                    $messages[]="Логин - пароль не совпадают.";
             }
            if ($messages)
                {
                    GoIndex ($page);
                    exit;
                }
            GreatMemberSession($row[login], $row[password]); //Занесение данных в сессию
            header("Location: index.php?".session_name()."=".session_id());
            
        }
    else 
        {    
            GoIndex ($page);
        }

if($_POST["indexreg"]) //
    {
        $query = "INSERT INTO ban_user ( login , password , mail , siteurl , banerurl , sitename , title, printlvl ) 
        VALUES (
            '$_POST[login]',
            '$_POST[password1]',
            '$_POST[mail]',
            '$_POST[siteurl]',
            '$_POST[banerurl]',
            '$_POST[sitename]',
            '$_POST[title]',
            '1')";
        $result=mysql_query($query, $link) or die("Died inserting login info into db.  Error returned if any: ".mysql_error());
    }

Автор: Ignat 12.9.2006, 13:25
Код

                {
                    $messages[]="Логин - пароль не совпадают.";
             }


ИМХО, во всем тексте проблемы с отступами...

Автор: smartov 12.9.2006, 13:51
BuShaRt, смеятся не будем. Зачем.
А вот поправить.
Ну беде вдаваться особо в структуру (то бишь улучшать саму логику предлагать не буду, это дело вкуса). А именно по стилистическим ошибкам.

1) 
Код

if($_POST["indexform"]) //Если был ввод в форму indexform    

12 строк кода
}
else
{
1 строка
}

Уже много раз говорено даже в этом теме, даже с обьяснениями, что не надо так писать. 
if (...) {500 строк) читать неудобно ну ни в каком месте. 
Код

  if ($messages)    
                {    
                    GoIndex ($page);    
                    exit;    
                }

Этот код почему то повторяется два раза в одном и том же уловии. Это UberReallyExit такой?
Итого имеем.
Код

if(!$_POST["indexform"]) //Не было ввода в форму indexform    
{
GoIndex ($page);
exit; //не знаю есть ли exit в GoIndex поэтому на всякий случай.
}

field_validator("Логин", $_POST["login"], "alphanumeric", 4, 15);    
field_validator("Пароль", $_POST["password"], "string", 4, 15);    
if( !($row = CheckPass($_POST["login"], $_POST["password"],"index")) )
{    
    $messages[]="Логин - пароль не совпадают.";    
}    
if ($messages)    
{    
    GoIndex ($page);    
    exit;    
}    

GreatMemberSession($row[login], $row[password]); //Занесение данных в сессию    
header("Location: index.php?".session_name()."=".session_id());    

А регистрацию я бы а) доделал б) вынес в другой файл или класс

Автор: BuShaRt 12.9.2006, 19:17
smartov
хм.. логично =) спасибо...
А если вот это еще посмотреть (раз такая расдача)? Тут я сам понимаю что бред, но просто не знаю, как можно оптемезировать.... Писал вообше нарашиванием, т.е. сначало одно написал, а потом (когда понадобилось) дописывал другое.

Чтоб везде не коменнтить... В итоге все операции сводяться к занесению в переменную $page определенных данных.

Код

function GoIndex ($pages) 
    {    
        $html = new WorkHTML (); //Создание объекта класса для генирации HTML
        global $link; 
        if ($pages=="reg" or $pages=="rule") //Если в переменной page reg или rule, то
            {
                        $valpage = file ("html/index_".$pages.".html"); 
                        foreach ($valpage as $val) $page.=$val; //Хватаем из папки html нужный файл и кидаем его в переменную $page (не путаем с $pages)
            }
        else
            {    
                if ($pages=="index" or $pages=="sys" or $pages=="mail" or $pages=="top") //Опять, смотрим, что у нас в переменной
                    { 
                        if ($pages=="top") // гМ=)
                            {
                                $sh_table = file ("html/index_sh_toptable.html"); 
                                $sh_row = file ("html/index_sh_rowtable.html"); //Типо шаблоны таблички извлекаем
                                $query="SELECT * FROM ban_user ORDER BY `push` DESC"; // Выделяем нужные данные сортируя сразу по полю push
                                $result=mysql_query($query, $link) or die("Died inserting login info into db.  Error returned if any: ".mysql_error());
                                while ($table = mysql_fetch_array($result)) //Загоняем данные в табличку
                                    {
                                        foreach ($sh_row as $val)
                                            {
                                                $val = ereg_replace ("<sitename>",$table[sitename],$val);
                                                $val = ereg_replace ("<sitetitle>",$table[title],$val);
                                                $val = ereg_replace ("<push>",$table[push],$val);
                                                $pageval.= $val;    
                                            }    
                                    }
                                foreach ($sh_table as $val)
                                    {
                                        $val = ereg_replace ("<printrow>",$pageval,$val);
                                        $page.=$val;
                                    }

                            }
                        else //Если все же не top, то делаем слудующие
                            {
                                $query="SELECT text FROM ban_indextext WHERE nametext='$pages'"; //Из специально таблици в бд выдираем текст страница
                                $result=mysql_query($query, $link) or die("Died inserting login info into db.  Error returned if any: ".mysql_error());
                                $row = mysql_fetch_array($result);
                                $page =  $row[text];
                            }
                    }
                else
                    {
                        if ($pages=="exit") //Если нечего у нас не получилось, то смотрим был ле exit и если да, то чистим сессию и кидаем пользователя на главную
                            { 
                                session_destroy();
                                header("Location: index.php");
                            }
                        else $page = "Такой страници не существует";        
                    } 
            }
        $html->GreatHTML($_SESSION["loggedIn_index"],$pages,$page); // Класс генерирующий HTML
    }         


 smile Чувствую тут точно ржать будите

Автор: smartov 12.9.2006, 22:51
Ну незнаю. Так написано как написано. По стилистике - нормально, без индуизмов. 
То бишь код читабельный и саппортный.

Автор: IZ@TOP 13.9.2006, 11:31
BuShaRt, есть несколько замечаний:

Код

<?php

function GoIndex ($pages) 
    {    
        $html = new WorkHTML (); //Создание объекта класса для генирации HTML
        global $link; 
        
        /**
         * IZ@TOP: В данном случае я бы посоветовал использовать switch/case конструкцию на предмет значения
         * в $pages - и быстрее и читабельнее. Еще можно было бы создать некий массив с индексами pages
         * значениями которых были бы массивы с перечислениями тех страниц которые нужно загрузить.
         * 
         */
        if ($pages=="reg" or $pages=="rule") //Если в переменной page reg или rule, то
        {
            $valpage = file ("html/index_".$pages.".html"); 
            
            /**
             * IZ@TOP: ну зачем же так страшно? Есть ведь чудо функция file_get_contents.
             * @example $page = file_get_contents($path);
             */
            
            foreach ($valpage as $val) $page.=$val; //Хватаем из папки html нужный файл и кидаем его в переменную $page (не путаем с $pages)
        }
        else
            {    
                /**
                 * IZ@TOP: и опять-таки, ни кто ведь не мешает воспользоваться switch/case.
                 * @example 
                 * switch($pages) {
                 *      case 'index':
                 *      case 'sys':
                 *      case 'mail':
                 *      case 'top': {
                 *          // выполнить некое действие
                 *          break;
                 *      }
                 * }
                 */
                if ($pages=="index" or $pages=="sys" or $pages=="mail" or $pages=="top") //Опять, смотрим, что у нас в переменной
                    { 
                        if ($pages=="top") // гМ=)
                            {
                                $sh_table = file ("html/index_sh_toptable.html"); 
                                $sh_row = file ("html/index_sh_rowtable.html"); //Типо шаблоны таблички извлекаем
                                $query="SELECT * FROM ban_user ORDER BY `push` DESC"; // Выделяем нужные данные сортируя сразу по полю push
                                $result=mysql_query($query, $link) or die("Died inserting login info into db.  Error returned if any: ".mysql_error());
                                while ($table = mysql_fetch_array($result)) //Загоняем данные в табличку
                                    {
                                        foreach ($sh_row as $val)
                                            {
                                                /**
                                                 * IZ@TOP: Здесь мы видим живой пример того, как не следует заменять строки.
                                                 * В днном случае нужно решать задачу при помощи str_replace, так как 
                                                 * она работает гораздо быстрее. А если уж и нужно использовать 
                                                 * регулярные выражения, то использовать не тормознутые POSIX регулярки
                                                 * а PCRE (Perl compatible regular expression), т.е. функции preg_*().
                                                 */
                                                $val = ereg_replace ("<sitename>",$table[sitename],$val);
                                                $val = ereg_replace ("<sitetitle>",$table[title],$val);
                                                $val = ereg_replace ("<push>",$table[push],$val);
                                                $pageval.= $val;    
                                            }    
                                    }
                                foreach ($sh_table as $val)
                                    {
                                        $val = ereg_replace ("<printrow>",$pageval,$val);
                                        $page.=$val;
                                    }
                            }
                        else //Если все же не top, то делаем слудующие

                            {
                                
                                /**
                                 * IZ@TOP: Ну и хочу сказать что mysql_real_escape_string та самая функция которая оградит тебя
                                 * от домогательств SQL инъекциями.
                                 */
                                $query="SELECT text FROM ban_indextext WHERE nametext='$pages'"; //Из специально таблици в бд выдираем текст страница
                                
                                $result=mysql_query($query, $link) or die("Died inserting login info into db.  Error returned if any: ".mysql_error());
                                $row = mysql_fetch_array($result);
                                $page =  $row[text];
                            }
                    }
                else
                    {
                        if ($pages=="exit") //Если нечего у нас не получилось, то смотрим был ле exit и если да, то чистим сессию и кидаем пользователя на главную
                            { 
                                session_destroy();
                                header("Location: index.php");
                            }
                        else $page = "Такой страници не существует";        
                    } 
            }
        $html->GreatHTML($_SESSION["loggedIn_index"],$pages,$page); // Класс генерирующий HTML
    }         
    
?>


Еще хотелось бы заметить что у тебя ошибки на разных языках... по моему это странно. Еще меня приятно удивило полное отсутствие каких бы то нибыло обрамлений кавычками индексов массивов... может это у тебя константы?
Попробуй в начале всех своих страничек поставить ini_set('display_errors', 1); error_reporting(E_ALL);. Пока не избавишься от всех нотисов - код невалидный.

Автор: BuShaRt 13.9.2006, 12:03
Цитата

Попробуй в начале всех своих страничек поставить ini_set('display_errors', 1); error_reporting(E_ALL);


 smile 
боже... сколько ошибок повылезало...

Автор: BuShaRt 19.9.2006, 21:00
Как теперь?
mysql_real_escape_string  еще не юзал, ее отнес отдельно к целому классу работы с БД, которым щас и занимаюсь...
Да, и не ужели mysql_real_escape_string  полностью защищает от иньекция?

Код

function GoIndex ($pages)
    {    
        //Создание класса и глобализация необходимых переменных
        $html = new WorkHTML (); global $link; global $messages;
        //Проверка значения $pages
        $page = ''; $valpage = '';
        //Если $pages = exit    
        if ($pages=='exit'){
            //Отчистка сесси и переход на главную страницу
            session_destroy();
            header("Location: index.php");
            }

        switch ($pages){
        
        //Если $pages = reg, rule
        case 'reg':
        case 'rule': 
            //Заносим в массив $page[] HTML странички 
            $valpage = file ("html/index_".$pages.".html");
            foreach ($valpage as $val) $page .= $val;
            //Преостановка выполнения функции Switch
            break;
        
        //Если $pages = index, sys, mail
        case 'index':
        case 'sys': 
        case 'mail': 
            //Выделение из таблици ban_indextext содержимово поля text соотвествующего выбранной странице
            $query="SELECT text FROM ban_indextext WHERE nametext='$pages'";
            $result=mysql_query($query, $link) or die("Died inserting login info into db.  Error returned if any: ".mysql_error());
            //Занесение текста в переменную $page
            $row = mysql_fetch_array($result);
            $page =  $row['text'];
            //Преостановка выполнения функции Switch
            break;
                                
        //Если $pages = top
        case 'top':
            //Загружаем шаблоны таблицы                
            $sh_table = file ("html/index_sh_toptable.html");
            $sh_row = file ("html/index_sh_rowtable.html");
            //Выдиляем все данные из таблицы ban_user и сотртируем их по полю push
            $query="SELECT * FROM ban_user ORDER BY `push` DESC";
            $result=mysql_query($query, $link) or die("Died inserting login info into db.  Error returned if any: ".mysql_error());
            //Запускаем просмотр данных в цикле 
            while ($table = mysql_fetch_array($result))
                {    
                    //Заносим данные в строки таблици заменой тегов вшаблоне требуемыми данными. Сохраняем HTML код в массиве $valpage[]
                    foreach ($sh_row as $val)
                        {
                            $val = preg_replace ("/<sitename>/",$table['sitename'],$val);
                            $val = preg_replace ("/<sitetitle>/",$table['title'],$val);
                            $val = preg_replace ("/<push>/",$table['push'],$val);
                            $valpage .= $val;    
                        }    
                }
            //Создание полноценной таблици и занесение ее HTML-кода в массив $page[] 
            foreach ($sh_table as $val) $page .= preg_replace ("/<printrow>/",$valpage,$val);
            //Преостановка выполнения функции Switch
            break;
                
        //Если $pages = не объявленному значению        
        default: 
            $page = "Такой страници не существует";        
                    
        }
        //Передача свобранных параметров классу, генерирующему целостный HTML код странички
        $html->GreatHTML($_SESSION["loggedIn_index"],$pages,$page);
        //Завершение работы программы
        exit;
    }    

Автор: smartov 20.9.2006, 11:41
Цитата(BuShaRt @  19.9.2006,  20:00 Найти цитируемый пост)
Да, и не ужели mysql_real_escape_string  полностью защищает от иньекция?

Если правильно юзать.

Автор: BuShaRt 20.9.2006, 14:37
smartov

Код

    //Метод экранирования запроса
    function quote_smart($value) {
         // если magic_quotes_gpc включена, то снимаем экранированние
     if (get_magic_quotes_gpc()) $value = stripslashes($value);
        //Если переменная не число, то окружаем кавычками и экранируем
     if (!is_numeric($value)) $value = "'" . mysql_real_escape_string($value) . "'";
        return $value;
    }


Вот так =)

А потом 

Код

$query = sprintf("SELECT text FROM ban_indextext WHERE nametext=%s ",
            $mysql->quote_smart($pages));

Автор: IZ@TOP 22.9.2006, 13:33
BuShaRt, опять же, есть небольшое замечание: в некоторых случаях preg_replace лучше заменить на str_replace. А насколько я вижу, тебе именно это лучше и сделать, так как у тебя не регулярка а простая строка идет на замену - зачем лишний раз процессорное время тратить?

Добавлено @ 13:34 
Цитата(BuShaRt @  19.9.2006,  22:00 Найти цитируемый пост)
Да, и не ужели mysql_real_escape_string  полностью защищает от иньекция?

Дело в том что эта функция экранирует данные согласно синтаксису mysql и данных касаемых конкретного коннекта.

Автор: G0rinich 4.10.2006, 11:30
http://siteservice.ru/
Linker 3.0
файл linker_files/add_form.php строка 14

if(($banner || $link) && $ok==1) $ok=1;

Автор: smartov 5.10.2006, 12:44
УберРеаллыПрисвоить smile встречал тоже такие строки smile

Автор: mr.fox 8.10.2006, 07:09
Cейчас этого кадра поймал..

Код



 Создал базу данных и тд.
Теперь пытаюсь вывести всю информацию что в ней есть.


<?php
 mysql_connect($dbhost,$dbuser,$dbpassword ) OR DIE("Error");
 mysql_select_db($dbName) or die(mysql_error());
 $querry = "select * from Main";
 mysql_query($query) or die(mysql_error());
?>

мне выводит Query was empty.... Не могу понять в чем ошибка.... Доки читал но что-то не помогает...

Кто знает в чем проблема помогите плз.


http://forum.woweb.ru/topic25160s0.html?

я валяюсь

Автор: smartov 8.10.2006, 12:22
Что-то пост не совсем по теме. Описки бывают. Бывает что сидишь и тупо не видишь что ошибся в написании
Тут тема не про это.

Автор: mr.fox 8.10.2006, 17:36
smartov, ну я не знаю, такое не заметить очень уж сложно

Автор: AztEK 25.10.2006, 19:50
Недавний прикол с bash.org.ru :
Цитата

<Шелезяка[work]> подскажите плиз как проверить существует ли таблица в базе mysql
<Есть> if (mysql_query('DROP TABLE таблица')) echo "таблица существовала";


Не совсем в тему, но поржал  smile  smile 

Автор: Ground 29.10.2006, 08:05
Подскажите как можно упрощать такой код:

Код

function view() {
    echo ('<p align = "center"><b>'.$row["name"].'</b></p>'.$row["rasskaz"].'<p>Автор: '.$row["author"].'</p>');}

    if (isset($_GET['id'])) {

        switch($id) {
            case 1:
                $sql = 'SELECT * FROM `rasskaz` LIMIT 0,1';
                $result = mysql_query($sql, $connect);
                while ($row = mysql_fetch_assoc($result)) {view();}
            break;
            case 2:
                $sql = 'SELECT * FROM `rasskaz` LIMIT 1,1';
                $result = mysql_query($sql, $connect);
                while ($row = mysql_fetch_assoc($result)) {view();}
            break;
            case 3:
                $sql = 'SELECT * FROM `rasskaz` LIMIT 2,1';
                $result = mysql_query($sql, $connect);
                while ($row = mysql_fetch_assoc($result)) {view();}
            break;
            case 4:
                $sql = 'SELECT * FROM `rasskaz` LIMIT 3,1';
                $result = mysql_query($sql, $connect);
                while ($row = mysql_fetch_assoc($result)) {view();}
            break;
            case 5:
                $sql = 'SELECT * FROM `rasskaz` LIMIT 4,1';
                $result = mysql_query($sql, $connect);
                while ($row = mysql_fetch_assoc($result)) {view();}
            break;
            case 6:
                $sql = 'SELECT * FROM `rasskaz` LIMIT 5,1';
                $result = mysql_query($sql, $connect);
                while ($row = mysql_fetch_assoc($result)) {view();}
            break;
            case 7:
                $sql = 'SELECT * FROM `rasskaz` LIMIT 6,1';
                $result = mysql_query($sql, $connect);
                while ($row = mysql_fetch_assoc($result)) {view();}
            break;
            case 8:
                $sql = 'SELECT * FROM `rasskaz` LIMIT 7,1';
                $result = mysql_query($sql, $connect);
                while ($row = mysql_fetch_assoc($result)) {view();}
            break;
            case 9:
                $sql = 'SELECT * FROM `rasskaz` LIMIT 8,1';
                $result = mysql_query($sql, $connect);
                while ($row = mysql_fetch_assoc($result)) {view();}
            break;
            case 10:
                $sql = 'SELECT * FROM `rasskaz` LIMIT 9,1';
                $result = mysql_query($sql, $connect);
                while ($row = mysql_fetch_assoc($result)) {view();}
            break;
            case 11:
                $sql = 'SELECT * FROM `rasskaz` LIMIT 10,1';
                $result = mysql_query($sql, $connect);
                while ($row = mysql_fetch_assoc($result)) {view();}
            break;
            case 12:
                $sql = 'SELECT * FROM `rasskaz` LIMIT 11,1';
                $result = mysql_query($sql, $connect);
                while ($row = mysql_fetch_assoc($result)) {view();}
            break;
            case 13:
                $sql = 'SELECT * FROM `rasskaz` LIMIT 12,1';
                $result = mysql_query($sql, $connect);
                while ($row = mysql_fetch_assoc($result)) {view();}
            break;
            case 14:
                $sql = 'SELECT * FROM `rasskaz` LIMIT 13,1';
                $result = mysql_query($sql, $connect);
                while ($row = mysql_fetch_assoc($result)) {view();}
            break;
            case 15:
                $sql = 'SELECT * FROM `rasskaz` LIMIT 14,1';
                $result = mysql_query($sql, $connect);
                while ($row = mysql_fetch_assoc($result)) {view();}
            break;
            case 16:
                $sql = 'SELECT * FROM `rasskaz` LIMIT 15,1';
                $result = mysql_query($sql, $connect);
                while ($row = mysql_fetch_assoc($result)) {view();}
            break;
            case 17:
                $sql = 'SELECT * FROM `rasskaz` LIMIT 16,1';
                $result = mysql_query($sql, $connect);
                while ($row = mysql_fetch_assoc($result)) {view();}
            break;
            case 18:
                $sql = 'SELECT * FROM `rasskaz` LIMIT 17,1';
                $result = mysql_query($sql, $connect);
                while ($row = mysql_fetch_assoc($result)) {view();}
            break;
            case 19:
                $sql = 'SELECT * FROM `rasskaz` LIMIT 18,1';
                $result = mysql_query($sql, $connect);
                while ($row = mysql_fetch_assoc($result)) {view();}
            break;
            case 20:
                $sql = 'SELECT * FROM `rasskaz` LIMIT 19,1';
                $result = mysql_query($sql, $connect);
                while ($row = mysql_fetch_assoc($result)) {view();}
            break;
            default:
             echo("Рассказ не обнаружен");
            }}


Автор: Vaulter 29.10.2006, 14:28
Ground, скрепя зубами... smile

Автор: клоп 30.10.2006, 10:30
Решил написать свой пост тут, т.к. не уверен в правильности своего решения.

Делаю скрипт онлайн матча 2х команд.

Файл 1 , доступен по паролю (статист в онлайне сидит и забивает результаты в форму)
Код

// кусок PHP кода

//-----------------------------------------------------
// Запись очков команды A
//-----------------------------------------------------
    
$data_score_a = ".htscore_a";
$fp_score_a=@fopen($data_score_a,"w");
flock($fp_score_a, LOCK_EX);
fwrite($fp_score_a,"$score_a_1|$score_a_2|$score_a_3|$score_a_4|$score_a_1ot|$score_a_2ot");
flock($fp_score_a, LOCK_UN);
fclose($fp_score_a);

//-----------------------------------------------------
// Запись очков команды Б
//-----------------------------------------------------
    
$data_score_b = ".htscore_b";
$fp_score_b=@fopen($data_score_b,"w");
flock($fp_score_b, LOCK_EX);
fwrite($fp_score_b,"$score_b_1|$score_b_2|$score_b_3|$score_b_4|$score_b_1ot|$score_b_2ot");
flock($fp_score_b, LOCK_UN);
fclose($fp_score_b);

// кусок XTML блока

<td bgcolor=#fff3ce class="c" width="26"><input type=text size=1 name="score_a_1" value="<?echo $_POST['score_a_1']?>" maxlength=3 class="txtinp"></td>
<td bgcolor=#fff3ce class="c" width="26"><input type=text size=1 name="score_a_2" value="<?echo $_POST['score_a_2']?>" maxlength=3 class="txtinp"></td>
<td bgcolor=#fff3ce class="c" width="26"><input type=text size=1 name="score_a_3" value="<?echo $_POST['score_a_3']?>" maxlength=3 class="txtinp"></td>
<td bgcolor=#fff3ce class="c" width="26"><input type=text size=1 name="score_a_4" value="<?echo $_POST['score_a_4']?>" maxlength=3 class="txtinp"></td>
<td bgcolor=#fff3ce class="c" width="26"><input type=text size=1 name="score_a_1ot" value="<?echo $_POST['score_a_1ot']?>" maxlength=3 class="txtinpyellow"></td>
<td bgcolor=#fff3ce class="c" width="26"><input type=text size=1 name="score_a_2ot" value="<?echo $_POST['score_a_2ot']?>" maxlength=3 class="txtinpyellow"></td>
------------------------
------------------------
<td bgcolor=#dee7ef class="c" width="26"><input type=text size=1 name="score_b_1" value="<?echo $_POST['score_b_1']?>" maxlength=3 class="txtinp"></td>
<td bgcolor=#dee7ef class="c" width="26"><input type=text size=1 name="score_b_2" value="<?echo $_POST['score_b_2']?>" maxlength=3 class="txtinp"></td>
<td bgcolor=#dee7ef class="c" width="26"><input type=text size=1 name="score_b_3" value="<?echo $_POST['score_b_3']?>" maxlength=3 class="txtinp"></td>
<td bgcolor=#dee7ef class="c" width="26"><input type=text size=1 name="score_b_4" value="<?echo $_POST['score_b_4']?>" maxlength=3 class="txtinp"></td>
<td bgcolor=#dee7ef class="c" width="26"><input type=text size=1 name="score_b_1ot" value="<?echo $_POST['score_b_1ot']?>" maxlength=3 class="txtinpblue"></td>
<td bgcolor=#dee7ef class="c" width="26"><input type=text size=1 name="score_b_2ot" value="<?echo $_POST['score_b_2ot']?>" maxlength=3 class="txtinpblue"></td>
-----------------------
-----------------------
<input name='check'  type='submit' class='buttinp' value='Обновить статистику'></td>


Файл 2 , доступен всем (обновляется через определенное время)
Код

<META http-equiv=refresh content="10;">

// кусок кода показывающего результат

<td bgcolor=#fff3ce class="c" width="26">
<?php
$score_file_a = @fopen("data/.htscore_a", "r"); 

         $line  = fgets($score_file_a);
         $arr_score_a = explode("|", $line);
         if($arr_score_a[0] == ""){$arr_score_a[0] = "-";}
         echo "$arr_score_a[0]";

@fclose($score_file_a);
?>
</td>
<td bgcolor=#fff3ce class="c" width="26">
<?php
$score_file_a = @fopen("data/.htscore_a", "r"); 

         $line  = fgets($score_file_a);
         $arr_score_a = explode("|", $line);
         if($arr_score_a[1] == ""){$arr_score_a[1] = "-";}
         echo "$arr_score_a[1]";

@fclose($score_file_a);
?>
</td>
<td bgcolor=#fff3ce class="c" width="26">
<?php
$score_file_a = @fopen("data/.htscore_a", "r"); 

         $line  = fgets($score_file_a);
         $arr_score_a = explode("|", $line);
         if($arr_score_a[2] == ""){$arr_score_a[2] = "-";}
         echo "$arr_score_a[2]";

@fclose($score_file_a);
?>
</td>
--------------------
--------------------

И так далее ....


Как видете, чтоб показать какой либо результат, а их может быть не один десяток и находиться они могут в разных местах страницы (файл 2) приходиться каждый раз открывать файл и считывать, что не есть хорошо как мне кажется. Как быть?

Автор: smartov 30.10.2006, 12:00
Ground
Цитата(Ground @  29.10.2006,  07:05 Найти цитируемый пост)
Подскажите как можно упрощать такой код:

Лёгко. Смотри. У тебя повторяются одни и те же строки 20(!!) раз. Извеняются только границы выборки. 
Логично что надо просто организовать условие и всё.

Код
function view() 
{
    echo '<p align = "center"><b>'.$row["name"].'</b></p>'.$row["rasskaz"].'<p>Аффтар: '.$row["author"].'</p>';
}
    
if (!isset($_GET['id']))
{
    echo "Это типо захачить хотел?";
    exit;
}

if ($id > 20)
{
    echo("Рассказ не обнаружен");
    exit;
}

$sql = 'SELECT * FROM `rasskaz` LIMIT '.($id-1).',1';
$result = mysql_query($sql, $connect);
while ($row = mysql_fetch_assoc($result)) 
{
    view();
}




клоп, навскидку (писал по быстрому. может ошибки будут, но думаю смысл поймешь)
Файл 2 будет таким
Код

<META http-equiv=refresh content="10;">
// кусок кода показывающего результат
<?

if (!file_exists("data/.htscore_a"))
{
    echo "Извините. Произошла офигенная ошибка.";
    exit;
}

$arr_score_a = file("data/.htscore_a");//весь файл массивом строк

foreach ($arr_score_a as $line)
{
$line_array = explode("|", $line);//строка массивом scores
foreach ($line_array as $score)
    echo '<td bgcolor=#fff3ce class="c" width="26">'.($score ? $score : '-').'</td>';
}

?>

Автор: клоп 30.10.2006, 13:12
smartov спасибо, но этот перебор выведет один за другим все значения в массиве, а нужно только одно определенное
Код

foreach ($arr_score_a as $line)
{
$line_array = explode("|", $line);//строка массивом scores
foreach ($line_array as $score)
    echo '<td bgcolor=#fff3ce class="c" width="26">'.($score ? $score : '-').'</td>';
}

Автор: smartov 30.10.2006, 14:22
клоп, тебе нужна только первая строчка из файла? Ну тогда читай только ее. Одним циклом меньше.

Автор: Vaulter 5.11.2006, 00:03
Код

$inArray = array("'", ";", "/**/", "/UNION/", "/SELECT/", "AS ");
if (strpos($_SERVER['PHP_SELF'], "trackback") === false) {
    foreach($inArray as $res) {
        if(stristr($_SERVER['QUERY_STRING'], $res)) {
            die("Access denied.");
        }
    }
}

вчитайтесь внимательно. особенно "Access denied."!!!
однако: www.e107.org !!!

Автор: smartov 5.11.2006, 22:28
Vaulter, я подобное видел в коде phpbb. Методы защиты конечно так себе.

Автор: Mystery_of_being 8.11.2006, 00:57
Мне кажется он просто полный новичок. Я когда только учил тоже был упорным типам.  )) Вы когда начинали глупочти не делали ??


Я вот писал  

If( ... )
{

Делам что-то

}
else
{

А тут пусто. Думал если не будет Элс то будет ошибка ))) 

}

Автор: smartov 8.11.2006, 11:42
Mystery_of_being, к чему ты это написал? Представленный Вольтером код писал не новичок однозначно.
По крайней мере не настолько новичок чтобы думать что если else не написать то будет ошибка.

Автор: BuShaRt 29.11.2006, 14:07
Mystery_of_being
Почему не писал так?

Код

if ($var) {
    //---
} elseif ($var) {
    //---
} else {
    //---
}

Автор: coyl 4.1.2007, 02:51
Жесть конечно все это, но я вот сейчас получил проект. Посмотрев на код, я понял, что дал бы ему максимум 15 штук рублей за и то только за то, что время потратил на написание 5 мегов кода.
Когда я стал углубляться, чтобы внести срочные изменения, я просто проклял его (все вышеперечисленные ошибки там были, структурирование, видимо було для него незнакомым словом ифы и элсы, содержащие по 300 строк кода ит.д. ит.п.) и понял, что не дал бы ему и 15 штук...
Так вот представьте мой ужОс, когда я узнал, что этот "кодер" получил за написание этой системы (внимание внимание) 170 000 рублей. Поприветствуем его заказчиков)))

Автор: Mal Hack 4.1.2007, 02:56
А можно, хотя бы приватно получить ссылочку на сие чудо? Уж больно хочется воочию глянуть реализацию...

Автор: coyl 4.1.2007, 14:27
Да там смотреть-то особо нечего. Все \вродебы\ работает правильно, дизайн рисовал мой хороший друг, так что выглядит все прилично, но вносить какие-либо изменения или дополнительные модули - это аЦЦко просто.
Собственно говоря поэтому этот чел и ушел с проекта - не укладывался ни в какие сроки даже по мелочовым правкам.

Автор: smartov 4.1.2007, 14:38
Цитата
<gram|work> про индийский код
<gram|work> Какой самый извращенный способ проверить в условии if () булевскую переменную ?
<gram|work> bool b;
<gram|work> b = false;
<gram|work> if (b == true){...}
<gram|work> Это децкий лепет
<gram|work> ИТАК, ПЕРВОЕ МЕСТО
<gram|work> Знакомый говорит что нашел только что в коде:
<gram|work> if (b.ToString().length < 5){...}

Автор: coyl 4.1.2007, 21:42
Жесть. Только что нарвался на кусок кода
Код

    if(isset($_POST['total']))
    {
        $n = $_POST['total'];
        for($i = 0; $i < $n; $i++)
        {
            $db->query("UPDATE charts SET
                al_id='".$_POST['al_id'.($i)]."'
                WHERE id='".$_POST['id'.($i)]."'");
        }
    }


За такое люди еще и деньги получают. smile 

Автор: smartov 5.1.2007, 00:07
coyl, ну в принципе написано кривовато и несекьюрно, но идея ясна. Возможно там поля в динамике генерятся, я страницу не вижу.

Автор: Mal Hack 8.1.2007, 00:04
Код

// $answ = array(0, 1, 2, 3, 4, ...)
$i = 0;
$dx = 0.01;
$L = 1;
for ($i=0; $i<L; $i+=$dx)
{
   echo $answ[$i*100];
}

Автор: AztEK 10.1.2007, 19:35
Цитата(Mal Hack @ 8.1.2007,  03:04)
Код

// $answ = array(0, 1, 2, 3, 4, ...)
$i = 0;
$dx = 0.01;
$L = 1;
for ($i=0; $i<L; $i+=$dx)
{
   echo $answ[$i*100];
}

Это действительно реальный код? smile  smile 

Автор: Mal Hack 10.1.2007, 19:40
http://forum.vingrad.ru/topic-130800.html

Автор: awers 12.1.2007, 20:57
ЖЕСТЬ ТАК ЖЕСТЬ:
Сайт: http://studinfo.ru/
Все в файле..
Не весь исходник кинул ... просто и так хватит )))

Автор: Mal Hack 12.1.2007, 21:08
Да вроде бы нормальный код.

Автор: awers 12.1.2007, 21:11
читай папку A2 ... ))))

Автор: Mal Hack 12.1.2007, 21:19
Нет такой

Автор: awers 13.1.2007, 02:55
ну а модули с папки админ??

Автор: Mal Hack 13.1.2007, 14:18
Нормально более менее...

Автор: MuToGeN 24.1.2007, 13:57
awers, единственная вещь - никаких error_reporting(0).
ini_set('display_errors', 0) и настраиваем логирование ошибок, желательно помимо стандартного PHPшного логирования свой обработчик (man set_error_nadler) с логированием стека вызова.

Автор: AztEK 24.1.2007, 14:08
[offtop]
А как логировать стек вызовов?
[/offtop]

Автор: MuToGeN 25.1.2007, 20:22
debug_backtrace()

Автор: IZ@TOP 2.2.2007, 16:26
Уга-га. Купили один проект (фотогалерея), код с первого взгляда порадовал, но некоторые вещи особенно)

Код

          if(eregi("jpeg",$files[$i]['type']))$ext = '.jpg';
          if(eregi("jpg",$files[$i]['type'])) $ext = '.jpg';


Люблю сокращения, но все же)))

Код

return ($_SERVER['HTTP_HOST']!=FOTO_HOST?'http://'.HOST:'').$this->config['img_dir'].$p1.'/'.$p2.'/'.$userid.'/'.$albid.($pass?'pass':'').'/'.$file;

Автор: smartov 2.2.2007, 20:36
Цитата(IZ@TOP @  2.2.2007,  15:26 Найти цитируемый пост)
некоторые вещи особенно

Как обычно smile Strict Indian Style smile

Автор: WolfON 21.4.2007, 02:35
Есть код типа:
Код

    public function getDayCounts() {
        $raw = $this->http->Post("www.livejournal.com/interface/flat", "mode=getdaycounts&user=".$this->username."&auth_method=cookie", array("X-LJ-Auth: cookie"));
        return $this->explodeFlat($raw);            
    }
    
    public function getFriendOf() {
        $raw = $this->http->Post("www.livejournal.com/interface/flat", "mode=friendof&user=".$this->username."&auth_method=cookie", array("X-LJ-Auth: cookie"));
        return $this->explodeFlat($raw);            
    }


И судя по всему, прийдется дописать таких функций еще пять
Каким образом вы-бы упростили код, не лишая его читабельности, пока ничего, кроме как вынести его в отдельную функцию в голову не приходит =/

Автор: smartov 21.4.2007, 10:15
WolfON
как вариант, например
Код

public function getValueOfMode($mode) {
        $raw = $this->http->Post("www.livejournal.com/interface/flat", "mode=".$mode."&user=".$this->username."&auth_method=cookie", array("X-LJ-Auth: cookie"));
        return $this->explodeFlat($raw);
}


...
//вызов

$dayscount = $className->getValueOfMode('getdayscount');

$friendOf = $className->getValueOfMode('friendof');

Автор: d4rkr00t 10.11.2008, 19:56
во что встретил в одном проекте

Код

<?
$ip = getenv("REMOTE_ADDR");

If ($ip == "63.76.234.54" or $ip == "194.158.208.151" or $ip == "212.5.100.140" or $ip == "194.67.159.230") {
echo "<p><b>Форум временно закрыт</b></p>";
exit;
}
?>



Это что система банна??)))
 


Автор: smartov 10.11.2008, 20:55
Цитата(d4rkr00t @  10.11.2008,  19:56 Найти цитируемый пост)
во что встретил в одном проекте

Клааас smile  smile 

Автор: jnb 13.11.2008, 18:04
Вижу ветка еще жива.
Прочитать смог только первую страницу.
Идея ТС-а конечно интересная, но что-то пошло вразнос: гуру выкладывают код, потом дружно ржут над ним без комментариев, засирают авторов кода и ВСЕ!
Это очень полезно для новичков. Новичок только может сделать вывод: что бы он не написал - его залажают.


Автор: bars80080 13.11.2008, 18:41
jnb, согласен, тема не флеймовая.
однако на первой странице всего три куска. первые два от IZ@TOP и smartov объяснены достаточно
Vaulter, правда, изначально ничего не говорит, но дальше из контекста ясно, что убивает в этом коде. и не нужно быть семи пядей во лбу, чтобы понять что в первом примере из-за ($a, $b, $c, $d) просто фиг разберёшься в функции. почему было не назвать переменные понятно - неизвестно
а во втором примере человек явно страдает. очень сильно. циклы для того и придуманы, чтобы не было подобных упражнений для пальцев

Автор: Majesty 28.11.2008, 14:37
Платный движок для создания "социальных сетей" SocialEngine. Класс se_user (/include/class_user.php). Метод user_fields.
Код
...
      // SET PROFILE TAB VARIABLES
      $tab_query = "SELECT * FROM se_tabs"; if($tab_id != 0) { $tab_query .= " WHERE tab_id='$tab_id'"; } $tab_query .= " ORDER BY tab_order";
      $tabs = $database->database_query($tab_query);

      // LOOP THROUGH TABS
      while($tab_info = $database->database_fetch_assoc($tabs)) {

        // GET NON DEPENDENT FIELDS IN TAB IF NECESSARY
        if($tabs_only == 0) {
          $field_count = 0;
          $this->profile_fields = "";
          $field_query = "SELECT * FROM se_fields WHERE field_tab_id='$tab_info[tab_id]' AND field_dependency='0'"; if($signup != 0) { $field_query .= " AND field_signup<>'0'"; } if($profile != 0) { $field_query .= " AND field_browsable<>'-1'"; } if($search != 0) { $field_query .= " AND (field_browsable='1' OR field_browsable='2')"; } $field_query .= " ORDER BY field_order";
          $fields = $database->database_query($field_query);
          while($field_info = $database->database_fetch_assoc($fields)) {
...
Мало того, что отсутствие оформления делает абсолютно не читабельным, мало того, что вложенность операторов выше всякой меры... Убивает вложенность циклов с запросами. Какую нагрузку, интересно, выдержит такая "соц. сеть"?

Автор: NLspieler 5.12.2008, 09:29
Функция помогающая составлять mathml формулы. 
Сильно же по-уродски выглядит? 

Код

<?php

function mathml ($text)
{
    $array = explode (' ' , $text) ;
    $Anzhal = count ($array) ;
    $key = 0 ;
  
    echo   '<math xmlns="http://www.w3.org/1998/Math/MathML">' , "\n"  ;
  
    while ($key < $Anzhal)
    {
        $symbol = $array[$key] ;
    
        if ( $symbol == '+' or $symbol == '-' or $symbol == '*' or $symbol == '=' or $symbol == ',' 
                            or $symbol == '<' or $symbol == '>' or $symbol == '(' or $symbol == ')' )
        {
            echo '<mo>',"$symbol",'</mo>' , "\n"  ;
        }
        elseif (is_numeric($symbol))
        {                                                                                 
            echo '<mi>' , "$symbol" , '</mi>' , "\n"  ;
        }
        elseif ($symbol == '[')
        {
            echo       '<mrow>'   , "\n"  ;
        }    
        elseif ($symbol == ']')
        {
            echo       '</mrow>'   , "\n"  ;
        }    
        elseif ($symbol == '_s')
        {
            echo       '<msqrt>'   , "\n"  ;
        }
        elseif ($symbol == 's_')
        {
            echo      '</msqrt>'   , "\n"  ;
        }
        elseif ($symbol == '{')
        {
            echo       '<mfrac>'   , "\n"  ;
        }
        elseif ($symbol == '}')
        {
            echo      '</mfrac>'   , "\n"  ;
        }
        elseif ($symbol == '_n')
        {
            echo       '<msub>'   , "\n"  ;
        }
        elseif ($symbol == 'n_')
        {
            echo      '</msub>'   , "\n"  ;
        }
        elseif ($symbol == '_w')
        {
            echo       '<msup>'   , "\n"  ;
        }
        elseif ($symbol == 'w_')
        {
            echo      '</msup>'   , "\n"  ;
        }
        elseif ($symbol == '+-')
        {
            echo   '<mfrac linethickness="0">'       , "\n"  ;
            echo       '<mo>+</mo>'                  , "\n"  ;
            echo       '<mo>-</mo>'                  , "\n"  ;
            echo    '</mfrac>'                       , "\n"  ;
        }
        else 
        {
            echo '<mi>' , "$symbol" , '</mi>' , "\n"  ;
        }
        
        $key++ ;
    }

    echo    '</math>'                                          , "\n"  ;
    echo       '<br/> <br/>'                                   , "\n"  ; 

}


?>

Автор: smartov 5.12.2008, 13:40
NLspieler, да, все это можно было сделать проще, забив сначала массив соответсвий замен.

Автор: NLspieler 6.12.2008, 09:34
Цитата(smartov @ 5.12.2008,  13:40)
NLspieler, да, все это можно было сделать проще, забив сначала массив соответсвий замен.

Что значит массив соответствий замен? 

Автор: NLspieler 6.12.2008, 10:34
А вот это одна из функций, которая использует предыдущую функцию 

Код

<?php

/* Отображение квадратного уравнения */

function urawnenie ($A, $B, $C)            
{
    /* ax2 + bx + c = 0 */

    $absA = abs ($A) ;  #Модули входящих переменных
    $absB = abs ($B) ;
    $absC = abs ($C) ;

    $mathml = ($A < 0)                    ? '-'                        .' '   : ''          ;
    $mathml = ($A <> 0 and $absA <> 1)    ? "$mathml"."$absA"          .' '   : "$mathml"   ;
    $mathml = ($A <> 0)                   ? "$mathml".'_w x 2 w_'      .' '   : "$mathml"   ;
  
    $mathml = ($B < 0)                    ? "$mathml".'-'              .' '   : "$mathml"   ;
    $mathml = ($B > 0)                    ? "$mathml".'+'              .' '   : "$mathml"   ;  
    $mathml = ($B <> 0 and $absB <> 1)    ? "$mathml"."$absB"          .' '   : "$mathml"   ;
    $mathml = ($B <> 0)                   ? "$mathml".'x'              .' '   : "$mathml"   ;
  
    $mathml = ($C < 0)                    ? "$mathml".'-'              .' '   : "$mathml"   ;
    $mathml = ($C > 0)                    ? "$mathml".'+'              .' '   : "$mathml"   ;  
    $mathml = ($C <> 0)                   ? "$mathml"."$absC"          .' '   : "$mathml"   ;
  
    $mathml = "$mathml".'= 0'  ; 
  
    mathml ($mathml)           ;
}


?>

Автор: smartov 6.12.2008, 12:42
Цитата(NLspieler @  6.12.2008,  09:34 Найти цитируемый пост)
Что значит массив соответствий замен?  

Код

//массив замен
$replacementRules = Array(
'+' => "<mo>_PLACEHOLDER_</mo>\n",
'-' => "<mo>_PLACEHOLDER_</mo>\n"....
);
//и так далее

//функция замены
function returnReplacement($item) {
    if (isset($replacementRules[$item])) {
        echo str_replace('_PLACEHOLDER_', $item, $replacementRules[$item]);
    }



//а потом
function mathml ($text)
{
    $array = explode (' ' , $text) ;
    array_walk($array, returnReplacement)
}


это навскидку так можно упростить

Автор: nerezus 8.12.2008, 02:55
Код

$NETCAT_FOLDER = join( strstr(__FILE__, "/") ? "/" : "\\", array_slice( preg_split("/[\/\\\]+/", __FILE__), 0, -1 ) ).( strstr(__FILE__, "/") ? "/" : "\\" );

Хотя по сравнению с  битрегзом...

Автор: MoLeX 2.4.2009, 06:58
Пред история:
на работе приходиться поддерживать один крупный государственный проект, сделанный на заказ и за очень большие деньги (делал не я, а фирма-дурдом, по другому их не назовешь)

последние месяцы стали этот проект очень сильно развивать, каждый день закачивалось от 20 файлов и достигли мы такими темпами более 10 тыщ файлов (законопроекты, приказы и т.д.), и началось у меня веселье - чтобы закачать файл надо ждать минут 15 (к слову сервер у нас не хилый, когда файлов было менее 6 тыщ все работало на ура, а тут вот началось). в результате беглово осмотра нашел следующий код

Код

// 3. ВЫБОРКА ИНФОРМАЦИИ
$fileSelect = array();

if (is_dir($filefolder)) {
    if ($dh = @opendir($filefolder)) {
        while (($file = readdir($dh)) !== false) {
            if (filetype($filefolder . $file) == "file" and $file != "0.txt") {
                $sql  = 'SELECT * FROM bd_file WHERE file_file = ?';
                $stmt = db_prepare($sql, $file); $res  = db_query($stmt);
                if (!db_num_rows($res)) {
                    $fileSelect[$file] = $file;
                }
            }
        }
    }
    closedir($dh);
}
 

после убития этих строк проект опять залетал.

Люди не когда так не делайте

Автор: pompei 2.4.2009, 08:01
Вот темная прога для shell-а:
Код

echo "password:" | perl -e '$??s:;s:s;;$?::s;;=]=>%-{<-|}<&|`{;;y; -/:-@[-`{-};`-{/" -;;s;;$_;see'

Я официально и уполномоченно заявляю, эту программу нельзя использовать, и категорически запрещено её запускать, особенно под суперпользователем "root" - ЭТО БУДЕТ НАРУШЕНИЕ АВТОРСКИХ ПРАВ И БУДЕТ ОЧЕНЬ СТРОГО КАРАТЬСЯ ПРИТОМ НЕМЕДЛЕННО И НЕЗАМЕДЛИТЕЛЬНО

Автор: MoLeX 2.4.2009, 08:27
Цитата(pompei @  2.4.2009,  08:01 Найти цитируемый пост)
официально и уполномоченно заявляю, эту программу нельзя использовать, и категорически запрещено её запускать, особенно под суперпользователем "root" - ЭТО БУДЕТ НАРУШЕНИЕ АВТОРСКИХ ПРАВ И БУДЕТ ОЧЕНЬ СТРОГО КАРАТЬСЯ ПРИТОМ НЕМЕДЛЕННО И НЕЗАМЕДЛИТЕЛЬНО

не понял

Добавлено через 7 минут и 5 секунд
это же перл?

Автор: nerezus 2.4.2009, 09:40
MoLeX, запусти )
Это тест на профессионализм админа: он автоматически узнает скилл админа и, если админ плохой, наказывает его.

Автор: MoLeX 2.4.2009, 10:53
nerezus, аха, запустил. и не чего

Добавлено через 12 секунд
 smile 

Автор: mogul82 16.5.2009, 23:07
Я когда увольнялся из 2х фирм, запоганил все сайты. Стер функции для проверки ошибок, заменил функции на старые и т.д.
Вот там ща наверное мучуются.
 smile  smile  smile  smile  :

Автор: nerezus 16.5.2009, 23:20
Т.е. ты работал в настолько гадюшнике, что даже не было CVS-системы у них?

Автор: mogul82 16.5.2009, 23:21
nerezus
Каждый делал один проект с нуля в одиночку.

Автор: nerezus 18.6.2009, 02:34
Покажешь код?)

Автор: TUMS 7.8.2009, 08:10
Код

// I don't know how to write it right, so I do it my newbie way. Code " if($sql['user_ip'] == $ip) " must be modified, but...
function check_user($id,$ip) 
{
    $sql = mysql_query("SELECT `user_ip` FROM `rating` WHERE `quote_id` = '$id' AND `user_ip` = '$ip'");
    $sql = mysql_fetch_assoc($sql);
    if($sql['user_ip'] == $ip) {
        return true;
    }
    else {
        return false;
    }
}

$ip = mysql_real_escape_string($_SERVER['REMOTE_ADDR']);

if(isset($_GET['id']) && (int)$_GET['id'] > 0 ) {
    $id = (int)$_GET['id'];
    if(isset($_GET['score'])) {
        switch($_GET['score']) {
        case "up":
            if(check_user($id,$ip) == false) {
                $sql = mysql_query("UPDATE `quotes` SET `score` = score + 1 WHERE `id` = '$id'");
                $sql = mysql_query("INSERT INTO `rating` (user_ip, quote_id) VALUES ('$ip','$id')");
            }
        break;
        case "down":
            if(check_user($id,$ip) == false) {
                $sql = mysql_query("UPDATE `quotes` SET `score` = score - 1 WHERE `id` = '$id'");
                $sql = mysql_query("INSERT INTO `rating` (user_ip, quote_id) VALUES ('$ip','$id')");
            }
        break;
    }
}


как-то так =)

Автор: WiseFire 22.9.2009, 11:45
Цитата(Vaulter @ 23.8.2006,  13:13)
ну что ж..вверили мне систему сайтов. и не смешно мне было отнюдь smile
для начала:
Код

function mailsender($a, $b, $c, $d)
{
$head      = "Content-type: text/html; charset=windows-1251\n";
$head     .= "From: ************\n";
$head     .= "Reply-To: ***********\n";
    
if ($a == "1") 
{
$query333 = "select * from dec_mess where typemess='1'";
$result333 = mysql_query($query333);
$arw333 = mysql_fetch_array($result333);
if ($d != "0") { $ddd = 500+$d; $subj = "Номер заказа: $ddd\r\n"; $mess = "Номер заказа: $ddd\r\n"; }
else { $subj = ""; $mess = ""; }
$subj .= $arw333['subj']; 
$mess .= $arw333['mess']; 
}
elseif ($a == "2") 

$query333 = "select * from dec_mess where typemess='2'";
$result333 = mysql_query($query333);
$arw333 = mysql_fetch_array($result333);
if ($d != "0") { $ddd = 500+$d; $subj = "Номер заказа: $ddd\r\n"; $mess = "Номер заказа: $ddd\r\n"; }
else { $subj = ""; $mess = ""; }
$subj .= $arw333['subj']; 
$mess .= $arw333['mess'];
}
elseif ($a == "3") 

$query333 = "select * from dec_mess where typemess='3'";
$result333 = mysql_query($query333);
$arw333 = mysql_fetch_array($result333);
if ($d != "0") { $ddd = 500+$d; $subj = "Номер заказа: $ddd\r\n"; $mess = "Номер заказа: $ddd\r\n"; }
else { $subj = ""; $mess = ""; }
$subj .= $arw333['subj']; 
$mess .= $arw333['mess'];
}
elseif ($a == "4") 
{
$query333 = "select * from dec_mess where typemess='4'";
$result333 = mysql_query($query333);
$arw333 = mysql_fetch_array($result333);
if ($d != "0") { $ddd = 500+$d; $subj = "Номер заказа: $ddd\r\n"; $mess = "Номер заказа: $ddd\r\n"; }
else { $subj = ""; $mess = ""; }
$subj .= $arw333['subj']; 
$mess .= $arw333['mess']; 
}


  if ($c == "0")
  {
$query = "select email from dec_users where type_user='$b'";
$result = mysql_query($query);
  while ($arw = mysql_fetch_array($result))
  {
  $to = "$arw[email]";
  mail($to, $subj, $mess, $head);
  }
  }
  else
  {
  $query = "select id_kto_vip from dec_orders where id='$c'";
  $result = mysql_query($query);
  $arw = mysql_fetch_array($result);
  $query = "select email from dec_users where id='$arw[id_kto_vip]'";
  $result = mysql_query($query);
  $arw = mysql_fetch_array($result);
  $to = $arw['email'];
  mail($to, $subj, $mess, $head);
  }
  
}

прониклись? человеку деньги за это платились..... скотина...

 smile  smile  smile  smile  smile  smile  smile  smile 

МЕНЯ РВЕТ =)))))
 smile  smile  smile  smile  smile  smile  smile  smile 


P.S. Извините, не сдержался...

Автор: smartov 22.9.2009, 13:52
За что только не плОтют smile

Автор: nerezus 25.9.2009, 23:24
Отсюда: http://forum.vingrad.ru/forum/topic-274389.html

Код

$ishod=explode ("-", $stroka);
    $size_kupon=sizeof ($ishod);

    for ($i=0; $i<$size_kupon; $i++) {
        $size_ishod [$i]=strlen ($ishod[$i]);
    }

    for ($z0=0; $z0<$size_ishod [0]; $z0++) {
        $ish[0] = substr($ishod[0], $z0, 1);
        for ($z1=0; $z1<$size_ishod [1]; $z1++) {
            $ish[1] = substr($ishod[1], $z1, 1);
            for ($z2=0; $z2<$size_ishod [2]; $z2++) {
                $ish[2] = substr($ishod[2], $z2, 1);
                for ($z3=0; $z3<$size_ishod [3]; $z3++) {
                    $ish[3] = substr($ishod[3], $z3, 1);
                    for ($z4=0; $z4<$size_ishod [4]; $z4++) {
                        $ish[4] = substr($ishod[4], $z4, 1);
                        for ($z5=0; $z5<$size_ishod [5]; $z5++) {
                            $ish[5] = substr($ishod[5], $z5, 1);
                            for ($z6=0; $z6<$size_ishod [6]; $z6++) {
                                $ish[6] = substr($ishod[6], $z6, 1);
                                for ($z7=0; $z7<$size_ishod [7]; $z7++) {
                                    $ish[7] = substr($ishod[7], $z7, 1);
                                    for ($z8=0; $z8<$size_ishod [8]; $z8++) {
                                        $ish[8] = substr($ishod[8], $z8, 1);
                                        for ($z9=0; $z9<$size_ishod [9]; $z9++) {
                                            $ish[9] = substr($ishod[9], $z9, 1);
                                            for ($z10=0; $z10<$size_ishod [10]; $z10++) {
                                                $ish[10] = substr($ishod[10], $z10, 1);
                                                for ($z11=0; $z11<$size_ishod [11]; $z11++) {
                                                    $ish[11] = substr($ishod[11], $z11, 1);
                                                    for ($z12=0; $z12<$size_ishod [12]; $z12++) {
                                                        $ish[12] = substr($ishod[12], $z12, 1);
                                                        for ($z13=0; $z13<$size_ishod [13]; $z13++) {
                                                            $ish[13] = substr($ishod[13], $z13, 1);
                                                            for ($z14=0; $z14<$size_ishod [14]; $z14++) {
                                                                $ish[14] = substr($ishod[14], $z14, 1);

                                                                                                                    
                                                                $new_stroka="";
                                                                for ($i=0; $i<15; $i++) {
                                                                    $new_stroka.=$ish[$i];
                                                                }
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }

Автор: bars80080 25.9.2009, 23:39
свежачок

Автор: overmet 18.8.2010, 23:57
Код

Если метод может быть статическим, объявляйте его статическим.

echo быстрее, чем print.

Передавайте в echo несколько параметров, вместо того, чтобы использовать конкатенацию строк.

Устанавливайте максимальное количество проходов ваших циклов for до цикла, а не во время его выполнения.

Удаляйте свои переменные для освобождения памяти, тем более, если это большие массивы.

Остерегайтесь магических методов, таких как __set, __get, __autoload.

require_once дорого обходится.

Указывайте полные пути в конструкциях include/require, меньше времени будет тратится на поиск файла.

Если вам необходимо определить время, когда скрипт был запущен, используйте $_SERVER[’REQUEST_TIME’] вместо time().

Старайтесь использовать strncasecmp, strpbrk и stripos вместо регулярных выражений.


str_replace быстрее, чем preg_replace, но strtr быстрее, чем str_replace.

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

Лучше выбирать утверждения при помощи конструкции else if, чем использовать несколько конструкций if.

Подавление ошибок при использовании @ работает очень медленно.

Используйте модуль Apache mod_deflate.

Закрывайте свои соединения с БД, когда закончите работать с ними.

$row['id'] в семь раз быстрее, чем $row[id].

Сообщения об ошибках дорого стоят

Не используйте функции внутри условия цикла for, например как здесь: for ($x=0; $x < count($array); $x). В данном случае функция count() будет вызываться с каждым проходом цикла.

Инкремент локальной переменной в методе - самый быстрый. Почти также работает инкремент локальной переменной в функции.

Инкремент глобальной переменной в два раза медленее, чем локальной.

Инкремент свойства объекта (т.е. $this->prop++) в три раза медленнее, чем локальной переменной.

Инкремент неопределённой переменной в 9-10 раз медленнее, чем заранее инициализированной.

Объявление глобальной переменной, без использования её в функции, также замедляет работу (примерно на ту же величину, что и инкремент локальной переменной). Вероятно, PHP осуществляет проверку на существование переменной.

Скорость вызов метода, судя по всему, не зависит от количества методов, определённых в классе. Я добавил 10 методов в тестовый класс (до и после тестового метода), без изменения производительности.

Методы в производных классах работают быстрее, чем они же, определённые в базовом классе.

Вызов функции с одним параметром и пустым телом функции в среднем равняется 7-8 инкрементам локальной переменной ($localvar++). Вызов похожего метода, разумеется, около 15 инкрементов.

Ваши строки, определённые при помощи ', а не ", будут интерпретироваться чуть быстрее, т.к. PHP ищет переменные внутри "..", но не '...'. Конечно, вы можете использовать это только тогда, когда в вашей строке нет переменных.

Строки, разделённые запятыми, выводятся быстрее, чем строки, разделённые точкой. Примечание: это работает только с функцией echo, которая может принимать несколько строк в качестве аргументов.

PHP-скрипты будут обрабатываться, как минимум, в 2-10 раз медленнее, чем статические HTML-страницы. Попробуйте использовать больше статических HTML-страниц и меньше скриптов.

Ваши PHP-скрипты перекомпилируются каждый раз, если скрипты не кэшируются. Кэширование скриптов обычно увеличивает производительность на 25-100% за счёт удаления времени на компиляцию.

Кэшируйте, насколько это возможно. Используйте memcached — это высокопроизводительная система кэширования объектов в памяти, которая повышает скорость динамических веб-приложений за счёт облегчения загрузки БД. Кэшированный микрокод полезен тем, что позволяет вашему скрипту не компилироваться снова для каждого запроса.

При работе со строками, когда вам понадобится убедиться в том, что строка определённой длины, вы, разумеется, захотите использовать функцию strlen(). Эта функция работает очень быстро, ведь она не выполняет каких-либо вычислений, а лишь возвращает уже известную длину строки, доступную в zval-структуре (внутренняя структура C, используемая при работе с переменными в PHP). Однако потому, что strlen() — функция, она будет работать медленно за счёт вызова некоторых операций, таких как приведение строки в нижний регистр и поиска в хэш-таблице, только после которых будут выполнены основные действия функции. В некоторых случаях вы сможете ускорить свой код за счёт использования хитрости с isset().
Было: if (strlen($foo) < 5) { echo "Foo is too short"; }
Стало: if (!isset($foo{5})) { echo "Foo is too short"; }
Вызов isset() быстрее, чем strlen() потому, что, в отличие от strlen(), isset() - не функция, а языковая конструкция. За счёт этого isset() не имеет практически никаких накладных расходов на определение длины строки.

Инкремент или декремент переменной при помощи $i++ происходит немного медленнее, чем ++$i. Это особая специфика PHP, и не нужно таким образом модифицировать свой C и Java-код думая, что он будет работать быстрее, этого не произойдёт. ++$i будет быстрее в PHP потому, что вместо четырёх команд, как в случае с $i++, вам понадобится только три. Пост-инкремент обычно используется при создании временных переменных, которые затем увеличиваются. В то время, как пре-инкремент увеличивает значение оригинальной переменной. Это один из способов оптимизации PHP-кода в байт-код утилитой Zend Optimizer. Тем не менее, это хорошая идея, поскольку не все байткод-оптимизаторы оптимизируют это, также остаётся немало скриптов, работающих без оптимизации в байткод.

Не всё должно быть ООП, часто это излишне, поскольку каждый метод и объект занимает много памяти.

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

Не слишком разбивайте методы. Думайте, что вы действительно будете повторно использовать.

Вы всегда можете разбить код на методы позже, по необходимости.

Используйте бесчисленное количество предопределённых функций.

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

Профилируйте свой код. Профилирование покажет вам, как много времени выполняются части вашего кода.

mod_gzip — модуль Apache, который позволяет сжимать ваши данные на лету и может уменьшить объем передаваемых данных до 80%.

советы

Код

<?php

$lang = $_GET['lang'];
if (!$lang) {
    $lang = $_REQUEST['lang'];
}
if (!$lang) {
    $lang = 'en';
}
setcookie('lang', $lang);

?>


Автор: SneG0K 5.2.2011, 14:55
nerezus, у тебя хоть отступы есть  smile 

Автор: Muerto 11.2.2011, 12:43
Цитата(nerezus @ 25.9.2009,  23:24)
Отсюда: http://forum.vingrad.ru/forum/topic-274389.html

Код

$ishod=explode ("-", $stroka);
    $size_kupon=sizeof ($ishod);

    for ($i=0; $i<$size_kupon; $i++) {
        $size_ishod [$i]=strlen ($ishod[$i]);
    }

    for ($z0=0; $z0<$size_ishod [0]; $z0++) {
        $ish[0] = substr($ishod[0], $z0, 1);
        for ($z1=0; $z1<$size_ishod [1]; $z1++) {
            $ish[1] = substr($ishod[1], $z1, 1);
            for ($z2=0; $z2<$size_ishod [2]; $z2++) {
                $ish[2] = substr($ishod[2], $z2, 1);
                for ($z3=0; $z3<$size_ishod [3]; $z3++) {
                    $ish[3] = substr($ishod[3], $z3, 1);
                    for ($z4=0; $z4<$size_ishod [4]; $z4++) {
                        $ish[4] = substr($ishod[4], $z4, 1);
                        for ($z5=0; $z5<$size_ishod [5]; $z5++) {
                            $ish[5] = substr($ishod[5], $z5, 1);
                            for ($z6=0; $z6<$size_ishod [6]; $z6++) {
                                $ish[6] = substr($ishod[6], $z6, 1);
                                for ($z7=0; $z7<$size_ishod [7]; $z7++) {
                                    $ish[7] = substr($ishod[7], $z7, 1);
                                    for ($z8=0; $z8<$size_ishod [8]; $z8++) {
                                        $ish[8] = substr($ishod[8], $z8, 1);
                                        for ($z9=0; $z9<$size_ishod [9]; $z9++) {
                                            $ish[9] = substr($ishod[9], $z9, 1);
                                            for ($z10=0; $z10<$size_ishod [10]; $z10++) {
                                                $ish[10] = substr($ishod[10], $z10, 1);
                                                for ($z11=0; $z11<$size_ishod [11]; $z11++) {
                                                    $ish[11] = substr($ishod[11], $z11, 1);
                                                    for ($z12=0; $z12<$size_ishod [12]; $z12++) {
                                                        $ish[12] = substr($ishod[12], $z12, 1);
                                                        for ($z13=0; $z13<$size_ishod [13]; $z13++) {
                                                            $ish[13] = substr($ishod[13], $z13, 1);
                                                            for ($z14=0; $z14<$size_ishod [14]; $z14++) {
                                                                $ish[14] = substr($ishod[14], $z14, 1);

                                                                                                                    
                                                                $new_stroka="";
                                                                for ($i=0; $i<15; $i++) {
                                                                    $new_stroka.=$ish[$i];
                                                                }
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }

Нам похожее в универе задавали...
на скок помню когда писал подобное на Java циклов понадобилось не более двух (кажется вообще один)

Автор: smartov 11.2.2011, 13:59
Muerto, а что вообще эта конструкция делает? (а то лень разбираться)

Автор: N_Ghost 28.3.2011, 20:16
Код

<?
// Вывод ближайших праздников на неделю вперед, праздник, страна
// По ходу считаем дни :)
    $arr = array();
    for($i=0; $i<7; $i++){
        $tmp            = array();
        $Date            = time() + ($i * 86400);
        $tmp['Date']    = $Date;
        $tmp['Day']        = date("d", $Date);
        $tmp['Month']    = date("m", $Date);
        $tmp['Year']    = date("Y", $Date);                
        $arr[$i]        = $tmp;
    }

// Выбираем день и месяц
    foreach( $arr as $key ){
        $New = mysql_query("SELECT * FROM `party` WHERE `day`='{$key['Day']}' && `month`='{$key['Month']}'");
        if(mysql_num_rows($New) > 0)
        {
            while ($row = mysql_fetch_array($New))
            {
                echo "<div class='party'>   <h1>".$key['Day'].'.'.$key['Month'].'.'.$key['Year']."</h1>  ";
            
                $P_Cont = $row['cid'];
                // Выбираем флаг страны
                $Cont_Q = mysql_query("SELECT * FROM flags WHERE `id`='$P_Cont'");
                $rowCont = mysql_fetch_array($Cont_Q);
                $P_Pic = $rowCont['pic'];
                $FlagName = $rowCont[$lang];
            }
            
        }
    }    
    
?>


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

Автор: KLeonid 30.3.2011, 20:25
А тема то хорошая! Вот только действительно, комментировать нужно код, иначе новички могут не понять над чем смеяться smile.
Никогда не считал себя хорошим кодером, я скорее инженер, но даже на php4 таких глупостей как в теме себе не позволял. А глупостей я насмотрелся, когда переписывал оскоммерс smile.

N_Ghost, да код забавный... автор видимо не умеет пользоваться LEFT JOIN, или в упор не знает, что можно делать выборку из нескольких таблиц одним запросом smile.
А уж как переменные плодить любит! smile 
Вообще, логика этого кода малопонятна smile. Можно было сделать так:

Код

  for($i=0; $i<7; $i++){
    $Date = time() + ($i * 86400);
    $pq = mysql_query("SELECT * FROM party p LEFT JOIN flags f ON  p.cid = f.id WHERE p.day = '". date("d", $Date) ."' AND p.month = '". date("m", $Date) ."'");
     if($pq && mysql_num_rows($pq) > 0)
     {
        while ($row = mysql_fetch_array($pq))
        {
           echo "<div class='party'><h1>$row['day'].$row['month'].date('Y', $Date)</h1>";
/*А тут что-то сделать с 
           $P_Pic = $row['pic'];
           $FlagName = $row[$lang];
не зря же их тянули :)
*/
         }
      }
  }


Но от этого код становится лишь немного лучше... а логика все так же дубова smile

Автор: N_Ghost 6.4.2011, 20:31
Забыл добавить что сама дата храниться в базе в трех int полях, как, день, месяц, год. Там видимо программисту не то что LEFT JOIN, а даже стандартные типы данных не известны smile
Еще убила таблица пользователей, UserID, по которому выбираються пользователи, это var_char, содержащий md5 микротайма. А вот пароль храниться в открытом виде, в текстовом поле. 
Такой логики, как не пытался, понять не смог.

Автор: KLeonid 6.4.2011, 21:35
А ее там и нет smile. Просто многие считают себя программистами по недоразумению. Если бы они обладали достаточным воображением и могли провести аналогию своей работы, например, с постройкой автомобиля, поняв, что сами ездить на нем они ну совсем не захотели бы (ибо стремно, своя шкура все таки), скорее всего бросили бы это дело или начали совершенствоваться. Впрочем, большинству ###кодеров на это совершенно наплевать. Это их хлеб и у них есть своя потребительская аудитория... впрочем сочувствовать ей я не собираюсь, т.к. достаточно знаком с ней, и в большинстве случаев эти заказчики в последствии платятся за свою жадность smile .

Автор: N_Ghost 25.5.2011, 17:15
Есть много способов проверить что переменная существует, или содержит нужное значение.
Но такого извращенного способа еще не встречал smile
Код

function edit($id){

$id = $id+0;

//..... все равно идем в базу за нужным номером :)

}

Автор: smartov 25.5.2011, 17:41
А чего. Отсроумно smile

Автор: srt 9.6.2011, 12:34
самый быстрый способ избавиться от sql injection
никаких регулярок и прочей лобуды

Автор: N_Ghost 2.7.2011, 13:05
Продолжу тему веселых запросов. Нужно узнать, есть ли транспорт из страны, и в страну. Всего 94 страны, 189 запросов в базу, только для того что бы показать есть ли что то из этой страны, и в эту страну.

Код

$qCountry = mysql_query("SELECT * FROM `country`");
   while($rowCountry = mysql_fetch_array($qCountry)){

      $qFrom = mysql_query("SELECT * FROM `transport` WHILE `From_Country`=$rowCountry['id']");
         if (mysql_num_rows($qFrom) > 0){
            $country[$rowCountry['id']]['from'] = 'yes';
         }else{
            $country[$rowCountry['id']]['from'] = 'no';
         }

      $qTo = mysql_query("SELECT * FROM `transport` WHILE `To_Country`=$rowCountry['id']");
         if (mysql_num_rows($qTo) > 0){
            $country[$rowCountry['id']]['to'] = 'yes';
         }else{
            $country[$rowCountry['id']]['to'] = 'no';
         }

   }

Автор: MoLeX 4.7.2011, 05:31
мда. очень интересно использовать цикл в запросе.

Автор: FlameTH 21.2.2014, 16:13
как вам такое?
Код

$serial = str_replace('-','',substr(date('Y-m-d'),-5));

Автор: jexerrus 17.3.2014, 13:28
жесть какая,  вообще все куски кода как на подбор =)))))  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)