Основы PHP. Запись в файл методом POST. Часть 1.
В прошлый раз мы с вами изучили функцию
, и создал итак называемый файл базы данных, где будет храниться передаваемая информация, между панелью управления и монитором. Теперь нам необходимо доработать файл controlpanel.php, что бы он мог перезаписывать информацию в нашей базе.
Открываем файл controlpanel.php, в редакторе Notepad++ и после тега body открываем код PHP и пишем:
//переменная ошибок
$error=array();
Это переменная, которая будет отвечать за проверку ошибок, на вводимые символы. Далее подключаем функцию передачи данных с уже знакомым нам методом POST и с функцией проверки, на заполнение переменной, также прописываем все переменные и их значения которые будем передавать:
//обработчик формы
if (!empty($_POST))
{
//проверка параметра
$name = $_POST['name'];
$amt = $_POST['amt'];
$year = $_POST['year'];
$sales = $_POST['sales'];
$goods = $_POST['goods'];
$name1 = $_POST['name1'];
$amt1 = $_POST['amt1'];
$year1 = $_POST['year1'];
$sales1 = $_POST['sales1'];
$goods1 = $_POST['goods1'];
Для записи в базу данных (файл db.php) нам необходимо создать переменную назовём её $var и создадим значение. В значение нам необходимо прописать всё то, что будет передано в базу. Это пожалуй самое большое значение переменной, из всех наших занятий, выглядит она следующим образом:
$var= "
<?php
\$name =\"$name\";
\$amt =\"$amt\";
\$year =\"$year\";
\$sales =\"$sales\";
\$goods =\"$goods\";
\$name1 =\"$name1\";
\$amt1 =\"$amt1\";
\$year1 =\"$year1\";
\$sales1 =\"$sales1\";
\$goods1 =\"$goods1\";
?>";
Чтобы значение переменной не выдало ошибку, косым слешем экранируем все переменные и двойные кавычки, как показано в верхнем коде.
Если хотим что бы некоторые поля были обязательны к заполнению, добавляем функцию проверки на переменные, например вот так:
if (empty($name))
$error['empty']='не введен параметр';
Открытие (fopen) и запись в файл.
Прежде чем мы продолжим, ознакомьтесь с таблицей № 1, где приведены параметры для, записи чтения и изменения файлов при их открытии с помощью функции fopen.
Таблица №1.
Режим |
Обозначение |
'r' |
Открытие на чтение (является значением по умолчанию). |
'w' |
Открытие на запись, содержимое файла удаляется, если файла не существует, создается новый файл. |
'x' |
Открытие на запись, если файла не существует, иначе исключение. |
'a' |
Открытие на до запись. Информация добавляется в конец файла. |
'b' |
открытие в двоичном режиме. |
't' |
открытие в текстовом режиме (является значением по умолчанию). |
'+' |
открытие на чтение и запись |
Теперь давайте добавим полный код который будет отвечать за запись и разберём его:
//если все нормально пишем в файл
if (empty($error))
{
//открываем
$f=fopen('db.php','w');
//блокируем
flock($f,2);
//запись с переводом строки
fwrite($f,$var."\n");
//закрытие
fclose($f);
/*переадресация , чтобы сбросить пост, это нужно чтобы при нажатии кнопки обновить
данные не добавились вновь*/
header('Location: '.$_SERVER['SCRIPT_NAME'].'?ok=1');
die();
}
}
//если есть ошибки выводим
if (!empty($error))
echo '<p>'.implode('',$error).'</p>';
if (isset($_GET['ok']))
echo '<p>данные записаны</p>';
И так первая функция:
if (empty($error)) - Будет проверять ошибки при добавлении записи в файл.
$f=fopen('db.php','w'); - Здесь открываем файл для записи, или если быть точнее для полной перезаписи. С указанием пути к файлу.
flock($f,2); - Эта функция позволяет блокировать файл, во время записи. Например, если во время записи страница будет, обновляется пользователем, (db.php) то запись не будет произведена.
fwrite($f,$var."\n"); - Запись с переводом строки, что бы весь код, не выстроился в одну линию.
fclose($f); - И закрываем файл после записи.
Пожалуй дальше всё и так понятно, поскольку исходный файл в архиве я практический весь прокомментировал. Единственное, на что хотелось бы обратить внимание это на функцию
header('Location: '.$_SERVER['SCRIPT_NAME'].'?ok=1');
die();
которая не даёт перезаписывать файл при обновлении страницы, а только после нажатия кнопки отправить.
Далее необходимо изменить саму форму отправки данных, но поскольку эта часть требует дополнительных объяснений, я решил разбить данную тему на две части, что бы не перегружать ваш мозг и закрепить знания!
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.