Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Автосохранение переменных

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Без описания
morph-x
Отправлено: 18 Октября, 2011 - 01:35:02
Post Id



Гость


Покинул форум
Сообщений всего: 111
Дата рег-ции: Июнь 2011  


Помог: 0 раз(а)




У меня есть переменная $var в которой находиться информация. Можно как либо сделать чтобы после каждого изменения этой переменной она автоматически сохранялась в файл (где-то слышал что действие к событию можно прицепить) или же это нереально?

Заранее большое спасибо!
 
 Top
morosit
Отправлено: 18 Октября, 2011 - 06:38:43
Post Id



Посетитель


Покинул форум
Сообщений всего: 307
Дата рег-ции: Июль 2010  
Откуда: Казахстан


Помог: 4 раз(а)




morph-x пишет:
действие к событию можно прицепить
вам PHP или JS
логика (на ПХП) примерно такая:
0. записываем переменную в файл, или базу.
1. в нужном месте проверяем равно ли значение переменной значению из файла.
2. если равно продолжаем работу, else записываем последнее значение и продолжаем работу.

как делать проверку, сравнение, запись, чтение файла читайте в уроках http://www.php.su/lessons/
 
 Top
Данил_123
Отправлено: 18 Октября, 2011 - 12:44:42
Post Id


Участник


Покинул форум
Сообщений всего: 1026
Дата рег-ции: Июнь 2011  
Откуда: rostov


Помог: 9 раз(а)




PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $var="one_text";
  3. mysql_connect("localhost", "root", "12345") or die ("no connect server");
  4. mysql_select_db(dbname) or die ("no connect base");
  5. $query="INSER INTO `tablename` values('$var') ";
  6. $result=mysql_query($query);
  7. if(!$result) echo "Не записало";
  8. $num = mysql_query("SELECT * FROM `tablename` WHERE `var` = '$var' LIMIT 1");
  9. if(mysql_num_rows($num)==0) $query";
  10. $results=mysql_query($query);
  11. if(!$results) echo "Не записано";
  12. mysql_close();
  13. ?>


Вроде так, не провераял

(Отредактировано автором: 18 Октября, 2011 - 12:51:52)



-----
http://mysitecost.ru
 
 Top
morph-x
Отправлено: 18 Октября, 2011 - 13:15:30
Post Id



Гость


Покинул форум
Сообщений всего: 111
Дата рег-ции: Июнь 2011  


Помог: 0 раз(а)




morosit пишет:
вам PHP или JS

Мне PHP. Как сравнивать значения, читать из файла и т.д. я уже знаю. Мне как раз нужно что бы не вызывать функцию перезаписи переменной после каждого ее изменения. Мне нужно чтобы к событию изменения переменной ($var = 'new_value';) прицепить действие которое уже будет записывать ее в файл. Но я тут подумал, можно же сохранять читать ее из файл в начале скрипта и сохранять в файл в конце. При следующем запуске скрипта, вначале, она будет иметь то значение, которое имела в конце предыдущего запуска скрипта. Но вопрос все одно остается открытым Улыбка
 
 Top
Данил_123
Отправлено: 18 Октября, 2011 - 13:52:17
Post Id


Участник


Покинул форум
Сообщений всего: 1026
Дата рег-ции: Июнь 2011  
Откуда: rostov


Помог: 9 раз(а)




morph-x пишет:
morosit пишет:
вам PHP или JS

Мне PHP. Как сравнивать значения, читать из файла и т.д. я уже знаю. Мне как раз нужно что бы не вызывать функцию перезаписи переменной после каждого ее изменения.[color=red][/color] Мне нужно чтобы к событию изменения переменной ($var = 'new_value';) прицепить действие которое уже будет записывать ее в файл. Но я тут подумал, можно же сохранять читать ее из файл в начале скрипта и сохранять в файл в конце. При следующем запуске скрипта, вначале, она будет иметь то значение, которое имела в конце предыдущего запуска скрипта. Но вопрос все одно остается открытым Улыбка


Сообщением выше сказано, а если нужно с выводом, то вот:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $var="one_text";
  3. mysql_connect("localhost", "root", "12345") or die ("no connect server");
  4. mysql_select_db(dbname) or die ("no connect base");
  5. $query="INSER INTO `tablename` values('$var') ";
  6. $result=mysql_query($query);
  7. if(!$result) echo "Не записало";
  8. $num = mysql_query("SELECT * FROM `tablename` WHERE `var` = '$var' LIMIT 1");
  9. if(mysql_num_rows($num)==0) $query";
  10. $results=mysql_query($query);
  11. if(!$results) echo "Не записано";
  12. //вывод 1(стандартный)
  13. print '$var';
  14. //вывод 2(из базы)
  15. $rows=mysql_query("SELECT * FROM `table`");
  16. while($row=mysql_fetch_array($rows));
  17. echo $row['var']; //Заметь кавычки не нужны
  18. mysql_close();
  19. ?>


-----
http://mysitecost.ru
 
 Top
morph-x
Отправлено: 18 Октября, 2011 - 14:13:49
Post Id



Гость


Покинул форум
Сообщений всего: 111
Дата рег-ции: Июнь 2011  


Помог: 0 раз(а)




Данил_123 пишет:
Сообщением выше сказано, а если нужно с выводом, то вот...

Я так понимаю этот код сначала записывает значение $var в БД, а затем выводит его (сначала обычно потом из БД). Но к чему все это? Вы наверное не так меня поняли. Скорее всего то что я задумал невозможно сделать, но мне вполне хватит читать переменную из файла (или БД) в начале скрипта, а в конце скрипта записывать ее обратно в файл (или БД).
 
 Top
illy
Отправлено: 18 Октября, 2011 - 14:23:45
Post Id



Участник


Покинул форум
Сообщений всего: 1117
Дата рег-ции: Июль 2011  
Откуда: от верблюда)


Помог: 28 раз(а)




если что - можно и через аякс сделать


-----
Всё гениальное - просто
И ещё проще, если ты - индиго
 
 Top
Данил_123
Отправлено: 18 Октября, 2011 - 14:43:07
Post Id


Участник


Покинул форум
Сообщений всего: 1026
Дата рег-ции: Июнь 2011  
Откуда: rostov


Помог: 9 раз(а)




morph-x, возможно и не понял, но как понял так и сделал.. Что при каждом изменение(+выполнения скрипта) переменная будет проверяться если такую водили, то скрипт промолчит и просто выведет переменную $var если переменная $var изменила значение, то это значение записывается в базу и выводится на экран.. Я так понял
morph-x пишет:
но мне вполне хватит читать переменную из файла (или БД) в начале скрипта
Рад, то что писал не впустую)
Только вывод из базы 15-17 строки (т.е конец)


-----
http://mysitecost.ru
 
 Top
morosit
Отправлено: 18 Октября, 2011 - 15:00:01
Post Id



Посетитель


Покинул форум
Сообщений всего: 307
Дата рег-ции: Июль 2010  
Откуда: Казахстан


Помог: 4 раз(а)




если вопрос остается открытым, может расскажете что сделать хотите (вдруг кто предложит вариант получше)
 
 Top
EuGen Администратор
Отправлено: 18 Октября, 2011 - 15:09:20
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Насколько я понял, нужно отслеживание изменения переменной прямо в скрипте.
В этом случае обычное присваивание слуедует заменить некоторой пользовательской функцией, например:
PHP:
скопировать код в буфер обмена
  1. function assign(&$mVar, $value, $logfile='file.log')
  2. {
  3.    if($mVar!==$value)
  4.    {
  5.       file_put_contents($logfile, $value);
  6.    }
  7.    return $mVar=$value;
  8. }
  9.  
  10. $test = 'foo';
  11. $test = assign($test, 'bar');
  12. //var_dump($result);
  13. assign($test,'baz');
  14. //var_dump($result);

И не присваивать значение "напрямую", вместо чего всегда использовать подобную функцию.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Данил_123
Отправлено: 18 Октября, 2011 - 15:28:35
Post Id


Участник


Покинул форум
Сообщений всего: 1026
Дата рег-ции: Июнь 2011  
Откуда: rostov


Помог: 9 раз(а)




Объясните подробней, что и при чем должно выполняться? Если мой вариант не подошел напишите это.
Спойлер (Отобразить)


-----
http://mysitecost.ru
 
 Top
morph-x
Отправлено: 19 Октября, 2011 - 23:38:45
Post Id



Гость


Покинул форум
Сообщений всего: 111
Дата рег-ции: Июнь 2011  


Помог: 0 раз(а)




morosit пишет:
если вопрос остается открытым, может расскажете что сделать хотите (вдруг кто предложит вариант получше)


Нужно создать что-то типа маленькой CMS. Хранить данные я решил в переменной $_DB. Просто у меня система работает (точнее работала, теперь я ее немного изменил) так, что скрипт может прерваться во многих местах, и не дойдет до конца. А писать функцию сохранения данных в файл после каждого действия как-то не правильно.

EuGen пишет:
Насколько я понял, нужно отслеживание изменения переменной прямо в скрипте. В этом случае обычное присваивание слуедует заменить некоторой пользовательской функцией, например...


Я как-то не подумал (торможу немного). Большое спасибо!


Данил_123 пишет:
Объясните подробней, что и при чем должно выполняться? Если мой вариант не подошел напишите это.


Мне нужно то, что постом выше написал EuGen.
 
 Top
Stierus Супермодератор
Отправлено: 20 Октября, 2011 - 09:43:32
Post Id



Рекордсмен по количеству сообщений за 7 дней


Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008  
Откуда: Москваль


Помог: 52 раз(а)




Я не уверен, что правильно вас понял, но попробую высказаться Улыбка
Как бы делал я:

Написал бы класс, который и будет реализовывать доступ к переменным и при их изменении записывать в файл:
PHP:
скопировать код в буфер обмена
  1. class VarCollection{
  2.         private $varCollection = array();
  3.         private $filePath = '/tmp/varCollection';
  4.  
  5.         public function __construct(){
  6.                 //тут чтение файла и заполнение $varCollection
  7.                 $handle = fopen($this->filePath, "r");
  8.                 $contents = '';
  9.                 while (!feof($handle)) {
  10.                   $contents .= fread($handle, 8192);
  11.                 }
  12.                 fclose($handle);
  13.                 $this->varCollection = json_decode($contents, false);
  14.         }
  15.  
  16.         public function __set($varName, $varValue){
  17.                 if(key_exists($varName, $this->varCollection) && $this->varCollection[$varName] === $varValue){
  18.                         //на самом деле переменная не меняется, не за чем лишний раз писать в файл
  19.                         return;
  20.                 }
  21.                 $this->varCollection[$varName] = $varValue;
  22.                 $this->saveVars(); //это можно убрать в деструктор - сами смотрите
  23.         }
  24.  
  25.         public function __get($varName){
  26.                 if(key_exists($varName, $this->varCollection)){
  27.                         return $this->varCollection[$varName];
  28.                 }
  29.                 else{
  30.                         return Null;
  31.                 }
  32.         }
  33.  
  34.         private function saveVars(){
  35.                 $file= fopen($this->filePath, 'w');
  36.                 fwrite($file, json_encode($this->varCollection));
  37.                 fclose($file);
  38.         }
  39. }
  40.  
  41. //как оно работает:
  42. $collection = new VarCollection();
  43.  
  44. $collection->testVar1 = "its work";
  45. echo $collection->testVar1;


код писался на коленк, тут надо добавить проверку всяких исключительных ситуаций (объекты так сохранять далеко не все можно + что если запись в файл запрещена, но ход моих мыслей был бы таким)
 
My status
 Top
EuGen Администратор
Отправлено: 20 Октября, 2011 - 10:09:15
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Stierus, оно-то конечно да.. А еще обработку исключений, а еще отдельный обработчик того, как работать с логом (а вдруг мы захотим в БД писать вместо файла.. или почту слать?)
и еще много-много всяких полезных вещей. Только автору, думаю, понять это сложно будет.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Stierus Супермодератор
Отправлено: 20 Октября, 2011 - 10:15:31
Post Id



Рекордсмен по количеству сообщений за 7 дней


Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008  
Откуда: Москваль


Помог: 52 раз(а)




Именно поэтому я не стал грузить рассказами о том, что ему надо делать, а выложил готовое решение Улыбка. Я очень надеюсь, что автору топика будет интересно понять, как он работает ... что автор топика пойдет на php.net и посмотрит про все эти замечательные функции перегрузки свойств (Property overloading .. эт я тип намекаю, что гуглить). Ну а если нет - пусть тупо скопипастит код и забудет как страшный сон.
(Добавление)
особенно, учитывая
Цитата:
Нужно создать что-то типа маленькой CMS

(Добавление)
ps
Кстати, синглтоном его делать не стал по той же причине - был бы перебор (а так, по хорошему, нужно сделать синглтоном этот класс)
 
My status
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB