Оцените, пожалуйста, код.

Как вы оцените этот код?

  • 2

    Голосов: 15 71,4%
  • 3

    Голосов: 6 28,6%
  • 4

    Голосов: 0 0,0%
  • 5

    Голосов: 0 0,0%

  • Всего проголосовало
    21

kudraem

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

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


Вот этот скрипт:
PHP:
<html>
<head>
	<meta http-equiv="Content-type" content="text/html;charset=UTF-8">
 	<title>Администрирование цен</title>
	<link href="http://bootstrap.veliovgroup.com/assets/css/bootstrap.css" rel="stylesheet" />
    <link href="http://bootstrap.veliovgroup.com/assets/css/bootstrap-responsive.css" rel="stylesheet" />
    <style>
    	.font {
    		font-size: 1.5em;
    	}
    	.butt {
			margin-top: 16px;
			margin-left: 14%;
    	}
    </style>
 </head>
 <body>
	<form method='GET' class="well form-inline">
		<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;'/>
		<br/>
		<input type='submit' class='btn btn-success btn-large butt' value='Вывести список'/>
	</form>	

<?php
	/*
		Данный скрипт предназначен для вывода списка товаров из базы данных в зависимости от того,
		как отличается цена, по которой товар продается пользователям интернет магазина (продажная цена), 
		от той, по которой товар закупается магазином (оптовая цена). При этом пользователь данного
		скрипта вводит значения в процентах. Процент может быть так же отрицательным, что означает вывод
		товаров, которые продаются в убыток, т.е. оптовая цена выше, чем продажная.
	*/
	function diff($from, $to, $from_minus, $to_minus, $price, $opt_price) {
		$min = ($opt_price / 100) * $from; // минимальное значение, с которой цена может отличаться
		$max = ($opt_price / 100) * $to; //	// максимальное значение, с которой цена может отличаться

		//
		if($from_minus AND $to_minus) {
			$difference = $opt_price - $price;
		}
		elseif(!($from_minus) AND !($to_minus)) {
			$difference = $price - $opt_price;
		}	 
		elseif ($from_minus AND !($to_minus)) {
			$difference = $price - $opt_price; 
			$difference_negative = $opt_price - $price;
		}	
		
		if(isset($difference_negative)) {
			if($min <= $difference_negative) return $difference_negative;
			elseif($max >= $difference) return $difference;
			else return 0;
		}
		else {
			if(($min <= $difference) AND ($max >= $difference)) return $difference;
			else return 0;
		}	
	}

	if(($_GET['from']!='') AND ($_GET['to']!='')) {
		$from = $_GET['from'];
		$to = $_GET['to'];
  		
  		// проверка значения переменнных на отрицательное значение
   		if($from < 0) $from_minus = 1;
   		else $from_minus = 0;

   		if($to < 0) $to_minus = 1;
   		else $to_minus = 0;

   		if (preg_match('/\d+/', $from, $arr)) $from = $arr[0];
   		if (preg_match('/\d+/', $to, $arr)) $to = $arr[0];

		$db_hostname = '';
		$db_database = '';
		$db_username = '';
		$db_password = '';
			 
		$db_server = mysql_connect($db_hostname, $db_username, $db_password);
		if(!$db_server)die('Error connection' . mysql_error());		
		mysql_select_db($db_database) or die("Error DB access" . mysql_error());

		mysql_query("SET NAMES utf8");   

		// запрос для вывода всех товаров из ИМ
		$query = "SELECT Price, Price_opt, product_code_hid, name_ru FROM SC_products WHERE pr_1=1 OR pr_2=1";
		$result = mysql_query($query);

		$rows = mysql_num_rows($result);
		for($c=0; $c<$rows; $c++) {
			$row = mysql_fetch_row($result);
			$price = $row[0]; // цена закупки товара
			$opt_price = $row[1]; // цена продажи товара

			$diff_result = diff($from, $to, $from_minus, $to_minus, $price, $opt_price);
			if($diff_result) {
				// формируем массив с необходимыми товарами для последующего вывода
				$products[]['name'] = $row[3];
				$key = count($products)-1;
				$products[$key]['difference'] = $diff_result;
				$products[$key]['sku'] = $row[2];
			}
		}
		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()\"/>";
		echo "<form id='excel' action='excel_export.php' method='POST'/>";
		echo "<table class='table table-striped'>";
		echo "<tr><th>Наименование</th><th>Артикул</th><th>Разность</th></tr>";
		foreach ($products as $key) {
			echo "<input type='hidden' name='products_names[]' value='{$key[name]}' />";
			echo "<input type='hidden' name='products_skus[]' value='{$key[sku]}' />";
			echo "<input type='hidden' name='products_differences[]' value='{$key[difference]}' />";
			echo "<tr><td>{$key[name]}</td><td>{$key[sku]}</td><td>{$key[difference]}</td></tr>";
		}
		echo "</table>";
		echo "</form>";	
	}

?>

</body>
</html>
 

keltanas

marty cats
За что я "люблю" данную CMS

Здесь какая-то ошибка вылезает.

Кстати, а зачем вообще строка
<form id='excel' action='excel_export.php' method='POST'/>?
Там кнопок даже нет
 
Последнее редактирование:

WMix

герр M:)ller
Партнер клуба
keltanas
проглядел
PHP:
document.getElementById('excel').submit()
kudraem
плохо если чесно
1. подключение к базе убрать
2. внутри функции html перенести
3. слишком сложно с учетом рекурсии
 

A1x

Новичок
PHP:
        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()\"/>";
        echo "<form id='excel' action='excel_export.php' method='POST'/>";
        echo "<table class='table table-striped'>";
        echo "<tr><th>Наименование</th><th>Артикул</th><th>Разность</th></tr>";
        foreach ($products as $key) {
            echo "<input type='hidden' name='products_names[]' value='{$key[name]}' />";
            echo "<input type='hidden' name='products_skus[]' value='{$key[sku]}' />";
            echo "<input type='hidden' name='products_differences[]' value='{$key[difference]}' />";
            echo "<tr><td>{$key[name]}</td><td>{$key[sku]}</td><td>{$key[difference]}</td></tr>";
        }
        echo "</table>";
        echo "</form>";
это то что называют спагетти код, невозможно читать, также этим ты лишаешь себя помощи IDE которая подсвечивает синтаксис хтмл
выводите хтмл снаружи тегов пхп, можно использовать Альтернативный синтаксис
 

Тугай

Новичок
Даже простые скрипты нужно сразу писать в "стиле" MVC. Это будет прочной базой для его расширения. Затраты на это минимальные.

Отделить логику и представление, для этого весь PHP код нужно переместить выше тега <html>.
Все echo переместить в функцию и создать плейсхолдер, наример, $view_content = view_export_table($products);, ну и наш плейсхолдер поместить на свое место вызовом echo $view_content;

$products - это M - model
код ниже тега <html> и функция view_export_table - это V view.
код выше тега <html> - C - controller

Ну и расчет $products, тоже в функцию $products = get_diff_products() переместить.
Логика контроллера будет явная и простая:
$products = get_diff_products();
$view_content = view_export_table($products);
 
Последнее редактирование:

kudraem

Новичок
Даже простые скрипты нужно сразу писать в "стиле" MVC. Это будет прочной базой для его расширения. Затраты на это минимальные.

Отделить логику и представление, для этого весь PHP код нужно переместить выше тега <html>.
Все echo переместить в функцию и создать плейсхолдер, наример, $view_content = view_export_table($products);, ну и наш плейсхолдер поместить на свое место вызовом echo $view_content;

$products - это M - model
код ниже тега <html> и функция view_export_table - это V view.
код выше тега <html> - C - controller

Ну и расчет $products, тоже в функцию $products = get_diff_products() переместить.
Логика контроллера будет явная и простая:
$products = get_diff_products();
$view_content = view_export_table($products);
А что бы Вы посоветовали почитать про MVC? Давно хотел научиться, очень много чужого кода в этом стиле.
 

WMix

герр M:)ller
Партнер клуба
kudraem
второй пункт читай у A1x
а 3й пункт, рекурсивная функция включающая в себе запросы, патерны, расчеты, маппинг, и сборку html кода это жесть. читай совет Тугай
 

Тугай

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

Есть структурное программирование (if then else, for, function, ...), есть объектно-оренированное (class, object, method, public, property, ...).
Если понимаешь то что в скобках, то вроде как знаешь, для веб-программирования первыми словами в скобках я бы поставил MVC и CRUD.
 

keltanas

marty cats
debug_interfaces - крутая штука, не знал.
На счет крутости не знаю. Вот что бестолковая - это точно. Зато светит все пути на сайте и четко дает понять на чем сайт, т.к. почти никто никогда дебуг-режим на продакшене не отключает.
 
Сверху