Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Оцените, пожалуйста, код

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Прошу пользователей дать оценку моего скрипта
kudraem
Отправлено: 13 Августа, 2013 - 01:16:33
Post Id


Новичок


Покинул форум
Сообщений всего: 2
Дата рег-ции: Авг. 2013  


Помог: 0 раз(а)




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

Код работает.
Очень прошу посмотреть и оценить бывалых php программистов. Оцените, пожалуйста с функциональной точки зрения и с точки зрения стиля написания. Просто очень боюсь стать или быть генератором говнокода.
Заранее всем спасибо.

Вот этот скрипт:

PHP:
скопировать код в буфер обмена
  1. <html>
  2. <head>
  3.         <meta http-equiv="Content-type" content="text/html;charset=UTF-8">
  4.         <title>Администрирование цен</title>
  5.         <link href="http://bootstrap.veliovgroup.com/assets/css/bootstrap.css" rel="stylesheet" />
  6.     <link href="http://bootstrap.veliovgroup.com/assets/css/bootstrap-responsive.css" rel="stylesheet" />
  7.     <style>
  8.         .font {
  9.                 font-size: 1.5em;
  10.         }
  11.         .butt {
  12.                         margin-top: 16px;
  13.                         margin-left: 14%;
  14.         }
  15.     </style>
  16.  </head>
  17.  <body>
  18.         <form method='GET' class="well form-inline">
  19.                 <span class='font'>от: </span><input type='text' name='from' style='width: 4%; height: 4%; font-size: 1.4em;'/><span class='font'> до: </span><input type='text' name='to' style='width: 4%; height: 4%; font-size: 1.4em;'/>
  20.                 <br/>
  21.                 <input type='submit' class='btn btn-success btn-large butt' value='Вывести список'/>
  22.         </form>
  23.  
  24. <?PHP
  25.         /*
  26.                 Данный скрипт предназначен для вывода списка товаров из базы данных в зависимости от того,
  27.                 как отличается цена, по которой товар продается пользователям интернет магазина (продажная цена),
  28.                 от той, по которой товар закупается магазином (оптовая цена). При этом пользователь данного
  29.                 скрипта вводит значения в процентах. Процент может быть так же отрицательным, что означает вывод
  30.                 товаров, которые продаются в убыток, т.е. оптовая цена выше, чем продажная.
  31.         */
  32.         function diff($from, $to, $from_minus, $to_minus, $price, $opt_price) {
  33.                 $min = ($opt_price / 100) * $from; // минимальное значение, с которой цена может отличаться
  34.                 $max = ($opt_price / 100) * $to; //     // максимальное значение, с которой цена может отличаться
  35.  
  36.                 //
  37.                 if($from_minus AND $to_minus) {
  38.                         $difference = $opt_price - $price;
  39.                 }
  40.                 elseif(!($from_minus) AND !($to_minus)) {
  41.                         $difference = $price - $opt_price;
  42.                 }        
  43.                 elseif ($from_minus AND !($to_minus)) {
  44.                         $difference = $price - $opt_price;
  45.                         $difference_negative = $opt_price - $price;
  46.                 }      
  47.                
  48.                 if(isset($difference_negative)) {
  49.                         if($min <= $difference_negative) return $difference_negative;
  50.                         elseif($max >= $difference) return $difference;
  51.                         else return 0;
  52.                 }
  53.                 else {
  54.                         if(($min <= $difference) AND ($max >= $difference)) return $difference;
  55.                         else return 0;
  56.                 }      
  57.         }
  58.  
  59.         if(($_GET['from']!='') AND ($_GET['to']!='')) {
  60.                 $from = $_GET['from'];
  61.                 $to = $_GET['to'];
  62.                
  63.                 // проверка значения переменнных на отрицательное значение
  64.                 if($from < 0) $from_minus = 1;
  65.                 else $from_minus = 0;
  66.  
  67.                 if($to < 0) $to_minus = 1;
  68.                 else $to_minus = 0;
  69.  
  70.                 if (preg_match('/\d+/', $from, $arr)) $from = $arr[0];
  71.                 if (preg_match('/\d+/', $to, $arr)) $to = $arr[0];
  72.  
  73.                 $db_hostname = '';
  74.                 $db_database = '';
  75.                 $db_username = '';
  76.                 $db_password = '';
  77.                          
  78.                 $db_server = mysql_connect($db_hostname, $db_username, $db_password);
  79.                 if(!$db_server)die('Error connection' . mysql_error());        
  80.                 mysql_select_db($db_database) or die("Error DB access" . mysql_error());
  81.  
  82.                 mysql_query("SET NAMES utf8");  
  83.  
  84.                 // запрос для вывода всех товаров из ИМ
  85.                 $query = "SELECT Price, Price_opt, product_code_hid, name_ru FROM SC_products WHERE pr_1=1 OR pr_2=1";
  86.                 $result = mysql_query($query);
  87.  
  88.                 $rows = mysql_num_rows($result);
  89.                 for($c=0; $c<$rows; $c++) {
  90.                         $row = mysql_fetch_row($result);
  91.                         $price = $row[0]; // цена закупки товара
  92.                         $opt_price = $row[1]; // цена продажи товара
  93.  
  94.                         $diff_result = diff($from, $to, $from_minus, $to_minus, $price, $opt_price);
  95.                         if($diff_result) {
  96.                                 // формируем массив с необходимыми товарами для последующего вывода
  97.                                 $products[]['name'] = $row[3];
  98.                                 $key = count($products)-1;
  99.                                 $products[$key]['difference'] = $diff_result;
  100.                                 $products[$key]['sku'] = $row[2];
  101.                         }
  102.                 }
  103.                 echo "<img src='http://telestudia.ru/excel_logo.png' title='Экспортировать в excel' style='width: 35px; height: 35px; margin-left: 97%; padding-bottom: 18px;' onclick=\"document.getElementById('excel').submit()\"/>";
  104.                 echo "<form id='excel' action='excel_export.php' method='POST'/>";
  105.                 echo "<table class='table table-striped'>";
  106.                 echo "<tr><th>Наименование</th><th>Артикул</th><th>Разность</th></tr>";
  107.                 foreach ($products as $key) {
  108.                         echo "<input type='hidden' name='products_names[]' value='{$key[name]}' />";
  109.                         echo "<input type='hidden' name='products_skus[]' value='{$key[sku]}' />";
  110.                         echo "<input type='hidden' name='products_differences[]' value='{$key[difference]}' />";
  111.                         echo "<tr><td>{$key[name]}</td><td>{$key[sku]}</td><td>{$key[difference]}</td></tr>";
  112.                 }
  113.                 echo "</table>";
  114.                 echo "</form>";
  115.         }
  116.  
  117. ?>
  118.  
  119. </body>
  120. </html>
 
 Top
DelphinPRO
Отправлено: 13 Августа, 2013 - 01:44:12
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




0. Разделяйте html и php код.
0.1 Не выводите html код операторами типа echo, print...
1. Незачем взломщикам предоставлять лишнюю информацию. За сим конструкции or die из продакшн-версии убрать и сделать нормальный вывод сообщений об ошибках.
2. $from = $_GET['from']; меняем на $from = (int)$_GET['from']; и не нужен будет preg_match
3. Для перебора результатов запроса используйте цикл while. (Пример можно посмотреть в документации по mysql_fetch_assoc)
4. Используйте mysql_fetch_assoc и имена столбиков таблицы, вместо "магических" чисел в $row[0], $row[1]
5. Вообще не используйте расширение mysql_*, возьмите, накрайняк, mysqli_*

это то, что с ходу в глаза бросилось по стилю написания. Разбирать логику лень Улыбка


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
kudraem
Отправлено: 13 Августа, 2013 - 01:50:10
Post Id


Новичок


Покинул форум
Сообщений всего: 2
Дата рег-ции: Авг. 2013  


Помог: 0 раз(а)




DelphinPRO пишет:
0. Разделяйте html и php код.
0.1 Не выводите html код операторами типа echo, print...
1. Незачем взломщикам предоставлять лишнюю информацию. За сим конструкции or die из продакшн-версии убрать и сделать нормальный вывод сообщений об ошибках.
2. $from = $_GET['from']; меняем на $from = (int)$_GET['from']; и не нужен будет preg_match
3. Для перебора результатов запроса используйте цикл while. (Пример можно посмотреть в документации по mysql_fetch_assoc)
4. Используйте mysql_fetch_assoc и имена столбиков таблицы, вместо "магических" чисел в $row[0], $row[1]
5. Вообще не используйте расширение mysql_*, возьмите, накрайняк, mysqli_*

это то, что с ходу в глаза бросилось по стилю написания. Разбирать логику лень Улыбка


Огромное спасибо! Обязательно поправлю скрипт и постараюсь не допускать подобных недочетов.
 
 Top
VestCoastman
Отправлено: 13 Августа, 2013 - 08:27:12
Post Id



Посетитель


Покинул форум
Сообщений всего: 374
Дата рег-ции: Дек. 2010  


Помог: 3 раз(а)




Скобки в проверке на true/false не нужны
PHP:
скопировать код в буфер обмена
  1. elseif(!$from_minus && !$to_minus) {

Тоже самое как и в проверке на равенство/неравенство
PHP:
скопировать код в буфер обмена
  1. if($_GET['from']!='' && $_GET['to']!='') {

$from = $_GET['from']; как сказано выше меняйте на
PHP:
скопировать код в буфер обмена
  1. $from = intval($_GET['from']); // или $from = (int)$_GET['from'];
  2. $to = intval($_GET['to']); // или $to = (int)$_GET['to'];
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB