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 :: увеличить счетчик голосования на 1

 PHP.SU

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


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

> Без описания
lawer85
Отправлено: 11 Марта, 2014 - 22:09:24
Post Id


Частый гость


Покинул форум
Сообщений всего: 189
Дата рег-ции: Янв. 2013  


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




Есть такой код и собственно вопрос в том как сделать так чтобы в result.txt отобразить все 3 варианта ответа + рядом цифры как счетчик. Каждая из цифр чтобы увеличивалась на 1 при выборе соответствующего варианта ответа???

index.php

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $string = file_get_contents("otvet.txt");
  3. $array = explode("\n", $string);
  4.  
  5.  
  6. if((strcmp(trim($_POST['otvet']), "Джентльмены удачи")) === 0) file_put_contents("result.txt", $array[0].видимо тут должно идти значение которое сохраняется в сессии и при это мего все время нужно увеличивать на 1;
  7. if((strcmp(trim($_POST['otvet']), 'Операция "Ы" и другие преключения Шурика')) === 0) file_put_contents("result.txt", $array[1].видимо тут должно идти значение которое сохраняется в сессии и при это мего все время нужно увеличивать на 1);
  8. if((strcmp(trim($_POST['otvet']), "Кавказская пленница")) === 0) file_put_contents("result.txt", $array[2].видимо тут должно идти значение которое сохраняется в сессии и при это мего все время нужно увеличивать на 1);
  9.  
  10. ?>
  11. <html>
  12. <head>
  13. </head>
  14. <body>
  15.         <h1>Какой фильм Вам больше нравится?</h1>
  16.         <form name="myform" action="index.php" method="post">
  17.        
  18.                 <table>
  19.                 <tr>
  20.                 <td>
  21.                 <?PHP
  22.                 for ($i = 0; $i < count($array); $i++) {
  23.                 echo "<input type='radio' name='otvet' value='".$array[$i]."'>".$array[$i]."<br />";
  24.                 }
  25.                 ?>
  26.                 </td>
  27.                 </tr>
  28.                         <tr><td><input type="submit" value="Голосовать" name="golos" /></td></tr>
  29.                
  30.         </table>
  31.        
  32.    </form>
  33.    
  34. <body>
  35. </html>


otvet.txt

Цитата:
Джентльмены удачи
Операция "Ы" и другие преключения Шурика
Кавказская пленница

(Отредактировано автором: 11 Марта, 2014 - 22:11:33)

 
 Top
lawer85
Отправлено: 12 Марта, 2014 - 15:53:01
Post Id


Частый гость


Покинул форум
Сообщений всего: 189
Дата рег-ции: Янв. 2013  


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




Никто не знает?
 
 Top
nicolas_d
Отправлено: 12 Марта, 2014 - 22:07:11
Post Id



Новичок


Покинул форум
Сообщений всего: 17
Дата рег-ции: Февр. 2014  


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




lawer85 пишет:
Никто не знает?

Принципиально неверный подход к решению задачи. Для упрощения разбора ответов, в пост запросе нужно передавать номера ответов, а не их текст, т.е. каждый "фильм" пронумеровать и возвращать выбранный номер, ето раз. В текстовом файле должны храниться строки, в которых поля через разделитель, ето два, к примеру
1;Джентльмены удачи;0
2;Операция "Ы" и другие приключения Шурика;0
3;Кавказская пленница;0
Файл читается построчно в массив, который в свою очередь будет содержать массив полей.
При получении пост запроса в массиве ищется запись с номером переданного ответа, элемент с индексом 2 найденной записи увеличивается на единицу, все элементы объединяются в строку равной структуре файла (пример выше), строка пишется в файл.
Чтобы не геммороиться с чтением текста файла и его "дешифровкой", учим json_encode|json_decode, чтобы поиметь готовую структуру массива. Так же учим switch case, чтобы if'ами не обходить результат полученного запроса.
Сессия в вашем примере нафик не нужна, т.к. ничего не хранит.

итого решение должно быть вот таким:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <?php
  3. $string = @file_get_contents('otvet.txt');
  4.  
  5.  
  6. if (!$string) {
  7.         $tmpArry = array(
  8.                 array(1, 'Джентльмены удачи', 0),
  9.                 array(2, 'Операция "Ы" и другие приключения Шурика', 0),
  10.                 array(3, 'Кавказская пленница', 0),
  11.         );
  12.         $arry = $tmpArry;
  13.  
  14. } else {
  15.         $arry = json_decode($string);
  16. }
  17.  
  18. if (isset($_POST['otvet'])) {
  19.         $result = $_POST['otvet'];
  20.         //внимание, нумерация элементов массива строго по порядку, начиная с единицы, т.к. реализация примера притянута за уши
  21.         if (!empty($result) && is_numeric($result) && isset($arry[$result - 1])) {
  22.                 $arry[$result - 1][2]++;
  23.                 file_put_contents('otvet.txt', json_encode($arry));
  24.         }
  25. }
  26.  
  27. ?>
  28. <html>
  29. <head>
  30. </head>
  31. <body>
  32. <h1>Какой фильм Вам больше нравится?</h1>
  33.  
  34. <form name="myform" action="index.php" method="post">
  35.  
  36.         <table>
  37.                 <tr>
  38.                         <td>
  39.                                 <?php
  40.  
  41.                                 for ($i = 0; $i < sizeof($arry); $i++) {
  42.                                         echo '<input type="radio" name="otvet" value="' . $arry[$i][0] . '">' . $arry[$i][1] . '<br />';
  43.                                 }
  44.                                 ?>
  45.                         </td>
  46.                 </tr>
  47.                 <tr>
  48.                         <td><input type="submit" value="Голосовать" name="golos"/></td>
  49.                 </tr>
  50.  
  51.         </table>
  52.  
  53. </form>
  54.  
  55. </body>
  56. </html>
  57.  
 
 Top
LIME
Отправлено: 12 Марта, 2014 - 22:14:09
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


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




nicolas_d пишет:
В текстовом файле должны храниться строки, в которых поля через разделитель,
хреновенький вариант
трудно будет выборку делать по рейтингу
надо отдельным полем хранить
вообще хранить данные в реляционной таблице в строке через разделитель это плохой подход
может за очень редким исключением
(Добавление)
хотя никто про реляционные базы не говорил Хм )
 
 Top
nicolas_d
Отправлено: 12 Марта, 2014 - 22:25:44
Post Id



Новичок


Покинул форум
Сообщений всего: 17
Дата рег-ции: Февр. 2014  


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




LIME пишет:
nicolas_d пишет:
В текстовом файле должны храниться строки, в которых поля через разделитель,
хреновенький вариант
трудно будет выборку делать по рейтингу
надо отдельным полем хранить
вообще хранить данные в реляционной таблице в строке через разделитель это плохой подход
может за очень редким исключением
(Добавление)
хотя никто про реляционные базы не говорил Хм )


Действительно, про реляционные базы никто и не говорил. Про строки с разделителями упоминал, т.к. есть стандартные механизмы чтения/записи csv файлов, но вариант хранения ассоциативного массива (да и просто массива массивов) в виде json строки как-то получается удобнее в плане обработки. Про код вопрошающего просто промолчу. В целом, технология хранения данных зависит от задачи. В данной задаче поставлено, чтобы хранить в файле, мы храним файле. Приведенный мной код рабочий.
 
 Top
lawer85
Отправлено: 13 Марта, 2014 - 21:07:14
Post Id


Частый гость


Покинул форум
Сообщений всего: 189
Дата рег-ции: Янв. 2013  


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




Бубу переваривать, просто я только изучаю PHP и предполагалось решить задачу с учетом что я об json ничего не знаю.

Вообще я обучаюсь по курсу и столько вопросов возникает и я вижу как мне дают решения, где озвучивается то, что я не проходил, вообще уже задумываюсь правильно ли я делаю, что обучаюсь по курсу, может на обучение записаться к гуру какому-нибудь, что скажете?
 
 Top
lastdays
Отправлено: 14 Марта, 2014 - 00:48:18
Post Id



Частый гость


Покинул форум
Сообщений всего: 221
Дата рег-ции: Март 2013  


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




а чего, одно другому мешает?
желание + практика = положительный исход.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB