Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: При обновлении страницы запись текста стирается
 
 автор: Митя   (04.04.2016 в 11:42)   письмо автору
 
 

Подскажите пожалуйста. что надо добавить, чтобы данные в файле, записанные через форму, и не стирались в момент обновления страницы (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 значение &nbsp; <b>$person</b></FONT>&nbsp; 2 значение &nbsp; <b>$message</b>");
fclose($fp);

echo 
"<BR><BR>";
include 
"msg.txt";// надпись заполнения из формы
?>

  Ответить  
 
 автор: Valick   (04.04.2016 в 12:28)   письмо автору
 
   для: Митя   (04.04.2016 в 11:42)
 

'w' Открывает файл только для записи; помещает указатель в начало файла и обрезает файл до нулевой длины. Если файл не существует - пробует его создать.

http://php.net/manual/ru/function.fopen.php

лучше используйте file_put_contents

  Ответить  
 
 автор: Митя   (04.04.2016 в 19:05)   письмо автору
 
   для: Valick   (04.04.2016 в 12:28)
 

так не получается... файл дописывается
file_put_contents сказано: Если filename не существует, файл будет создан. Иначе, существующий файл будет перезаписан
Файл в данном случае дописывает в конец, но не перезаписывает его
Мне бы хотелось, чтобы значение сохранялось, или переписывалось на новое

file_get_contents($file) схожий параметр что и fopen ($file, "a");

Может сделать через if но я не соображу как!

  Ответить  
 
 автор: Valick   (05.04.2016 в 09:32)   письмо автору
 
   для: Митя   (04.04.2016 в 19:05)
 

>так не получается... файл дописывается
читайте внимательнее

  Ответить  
 
 автор: indexer   (10.04.2016 в 20:07)   письмо автору
 
   для: Митя   (04.04.2016 в 11:42)
 

Valick прав file_put_contents лучше
У этой функции есть ключ FILE_APPEND который дописывает в файл

В вашем коде надо перед записью сделать проверку, хотя бы на существование переменной $_POST
без if ну никак не обойтись. хотя можно извратится с case =)

если поля не заполнены то при обновлении страницы в файле у вас должно получится что то типо этого
<FONT SIZE=\"-2\" color=\"red\"><I></I></FONT> 1 значение &nbsp; <b></b></FONT>&nbsp; 2 значение &nbsp; <b></b>

POST переменные не инициализированы, а код отвечающий за запись все равно выполнился.
Вывод ошибок задавлен или отправляется в лог поэтому и не видите.

  Ответить  
 
 автор: Митя   (13.04.2016 в 22:44)   письмо автору
 
   для: 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 в конце вывода не могу ничего придумать.

Подскажите что не так?

  Ответить  
 
 автор: indexer   (13.04.2016 в 23:41)   письмо автору
 
   для: Митя   (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 и в обратную сторону при совпадении сессии печатать в поля формы.

  Ответить  
 
 автор: Митя   (16.04.2016 в 16:31)   письмо автору
 
   для: indexer   (13.04.2016 в 23:41)
 

Спасибо, работает
Действительно, думаешь сложней, на самом деле всё проще... зацикливаешься на одном, а отойти, оглянуться - сложно !!!

С базой данных я пока не работал, её пока не знаю. Медленно продвигаюсь по программированию... медленно, но в нужную сторону!!!
Действительно, на вашей помощи я сервер собрал, и без данного форума врят-ли что получилось бы... зря некоторые катят бочку, а то читал несколько страниц - поражался !!!


'Честно сказать плохо понял, почему используя много текстовых файлов'

если интересно что я задумал, то:
Есть игра, в союзе максимум 30 человек.
В игре есть задания, которые надо выполнить.. выбор большой.
я делаю так, чтобы каждый указал со своей страницы что ему надо (редактирование, стирание), а на общей странице показывалось все надписи без редактирования.
И если какой-то надписи нет, то она не показывается, а другие надписи поднимаются.
Мне придётся делать у каждого человека 2 текстовых документа... в одном имя, в другом желания...
Имя отдельно, чтобы стирать желания, а имя оставалось, ибо его не вносить опять.
И ещё причина, то, что я так пока и не сообразил как зайти на страницу формы и файл не стереть
не могу пока разобраться с FILE_APPEND, тем самым сделал форму записи имени отдельно.
А условие через if создам на отсутствие показа текстовый-(желания), а на показ оба текстовых

В начале хоть так сделаю, а потом от этого буду профессионализм оттачивать

СПАСИБО ЗА ПОМОЩЬ !

  Ответить  
 
 автор: indexer   (16.04.2016 в 22:09)   письмо автору
 
   для: Митя   (16.04.2016 в 16:31)
 

В базах нет ни чего сложного. Хранить все в текстовых файлах намного сложнее и актуально только для очень маленького сайта или для использования cli версии php.

В первую очередь стоит продумать безопасность. Требуется максимальное внимание к входящим данным, но с минимальным "удивлением"
В файл без, достаточных проверок входящих данных, можно написать все что угодно, а потом обратившись к нему, не обязательно напрямую, выполнить написанное.

  Ответить  
 
 автор: Valick   (16.04.2016 в 22:24)   письмо автору
 
   для: indexer   (16.04.2016 в 22:09)
 

>актуально только для очень маленького сайта
давно уже неактуально ни для какого сайта

  Ответить  
 
 автор: indexer   (17.04.2016 в 02:00)   письмо автору
 
   для: Valick   (16.04.2016 в 22:24)
 

Ну почему же? все определяется удобством. на своем сайте я использую временные текстовые файлы, по которым затем конечно бегает скрипт добавляя нужное в базу. Это можно назвать неким временным хранилищем. Мне так удобнее и по производительности быстрее. Мне не нужны все данные из файла так как они там однотипные. Писать все в базу затем удалять лишнее фрагментируя таблицу и увеличивая накладные расходы - бессмысленно. Мне достаточно найти уникальные значения в файле и один раз в час добавить ключевые значение в таблицу очистив при этом файл.

  Ответить  
 
 автор: Valick   (17.04.2016 в 07:57)   письмо автору
 
   для: indexer   (17.04.2016 в 02:00)
 

>Это можно назвать неким временным хранилищем
всё тоже самое делается в буферной таблице
и переносится в основную таблицу единтсвенным запросом INSERT ... SELECT

  Ответить  
 
 автор: indexer   (18.04.2016 в 15:40)   письмо автору
 
   для: Valick   (17.04.2016 в 07:57)
 

что есть буферная таблица? из мануала пожалуйста
http://dev.mysql.com/doc/search/?q=bufer+table
ничего похожего не найдено

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования