Как упростить код?

172
08 марта 2019, 07:00
    <?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
include ('engine.php');
$db = new Database;
$ins = array(
    'type_product' => (array(
        'post' => $_POST['type_product'],
        'name' => 'Тип продукта',
        'type' => 'text',
    )) ,
    'company_product' => (array(
        'post' => $_POST['company_product'],
        'name' => 'Компания',
        'type' => 'text',
    )) ,
    'color_product' => (array(
        'post' => $_POST['color_product'],
        'name' => 'Цвет продукта',
        'type' => 'text',
    )) ,
    'line_product' => (array(
        'post' => $_POST['line_product'],
        'name' => 'Линейка',
        'type' => 'text',
    )) ,
    'bend_product' => (array(
        'post' => $_POST['bend_product'],
        'name' => 'Изгиб',
        'type' => 'text',
    )) ,
    'thickness_product' => (array(
        'post' => $_POST['thickness_product'],
        'name' => 'Толщина',
        'type' => 'text',
    )) ,
    'long_product' => (array(
        'post' => $_POST['long_product'],
        'name' => 'Длина',
        'type' => 'text',
    )) ,
    'unit_of_measure_product' => (array(
        'post' => $_POST['unit_of_measure_product'],
        'name' => 'Еденица измерения',
        'type' => 'text',
    )) ,
    'price_product' => (array(
        'post' => $_POST['price_product'],
        'name' => 'Цена',
        'type' => 'text',
    )) ,
    'mix_product' => (array(
        'post' => $_POST['mix_product'],
        'name' => 'Набор',
        'type' => 'text',
    )) ,
    'quantity_product' => (array(
        'post' => $_POST['quantity_product'],
        'name' => 'Количество',
        'type' => 'text',
    )) ,
    'lines_product' => (array(
        'post' => $_POST['lines_product'],
        'name' => 'Линии',
        'type' => 'text',
    )) ,
    'size_product' => (array(
        'post' => $_POST['size_product'],
        'name' => 'Размер',
        'type' => 'text',
    )) ,
    'composition_product' => (array(
        'post' => $_POST['composition_product'],
        'name' => 'Состав',
        'type' => 'text',
    )) ,
    'description_product' => (array(
        'post' => $_POST['description_product'],
        'name' => 'Описание',
        'type' => 'text',
    )) ,
    'image_product' => (array(
        'post' => 'images/' . 'basename' . $_FILES['image_product']['name'],
        'name' => 'Изображение',
        'type' => 'file',
    )) ,
);
if (isset($_POST['submit']))
  {
    if (is_array($ins))
      {
        $db->insert('product', $ins);
        move_uploaded_file($_FILES['image_product']['tmp_name'], $ins['image_product']['post']);
      }
  }
?>
<form method="post" enctype="multipart/form-data">
<?php
foreach($ins as $key => $value)
  {
    echo '<p><input type="' . $value['type'] . '" name="' . $key . '" placeholder="' . $value['name'] . '"></p>';
  }
?>
<input type="submit" name="submit" value="Отправить">
</form>
Answer 1

раз уж никто не пишет, то замечу, что проверка в коде

is_array($ins)

всегда будет возвращать true, т.к. собственно массив у вас определен выше.

Для повышения читаемости, используйте краткую запись массива [] вместо array().

Описания полей можно несколько упростить, заменив код вида

$ins = array(
    'type_product' => (array(
        'post' => $_POST['type_product'],
        'name' => 'Тип продукта',
        'type' => 'text',
    )) ,
    'company_product' => (array(
        'post' => $_POST['company_product'],
        'name' => 'Компания',
        'type' => 'text',
    )) ,

на массив определений текстовых полей

$txtFields = [
   'type_product' => "Тип продукта",
   'company_product' =>  "Компания",
     ....          
];

с помощью которого затем получить

$data = array_map(function($k, $v) {
             return [
                  'post' => $_POST[$k],
                  'name' => $v,
                  'type' => 'text',
                 ];
         }, array_keys($txtFields), $txtFields);

ну или каким иным способом.

В любом случае, вам следует разделить описание конфигурации полей, и получение их значений из $_POST. Как логически в коде, так и структурно в разные массивы. Вышеприведенный кусок кода формирует массив по вашему шаблону, однако, ведь, например, нет смысла передавать строку Тип продукта в метод вставки в БД? Конфиг надо хранить водном месте, данные в другом.

Answer 2

Почти все поля типовые. Вынести разницу в отдельный массив поменьше и потом уже собрать полную версию для запроса к БД:

$fields = [
    'type_product' => 'Тип продукта',
    'company_product' => 'Компания',
    'color_product' => 'Цвет продукта',
    ..
    'composition_product' => 'Состав',
    'description_product' => 'Описание',
];
$ins = [];
foreach ($fields as $n => $v) {
    $ins[$n] = ['post' => $_POST[$v], 'name' => $n, 'type' => 'text'];
}
$ins['image_product'] = [ ..
READ ALSO
Найти файл и отправить на Email

Найти файл и отправить на Email

подскажите пожалуйста как средствами PHP найти и отправить файл на Email? Пробовал вот так, отправляет только имя файла

138
Две пары двойных кавычек в json

Две пары двойных кавычек в json

Приходит мне от API такой вот json:

118
Laravel передача информации между сервисами через очередь

Laravel передача информации между сервисами через очередь

Вопрос такой, есть два микро-сервиса, один создает транзакцию и кидает в очередь (rabbitmq) второй сервис должен ее подхватить и обработатьСтолкнулись...

136
Как скрыть часть url?

Как скрыть часть url?

Как можно преобразовать такой url http://sitenameru/katalog/nazvaniekategorii/ в такой: http://sitename

183