|
|
|
| Подскажите пожалуйста. что надо добавить, чтобы данные в файле, записанные через форму, и не стирались в момент обновления страницы (F5)
Работает форма правильно, но почему тогда при обновлении стирает файл ?
<?php
$person = $_POST['person']; // сохраняемая переменная
$message = $_POST['message']; // сохраняемая переменная
$talk_back_ok = "msg.txt"; // переменная, определяющая файл для записи
echo "<form action=index11.php method=post>"; // ссылка на данную страницу
echo "1 значение <input type=text name=person size=15 maxlength=30 value=$person>";
echo "2 значение <input type=text name=message size=15 maxlength=50 value=$message>";
echo "<input type=submit value=Отправь !>";
echo "</form>";
$moskvaGMT = "+3"; // Москва, коррекция на 3 часа, чтобы сделать Московское время
$time = gmDate("d : F - H : i",time()+3600*$moskvaGMT); // Москва
$fp = fopen($talk_back_ok, "w"); // открытие файла для записи
$fw = fwrite($fp, "<FONT SIZE=\"-2\" color=\"red\"><I>$time</I></FONT> 1 значение <b>$person</b></FONT> 2 значение <b>$message</b>");
fclose($fp);
echo "<BR><BR>";
include "msg.txt";// надпись заполнения из формы
?>
|
| |
|
|
|
|
|
|
|
для: Митя
(04.04.2016 в 11:42)
| | 'w' Открывает файл только для записи; помещает указатель в начало файла и обрезает файл до нулевой длины. Если файл не существует - пробует его создать.
http://php.net/manual/ru/function.fopen.php
лучше используйте file_put_contents | |
|
|
|
|
|
|
|
для: Valick
(04.04.2016 в 12:28)
| | так не получается... файл дописывается
file_put_contents сказано: Если filename не существует, файл будет создан. Иначе, существующий файл будет перезаписан
Файл в данном случае дописывает в конец, но не перезаписывает его
Мне бы хотелось, чтобы значение сохранялось, или переписывалось на новое
file_get_contents($file) схожий параметр что и fopen ($file, "a");
Может сделать через if но я не соображу как! | |
|
|
|
|
|
|
|
для: Митя
(04.04.2016 в 19:05)
| | >так не получается... файл дописывается
читайте внимательнее | |
|
|
|
|
|
|
|
для: Митя
(04.04.2016 в 11:42)
| | Valick прав file_put_contents лучше
У этой функции есть ключ FILE_APPEND который дописывает в файл
В вашем коде надо перед записью сделать проверку, хотя бы на существование переменной $_POST
без if ну никак не обойтись. хотя можно извратится с case =)
если поля не заполнены то при обновлении страницы в файле у вас должно получится что то типо этого
<FONT SIZE=\"-2\" color=\"red\"><I></I></FONT> 1 значение <b></b></FONT> 2 значение <b></b>
|
POST переменные не инициализированы, а код отвечающий за запись все равно выполнился.
Вывод ошибок задавлен или отправляется в лог поэтому и не видите. | |
|
|
|
|
|
|
|
для: indexer
(10.04.2016 в 20:07)
| | Да !! верно, благодаря switch ($_GET["i"]) { я и выкручиваюсь, только и в этом случае и не в этом...
$person = $_POST['person'];
| Благодаря данному коду не затирается информация во фрейме, после нажатии кнопки, но если уйти со страницы и вернуться данных не будет.
Но этот вопрос буду отдельно рассматривать, как и тот тот вопрос, что после заполнения пробел не учитывается и после пробела данные во фрейме не показаны.
Не могу решить следующий вопрос, хотел правда новую тему открыть, но думаю, что данные две темы часто рядом!
Я произвожу запись в файл... таких записей много, каждая запись на своём ...txt
а другая страница показывает все записи, с новой строки, но..., если запись в одном текстовом стёрта, у меня данной строки нет, и имеющие записи поднимаются вверх на данное пустое место.
Использовал для этого условие if.
Всё получается, но в конце записи при новой строке пишется 1. Как её убрать ???
Я перечитал strlen, mb_strlen, iconv_strlen и везде один результат.
только на mb_strlen написано, что "Многобайтный символ вычисляется как 1" а в strlen не описано такого, но выводит всё равно... может эта ошибка и почему она ?
вот моё рукоприкладство (перенос строки добавил при записи в текстовый, что выше первый код) :
$str2 = strlen(file_get_contents($str));
if($str2 > 100) { echo include("msg.txt"); } else { echo "Записи нет"; }
|
то есть, если в текстовом запись менее 100 байт или ровно, то не высвечивается информация.
Если больше 100 байт, информация будет выведена на экран
А вот с 1 в конце вывода не могу ничего придумать.
Подскажите что не так? | |
|
|
|
|
|
|
|
для: Митя
(13.04.2016 в 22:44)
| | Честно сказать плохо понял, почему используя много текстовых файлов вы не перейдете уже на какую то из баз, mysql например или mariaDB
strlen возвращает не длинну байт, а длину строки.
инклюдить msg.txt в код php, да еще перед этим вызывать echo это очень неправильно. может так лучше?
<?php
$content =file_get_contents($str);
$str2 = strlen($content);
if($str2 > 100) { echo $content; } else { echo "Записи нет"; }
|
Если уйти со страницы и потом вернутся от куда возьмутся данные? браузер с сервером работают так: отправил запрос, получил данные, друг о друге забыли. Что бы этого не происходило, есть сессии (короткие до закрытия браузера)и есть куки(подольше). Браузер серверу отправляет id сессии либо кукис и сервер его вспоминает, но если пользователь не нажмет отправить, а уйдет со страницы все данные потеряются. Что бы данные не терялись их нужно динамично на момент заполнения отправлять на сервер ajax, jquery либо другим каким то javascript и в обратную сторону при совпадении сессии печатать в поля формы. | |
|
|
|
|
|
|
|
для: indexer
(13.04.2016 в 23:41)
| | Спасибо, работает
Действительно, думаешь сложней, на самом деле всё проще... зацикливаешься на одном, а отойти, оглянуться - сложно !!!
С базой данных я пока не работал, её пока не знаю. Медленно продвигаюсь по программированию... медленно, но в нужную сторону!!!
Действительно, на вашей помощи я сервер собрал, и без данного форума врят-ли что получилось бы... зря некоторые катят бочку, а то читал несколько страниц - поражался !!!
'Честно сказать плохо понял, почему используя много текстовых файлов'
если интересно что я задумал, то:
Есть игра, в союзе максимум 30 человек.
В игре есть задания, которые надо выполнить.. выбор большой.
я делаю так, чтобы каждый указал со своей страницы что ему надо (редактирование, стирание), а на общей странице показывалось все надписи без редактирования.
И если какой-то надписи нет, то она не показывается, а другие надписи поднимаются.
Мне придётся делать у каждого человека 2 текстовых документа... в одном имя, в другом желания...
Имя отдельно, чтобы стирать желания, а имя оставалось, ибо его не вносить опять.
И ещё причина, то, что я так пока и не сообразил как зайти на страницу формы и файл не стереть
не могу пока разобраться с FILE_APPEND, тем самым сделал форму записи имени отдельно.
А условие через if создам на отсутствие показа текстовый-(желания), а на показ оба текстовых
В начале хоть так сделаю, а потом от этого буду профессионализм оттачивать
СПАСИБО ЗА ПОМОЩЬ ! | |
|
|
|
|
|
|
|
для: Митя
(16.04.2016 в 16:31)
| | В базах нет ни чего сложного. Хранить все в текстовых файлах намного сложнее и актуально только для очень маленького сайта или для использования cli версии php.
В первую очередь стоит продумать безопасность. Требуется максимальное внимание к входящим данным, но с минимальным "удивлением"
В файл без, достаточных проверок входящих данных, можно написать все что угодно, а потом обратившись к нему, не обязательно напрямую, выполнить написанное. | |
|
|
|
|
|
|
|
для: indexer
(16.04.2016 в 22:09)
| | >актуально только для очень маленького сайта
давно уже неактуально ни для какого сайта | |
|
|
|
|
|
|
|
для: Valick
(16.04.2016 в 22:24)
| | Ну почему же? все определяется удобством. на своем сайте я использую временные текстовые файлы, по которым затем конечно бегает скрипт добавляя нужное в базу. Это можно назвать неким временным хранилищем. Мне так удобнее и по производительности быстрее. Мне не нужны все данные из файла так как они там однотипные. Писать все в базу затем удалять лишнее фрагментируя таблицу и увеличивая накладные расходы - бессмысленно. Мне достаточно найти уникальные значения в файле и один раз в час добавить ключевые значение в таблицу очистив при этом файл. | |
|
|
|
|
|
|
|
для: indexer
(17.04.2016 в 02:00)
| | >Это можно назвать неким временным хранилищем
всё тоже самое делается в буферной таблице
и переносится в основную таблицу единтсвенным запросом INSERT ... SELECT | |
|
|
|
|
|
|
|
для: Valick
(17.04.2016 в 07:57)
| | что есть буферная таблица? из мануала пожалуйста
http://dev.mysql.com/doc/search/?q=bufer+table
ничего похожего не найдено | |
|
|
|