Как записать данные в массив на стороне клиента?

Выполняю дз по php. Условие задачи:

В файле index.php создать массив объектов класса Product и форму, которая состоит из двух текстовых полей и кнопки Add. По клику на кнопку Add в массив добавляется новый объект со значениями, которые написаны в форме.

Как сделать, чтобы по нажатию кнопки что-то записывалось в массив на стороне клиента?


Ответы (1 шт):

Автор решения: Вадим Никитин

Решение в лоб и на коленке. На выходе массив объектов класса Product.

<?
class Product {
    public $data = [];
    public function __set($name = '', $value = '') {
        $this->data[$name] = $value;
    }
}

$result = [];
if(isset($_POST['f1']) && isset($_POST['f2'])) {
    $key = 0;
    if(is_file($_SERVER['DOCUMENT_ROOT'].'/dz.txt')) {
        $res = file_get_contents($_SERVER['DOCUMENT_ROOT'].'/dz.txt');
        $res = json_decode($res);

        foreach($res as $key => $val) {
            $product[$key] = new Product;
            $product[$key]->field_1 = $val->data->field_1;
            $product[$key]->field_2 = $val->data->field_2;
            $result[] = $product[$key];
        }
    }

    $key = ((int)$k > 0) ? ++$k : 0;
    $product[$key] = new Product;
    $product[$key]->field_1 = $_POST['f1'];
    $product[$key]->field_2 = $_POST['f2'];
    $result[] = $product[$key];
    file_put_contents($_SERVER['DOCUMENT_ROOT'].'/dz.txt', json_encode($result));
}
?>

<form method="post" action="" name="form">
    <label>Field 1</label>
    <input type="text" name="f1"><br>
    <label>Field 2</label>
    <input type="text" name="f2"><br>
    <input type="submit" value="Add">
</form>

<?
if(is_file($_SERVER['DOCUMENT_ROOT'].'/dz.txt')) {
    echo 'Результат:'."<br>";
    $res = file_get_contents($_SERVER['DOCUMENT_ROOT'].'/dz.txt');
    $res = json_decode($res);

    foreach($res as $key => $val) {
        $product[$key] = new Product;
        $product[$key]->field_1 = $val->data->field_1;
        $product[$key]->field_2 = $val->data->field_2;
    }

    // Вывод результата
    echo '<pre>';
    print_r($product);
    echo '</pre>';
}
?>
→ Ссылка