AGorbunoff
@AGorbunoff
Учусь:)

PHP Class: file_get(put)_contents. Как сохранять значения формы в разные файлы?

С Праздником трудящихся коллеги! Провожу первомай дома в трудах:)

Как значения формы сохранять в разные файлы и считывать. Заморочился с освоением Class. Но не могу дать ума как это реализовать.

На входе имеется Class, который считывает и сохраняет значения формы в один файл:

class Admin {

    // Пути к файлам
    protected $basePath;
    protected $configFile;
    protected $valuesFile;

    // Настройки с их значениями
    protected $settings = array();

    // Конструктор
    function __construct() {
        $this->basePath = $_SERVER['DOCUMENT_ROOT'] . '/admin/';
        $this->configFile = $this->basePath . 'config/config.json';
        $this->valuesFile = $this->basePath . 'config/values.json';

        $this->setSettings();
    }

    // Инициализируем настройки
    private function setSettings() {
        $config = json_decode(file_get_contents($this->configFile), true);
        $values = json_decode(file_get_contents($this->valuesFile), true);

        foreach($config as $item) {
            $value = isset($values[$item['key']]) ? $values[$item['key']] : $item['default'];
            if ($item['type'] == 'number') {
                $value = (int)$value;
            }
            if ($item['type'] == 'checkbox') {
                $value = $value === 'true';
            }

            array_push($this->settings, array(
                'utm' => $item['utm'],
                'key' => $item['key'],
                'title' => $item['title'],
                'type' => $item['type'],
                'list' => isset($item['list']) ? $item['list'] : null,
                'value' => $value
            ));
        }
    }

    // Возвращаем все настройки
    public function getSettings() {
        return $this->settings;
    }

    // Возвращаем значение одной настройки
    public function getValue($key) {
        $index = array_search($key, array_column($this->settings, 'key'));

        return $index !== false
            ? $this->settings[$index]['value']
            : null;
    }

  /* БЫЛО
    // Сохраняем настройки в файл
    public function save($settings) {

        $value = 'utm'; // вот здесь нужно вставить значение utm из поля формы 

        file_put_contents($this->basePath . 'config/'.$value.'.json', json_encode($settings));
        $this->setSettings();
    }  */

/* СТАЛО (РЕШЕНО) */

   // Сохраняем настройки в папку и новый файл 
    public function save($settings) {
        $utm = $_POST["utm"];
        file_put_contents($this->basePath . 'config/utm/'.$utm.'.json', json_encode($settings));
        $this->setSettings();
    }

}


Как получать значение $value = 'utm'; из поля формы? Может ajax-ом как-то?

Но как это реализовать грамотно классами в php7?
  • Вопрос задан
  • 135 просмотров
Решения вопроса 3
TTATPuOT
@TTATPuOT
https://code.patriotovsky.ru/
1) Рандомизировать название файла или использовать метку времени вместо названия, или, и то, и то.
2) Получить так же, как вы получаете другие данные из формы
Ответ написан
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
Во первых - что у вас за класс такой странный Admin? За что он вообще отвечает? Похоже что там какая-то каша из свойств и путей... Или название не сильно соответствует назначению класса, или вообще не понятно зачем этот класс админу...

Во вторых - утм метка как бы состоит не из одного поля обычно, и кроме того - она не уникальна, соответственно в качестве имени/ключа для хранения данных не подходит.

В третьих если аргумент у вас изнутри объекта не виден, логично предположить что он должен передаваться как аргумент в метода класса.

Но вам вообще сначала бы разобраться с во первых и во вторых.
Ответ написан
AGorbunoff
@AGorbunoff Автор вопроса
Учусь:)
Спасибо всем, кто откликнулся и отдельное спасибо Автору кода Webdevkin.

Упустил из внимания базовый вывод переменной из формы!
$_POST["utm"];

В итоге, оконцовка class Admin получилась такой:
// Сохраняем настройки в файл
    public function save($settings) {
        $utm = $_POST["utm"];
        file_put_contents($this->basePath . 'config/utm/'.$utm.'.json', json_encode($settings));
        $this->setSettings();
    }


И при каждом сохранении формы, создается новый файл .json в папке: utm

5eac605c997f1839363251.jpeg
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы