Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > опрос без db. Работа с *.txt файлом вместо db


Автор: ZorGG 27.3.2010, 20:13
Собрался писать скрипт опроса на php так как не один из найденных вариантов не подходит и тут начался мрак...

В php я дерево smile поэтому прошу вас объяснять что делает строка(кусок кода).

первая моя проблема с переносом данных из текстового файла в массив.

Код скрипта:
Код
<?php
$mas = array();

  $f = fopen("info.txt","rt") or die ("Error");
  
  $mas = $f;
  
   $mas[] = 'да';
   $mas[] = 'нет';
  
  print($mas.'&nbsp;');
  
  print(work);  
  ?>


Содержание info.txt

Код

y 1
n 0
v 1


y - это количество людей ответивших "да"
n - это количество людей ответивших "нет"
v - это количество проголосовавших

Если вам не трудно проверьте синтаксис скрипта и укажите на ошибки(желательно с исправленным вариантом. А вдруг запомню  smile )

Автор: bars80080 27.3.2010, 22:17
скрипт переноса текстового файла в массив

Код

$mas = file("info.txt");

Автор: ZorGG 27.3.2010, 22:53
хмм ... почему-то не работает. Точнее работает но не так как хотелось-бы.

Код

<?php
$mas = array();

 $f = fopen("info.txt","rt") or die ("Error");
  
    $mas = file("info.txt");
  
  $mas[] = 'да';
  $mas[] = 'нет';
  
  print($mas);
  ?>



выдаёт "Array". Почему?
На сколько я понимаю в крайнем случае конструкция должна выдать лишь первую строку а она мне выдаёт слово "массив"...

Автор: BobiKK 27.3.2010, 23:12
Всё правильно выдает print. Для вывода содержимого всего массива существуют функции print_r(), var_dump();
Код

<?php
$mas = array();
$mas = file("info.txt");
  
print_r($mas);
  ?>


Поизучайте, что выведется на экран, какова структура $mas. И тогда уже соотвественно добавляйте/удалайте/изменяйте нужные поля

Автор: ZorGG 28.3.2010, 15:17
Цитата

Всё правильно выдает print. Для вывода содержимого всего массива существуют функции print_r(), var_dump();


ага, понятно.. будет чем заняться  smile 

а какая разница между ними? Если есть можно ссылкуи на литературу какую-нить только на доступном уровне и на русском.

Хмм... теперь ещё один вопрос. А как такие системы реагируют на корректировку и русский язык? К примеру мне нужно что-бы вся эта система выглядела для пользователя к примеру так:

Цитата

результаты голосования:
"да"(3)
"Нет"(1)

Всего(4)...

Автор: bars80080 28.3.2010, 16:22
Цитата(ZorGG @  28.3.2010,  14:17 Найти цитируемый пост)
Если есть можно ссылкуи на литературу какую-нить только на доступном уровне и на русском.

http://www.php.ru/manual/function.&lt;имя функции>.html

к примеру http://www.php.ru/manual/function.file.html
http://www.php.ru/manual/function.print-r.html


Цитата(ZorGG @  28.3.2010,  14:17 Найти цитируемый пост)
А как такие системы реагируют на корректировку 

что есть корректировка?


Цитата(ZorGG @  28.3.2010,  14:17 Найти цитируемый пост)
и русский язык?

системе абсолютно пофигу на русский язык, так как она и английского не понимает. она всего лишь оперирует символами с определёнными кодовыми комбинациями


Цитата(ZorGG @  28.3.2010,  14:17 Найти цитируемый пост)
К примеру мне нужно что-бы вся эта система выглядела для пользователя к примеру так:

а что не получилось, чтобы выглядело вот так?

Автор: ZorGG 28.3.2010, 17:17
Цитата

что есть корректировка?


ну если я к примеру запихну в конструкцию HTML теги.

Цитата

а что не получилось, чтобы выглядело вот так?


Пока не пробовал. Сейчас как раз попробую =)

Автор: ZorGG 28.3.2010, 19:38
Цитата

а что не получилось, чтобы выглядело вот так?


Почти. В общем я спёр скрипт из http://forum.vingrad.ru/forum/topic-66648.html темы. Спасибо автору скрипт работает(надеюсь уважаемый Leoo не сочтёт за плагиат). Но естественно нету понимания процесса ...

теперь скрипт выглядит так:

Код

<?php
$mas = array();

 $f = fopen("info.txt","rt") or die ("Error");
  
  while (!feof($f))         // while это цикл а вот запись !feof($f) это что?
                                   //По логике цикла тут должна лежать команда разрешающая выполнять скрипт
                                   //пока не будет достигнуто условие. Правильно?
  {
    $s = fgets($f, 255); // не понимаю что делает эта строка
    echo $s."<br>";
  }

?>


На сколько я понимаю с чтением файла мы разобрались, спасибо большое Всем кто помогал.

Теперь нужно перезаписывать файл...

Вопрос: Как можно сделать своего рода буфер? На сколько я понимаю для начала нужно расчленить переменную $s на массив... эээмм... проблема smile 

Автор: ksnk 28.3.2010, 21:52
Рекомендую открыть для себя php.net. В частности вот по этой ссылке можно посмотреть содержательные примеры использования функций http://php.net/fgets, http://php.net/file и многих других.
Когда-нибудь надо будет уже и учится читать документацию  smile 

Автор: BobiKK 28.3.2010, 22:29
ZorGG, действительно, почитайте что-нибудь. Не помешает. Конечно, это доставляет, когда что-то делаешь и что-то работает, но перед этим надо потрудиться.

Создаешь файл с данным для опросника db.inc:
Код

0
0

Первая строка - количество проголосовавших за, вторая - против. Ничего другого не надо.

Сам скрипт голосовалки:
Код

<?php

// читаем "базу данных" в массив. массив вида: $data[0] - за, $data[1] - против
$data = file("db.inc", FILE_IGNORE_NEW_LINES);

// проверяем, действительно ли числа в $data[0] и $data[1]. Мало ли что, может вы туда крокозябру добавили
if (is_numeric($data[0]) && is_numeric($data[1])) {
    // если число - увеличиваем на 1. То бишь, голосуем за. чтобы проголосовать против, надо увеличить $data[1]
    $data[0] = $data[0] + 1;
} else {
    // всё-таки крокозябра вышла
    exit("Ошибка. Паника. Беда. Ужас какой-то");
}

// записываем всё обратно. implode() - делает из массива строку, элементы массива при это разделяются знаком перевода строки (\n или \r\n)
file_put_contents("db.inc", implode(PHP_EOL, $data));
?>



Открываем потом db.inc и радуемся. Посчитать сколько всего проголосовало, надеюсь, догадаетесь как

Автор: ZorGG 28.3.2010, 22:53
Цитата

Когда-нибудь надо будет уже и учится читать документацию

Которую я не запоминаю :(...

Цитата

ZorGG, действительно, почитайте что-нибудь. Не помешает. Конечно, это доставляет, когда что-то делаешь и что-то работает, но перед этим надо потрудиться.


не спорю. Вы правы  smile

Спасибо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)