Заполнение массива данными php

237
21 сентября 2018, 06:50

Есть форма ввода. Надо заполнить массив данными из формы и вывести. Но у меня не получается аккумулировать записи. Каждый ввод стирает предыдущий. Как сделать так чтобы записи добавлялись к массиву?

<form action="/notes.php" method="post"> 
	<label for="text">Новая запись:</label> 
	<input type="text" name="text" id="text"><br> 
	<button type="submit">Добавить новую запись</button> 
	</form> 
<?php 
$arr = []; 
$newNote = $_POST['text']; 
$arr[] = $newNote; 
foreach ($arr as $value){ 
	echo $value; 
} 
?>

Answer 1

Как сделать так чтобы записи добавлялись к массиву?

Использовать сессию для ввода/вывода notes.php, до завершения надо сохранить в один из вариантов представленных ниже:

<?php
session_start();
// Добавит запись потом можно будет вывести
$_SESSION['notes'][] = filter_var ($_POST['text'], FILTER_SANITIZE_STRING);

Использовать файлы для ввода/вывода записей (не самый удачный)

$note = filter_var ($_POST['text'], FILTER_SANITIZE_STRING);
$yor_file = file_put_contents('notes.txt', $note.PHP_EOL , FILE_APPEND | LOCK_EX);

Использовать базу данных для ввода/вывода записей (рекомендованный)

$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
// set the PDO error mode to exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "INSERT INTO notes (text) VALUES (:text)";
$stmt = $conn->prepare($sql);
$stmt->bindParam(':text', $_POST['text']);
$stmt->execute();

Будет логичнее потом расспечатывать, на той странице которая послала эти записи.

Скорее в связке с сессией, которая до завершения сохранит все в базу данных, будет оптимальным решением.

  • $_SESSION - Ассоциативный массив, содержащий переменные сессии, которые доступны для текущего скрипта.
  • file_put_contents - Если notes.txt не существует, файл будет создан. Добавит в файл новую запись FILE_APPEND.
  • Класс PDO - Представляет соединение между PHP и сервером базы данных.
Answer 2

Сомнительная у Вас идея, но пусть так:

<form action="/notes.php" method="post">
    <label for="text">Новая запись:</label>
    <input type="text[]" name="text[]" id="text"><br>
<?php
if (isset($_POST['text']))
foreach ($_POST['text'] as $value){
    echo '<input type="hidden" name="text[]" value="'.$value.'">';
}
?>
    <button type="submit">Добавить новую запись</button>
    </form>
<?php
if (isset($_POST['text']))
foreach ($_POST['text'] as $value){
    echo $value.'<BR>';
}
?>
READ ALSO
Переключение чекбокса

Переключение чекбокса

На странице есть чекбокс

255
Фильтр подбора товаров и вывода из бд

Фильтр подбора товаров и вывода из бд

Есть форма фильтра, в этой форме 4 select(выбора категории товара) и кнопка подобрать товарНужно сделать так чтобы при нажатии на эту кнопку выводились...

236
При запуске проекта yii2-advance в логах nginx выпадают ошибки ядра, в чем может быть проблема?

При запуске проекта yii2-advance в логах nginx выпадают ошибки ядра, в чем может быть проблема?

FastCGI sent in stderr: "PHP message: PHP Warning: Invalid argument supplied for foreach() in /var/www/yii/crmtest/vendor/yiisoft/yii2/helpers/BaseArrayHelperphp on line 123 PHP message: PHP Fatal error: Uncaught exception 'yii\base\InvalidConfigException'...

227
Поиск постов по времени в админке WordPress

Поиск постов по времени в админке WordPress

Как добавить в админку WordPress при поиске записей возможность найти пост по дате и по времени? Например, в день на сайт добавляется по 40-100 постовЯ...

204