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 Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
Dchamel
Отправлено: 03 Мая, 2011 - 23:06:13
Post Id


Новичок


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


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




Всем привет, в ПХП я новый человек, недавно учить начал, если честно пару дней назад Улыбка
Мне нужно сделать скрипт опроса.

Кусок из сайта.

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <form action="obrab.php" method="post">
  3.   <input type="radio" name="core" value="dvoi">Двоичный<br>
  4.   <input type="radio" name="core" value="vosm">Восмиричный<br>
  5.   <input type="radio" name="core" value="des">Десятичный<br>
  6.   <input type="radio" name="core" value="shes">Шестнадцатеричный<br>
  7.   <input type="radio" name="core" value="shifrpr">Шифрованный простой<br>
  8.   <input type="radio" name="core" value="shifrsl">Шифрованный сложный<br>
  9.   <input type="submit" value="Выбрать">
  10. </form>
  11.  


Сам скрипт обрабатывающий форму.

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <?
  3. $f=fopen('store.txt','r+');
  4. if(isset($_POST['core']))
  5. {
  6. $a=$_POST['core'];
  7. if ($a=="dvoi") {$c=1;} else {$c=0;}
  8. $l=fgets($f,1); $l=$l+$c; fputs($f,$l);
  9. if ($a=="vosm") {$d=1;} else {$d=0;}
  10. $l=fgets($f,1); $l=$l+$d; fputs($f,$l);
  11. if ($a=="des") {$e=1;} else {$e=0;}
  12. $l=fgets($f,1); $l=$l+$e; fputs($f,$l);
  13. if ($a=="shes") {$f=1;} else {$f=0;}
  14. $l=fgets($f,1); $l=$l+$f; fputs($f,$l);
  15. if ($a=="shifrpr") {$g=1;} else {$g=0;}
  16. $l=fgets($f,1); $l=$l+$g; fputs($f,$l);
  17. if ($a=="shifrsl") {$h=1;} else {$h=0;}
  18. $l=fgets($f,1); $l=$l+$h; fputs($f,$l);
  19. echo "Result:".$a."<br>";
  20. fclose ($f);
  21. }
  22. else echo "Незапланированная ошибка";
  23. ?>
  24.  

В текстовом файле изначально шесть нулей в строчку.

Трабл в том, что результат работы
"Warning: fgets() expects parameter 1 to be resource, integer given in Z:\home\test1.ru\www\obrab.php on line 13

Warning: fputs() expects parameter 1 to be resource, integer given in Z:\home\test1.ru\www\obrab.php on line 13

Warning: fgets() expects parameter 1 to be resource, integer given in Z:\home\test1.ru\www\obrab.php on line 15

Warning: fputs() expects parameter 1 to be resource, integer given in Z:\home\test1.ru\www\obrab.php on line 15

Warning: fgets() expects parameter 1 to be resource, integer given in Z:\home\test1.ru\www\obrab.php on line 17

Warning: fputs() expects parameter 1 to be resource, integer given in Z:\home\test1.ru\www\obrab.php on line 17
Result:des

Warning: fclose() expects parameter 1 to be resource, integer given in Z:\home\test1.ru\www\obrab.php on line 19"

Я не понимаю в чем дело. 13-я строка это где значение "shes".
И еще, до 13 строки скрипт работает, в фаил добавляет. Но проблемма в том что он и старые не сохраняет. Т.е. данные прошлого опроса в 0 снова.


P.S. Я писал код исходя только из полученных пока что знаний, просьбя Строго не судить, а вот советы крайне приветствуются. Как и решение трабла.
 
 Top
OrmaJever Модератор
Отправлено: 03 Мая, 2011 - 23:14:17
Post Id



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


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


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




Если не очень сложно будет можите попробовать http://forum.php.su/topic.php?fo...35&topic=106


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Dchamel
Отправлено: 03 Мая, 2011 - 23:29:39
Post Id


Новичок


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


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




OrmaJever, посмотрел, сложновато пока. Я как дальше углублюсь в изучение ПХП обязательно потестю твой скрипт.
А пока что мне нужно как-то с этим разобраться.
 
 Top
OrmaJever Модератор
Отправлено: 03 Мая, 2011 - 23:33:26
Post Id



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


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


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




Ну если ты хочешь нормальное голосование то в 10-20 строк не получится и не углублятся тоже не выдет.
А если про ошибки топеременая $f должна быть ресурсом а она переопределяется в 13 строке


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Plusminuz
Отправлено: 03 Мая, 2011 - 23:46:32
Post Id



Частый гость


Покинул форум
Сообщений всего: 156
Дата рег-ции: Апр. 2011  
Откуда: Россия


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




Dchamel пишет:
$f=fopen('store.txt','r+');

Dchamel пишет:
if ($a=="shes") {$f=1;} else {$f=0;}


поменяйте имя для переменной


-----
учусь... Улыбка
 
 Top
Dchamel
Отправлено: 03 Мая, 2011 - 23:48:11
Post Id


Новичок


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


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




OrmaJever, поправил, спишем невнимательность на то что я простыл Улыбка) Спасибо что указал.
А с самим тектовым что я не так сделал ? Почему старые значения не сохраняются ?

$l=fgets($f,1); - беру старое.
$l=$l+$g; - складываю с новым.
fputs($f,$l); и записываю его обратно. Ну как я думал. Я получается чет не то.
(Добавление)
Plusminuz, уже. Улыбка Теперь с тхт осталось разобраться чего он с 0 начинает каждый раз.
 
 Top
evgenijj
Отправлено: 04 Мая, 2011 - 00:31:30
Post Id



Участник


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


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




Dchamel пишет:
Всем привет, в ПХП я новый человек, недавно учить начал, если честно пару дней назад

Когда я был новичком, написал
http://forum[dot]webmasterschool[dot]ru/[dot][dot][dot]e=233&page=1
Скрипт примитивен, поскольку
1. был написан ламером
2. был написан для ламеров
3. если непонятно - читай учебник
 
 Top
Plusminuz
Отправлено: 04 Мая, 2011 - 00:32:12
Post Id



Частый гость


Покинул форум
Сообщений всего: 156
Дата рег-ции: Апр. 2011  
Откуда: Россия


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




вот можете попробовать так (правда здесь есть такое понятие как "массив". советую с ним ознакомиться):

PHP:
скопировать код в буфер обмена
  1. <?
  2. //читаем строку из файла
  3. $f=fopen('store.txt','r');
  4. $opros= fgets($f);
  5. $opros = explode ("|", $opros); //разбиваем на элементы массива. для вашего примера элементов будет шесть
  6. fclose ($f);
  7.  
  8. if(isset($_POST['core']))
  9. {
  10. $a=$_POST['core'];
  11.  
  12. if ($a=="dvoi") {$c=1;} else {$c=0;}
  13. $opros[0]= $opros[0]+$c; //тут думаю понятно - прибавляем к первому элементу массива единицу($c).
  14.  
  15. if ($a=="vosm") {$d=1;} else {$d=0;}
  16. $opros[1]= $opros[1]+$d;
  17.  
  18. if ($a=="des") {$e=1;} else {$e=0;}
  19. $opros[2]= $opros[2]+$e;
  20.  
  21. if ($a=="shes") {$fi=1;} else {$fi=0;}
  22. $opros[3]= $opros[3]+$fi;
  23.  
  24. if ($a=="shifrpr") {$g=1;} else {$g=0;}
  25. $opros[4]= $opros[4]+$g;
  26.  
  27. if ($a=="shifrsl") {$h=1;} else {$h=0;}
  28. $opros[5]= $opros[5]+$h;
  29.  
  30. //записываем результат в ваш файл, разделяя знаком "|"
  31. $f=fopen('store.txt','w');
  32. fputs($f,"$opros[0]|$opros[1]|$opros[2]|$opros[3]|$opros[4]|$opros[5]");
  33.  
  34. echo "Result: ".$a."<br>";
  35. }
  36. else echo "Незапланированная ошибка";
  37.  
  38. ?>


в файле store.txt изначально записана строка
Цитата:
0|0|0|0|0|0


еще советую почитать про switch - ничего сложного, но кода будет поменьше.

P.s. сделано на быструю руку - очень спать хочется. Улыбка


-----
учусь... Улыбка
 
 Top
Dchamel
Отправлено: 04 Мая, 2011 - 09:08:42
Post Id


Новичок


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


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




evgenijj, дааа ламеры крепчают, стыдно даже ;)
Plusminuz, спасибо за труд, с массивами знаком. Я думал его переделывать на массиве как раз. Но очень хочется догнать что же у меня не так. В этом скрипте.
 
 Top
Plusminuz
Отправлено: 04 Мая, 2011 - 11:16:38
Post Id



Частый гость


Покинул форум
Сообщений всего: 156
Дата рег-ции: Апр. 2011  
Откуда: Россия


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




Dchamel пишет:
очень хочется догнать что же у меня не так. В этом скрипте.

по-моему неправильно у вас то, как вы считываете данные, т.е. функция fgets


вы 6 раз одно и тоже считываете из файла,
Dchamel пишет:
$l=fgets($f,1);


и вдобавок ко всему после каждого считывания пишете туда новую информацию:
Dchamel пишет:
fputs($f,$l);


получается как бы по кругу гоняете одно и то жеУлыбка если я конечно правильно всё понял


-----
учусь... Улыбка
 
 Top
Dchamel
Отправлено: 04 Мая, 2011 - 17:15:24
Post Id


Новичок


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


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




Plusminuz, я может не совсем правильно понял как эти функции работают.
fgets я думал при считывании 1 байта курсор оставляет после этого байта.
В описании сказано количество байт, конец строки или файла.
А как же считать тогда и сместить курсор ? или выбора нет как считывать по строкам и fgets ставить без длины...

К томуже мне казалось что fputs так же поступает. RTFM дальше ;)
 
 Top
altermann
Отправлено: 05 Мая, 2011 - 02:01:17
Post Id



Частый гость


Покинул форум
Сообщений всего: 196
Дата рег-ции: Март 2010  
Откуда: Днепропетровск


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




Я так понимаю, когда у вас проголосуют за один пункт больше 9 человек, вы будете переписывать скрипт, чтоб читал и писал по 2 байта?
Написано на коленке:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. if (!empty($_POST)) {
  3.     $sFileName = 'stat.txt'; // имя файла
  4.     $fh = fopen($sFileName, 'a+');
  5.     $sOldValue = fgets($fh); // читаем старые значения
  6.     $aValue = unserialize($sOldValue); // преобразуем строку в массив
  7.     if (isset($aValue[$_POST['core']])) { // прибавляем голос
  8.         $aValue[$_POST['core']] += 1;
  9.     } else {
  10.         $aValue[$_POST['core']] = 1;
  11.     }
  12.     ftruncate($fh, 0); // очищаем файл от старых значений
  13.     fputs($fh, serialize($aValue)); // записываем новые преобразовав массив в строку
  14.     fclose($fh);
  15. }
  16. ?>
  17. <form action="" method="post">
  18.   <input type="radio" name="core" value="dvoi">Двоичный<br>
  19.   <input type="radio" name="core" value="vosm">Восмиричный<br>
  20.   <input type="radio" name="core" value="des">Десятичный<br>
  21.   <input type="radio" name="core" value="shes">Шестнадцатеричный<br>
  22.   <input type="radio" name="core" value="shifrpr">Шифрованный простой<br>
  23.   <input type="radio" name="core" value="shifrsl">Шифрованный сложный<br>
  24.   <input type="submit" value="Выбрать">
  25. </form>


-----
Я прирожденный кузнец, я не могу не куя!
 
 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