Голосование

Обсуждение серверного программирования.

Модераторы: Duncon, Yurich

Ответить
MOZGovi4ok
Сообщения: 12
Зарегистрирован: 28 май 2007, 00:16

Доброго всем здравица! Возникла ошибка в коде, но я никак не могу её найти! Суть такова - должно появиться форма - но она, красавица, не появляется... :(
Помогите кто чем может, люди добрые!
Вот код:
<?php
$dirct="cnt";
$nom=substr(basename($PHP_SELF), 0, -4);
$kolvooc="$nom"."kol";
$ocenka="$nom"."est";
echo("Количество голосов - ");
if (file_exists("$dirct/$kolvooc")==True)
{
include ("$dirct/$kolvooc");
}
else
{
echo ("0");
}
if (file_exists("$dirct/$ocenka")==True)
{
echo (". Средний балл - ");
$hdl = fopen("$dirct/$ocenka", "r+");
$sred=fread($hdl, filesize("$dirct/$ocenka"));
fclose($hdl);
$sred=round($sred, 2);
echo ("$sred.");
}
$haveestim=$nom. "haveest";
if ($$haveestim==" ")
if ($_COOKIE[$haveestim]==" ")
{
?>
<form method="post" action="otziv.php">
<input name= "nom" type="hidden" value="<?php echo $nom; ?>">
<input type=hidden name= nazad value=<?php echo ($PHP_SELF); ?>>
Оцените фотографию
<select name = "ocen">
<option value = 5>5 (Супер!) </option>
<option value = 4>4 (Мне нравится)</option>
<option value = 3>3 (Сойдёт)</option>
<option value = 2>2 (Не нравится)</option>
<option value = 1>1 (Очень плохо)</option>
</select>
<input name="submit" type="submit" value="Проголосовать">
</form>
<?php
}
else
{
echo ("Вы уже голосовали за эту фотографию! Попробуйте снова, через лет так 10-12!");
}
?>
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

hidden смени на text
MOZGovi4ok
Сообщения: 12
Зарегистрирован: 28 май 2007, 00:16

Я уже пробовал менять тип с hidden'а на text!
Не получается! Как не крути!
Из всего кода пооявляется тока надпись "Количество баллов - 0"...
Форма, которая должна была появиться не появляется...
MOZGovi4ok
Сообщения: 12
Зарегистрирован: 28 май 2007, 00:16

Я уже пробовал менять тип с hidden'а на text!
Не получается! Как не крути!
Из всего кода пооявляется тока надпись "Количество баллов - 0"...
Форма, которая должна была появиться не появляется...
Вот такая вот ситуация, не могу разобраться, почему она не появляется, вроде все нормально...
Аватара пользователя
Oscar
Сообщения: 963
Зарегистрирован: 29 май 2004, 13:44
Откуда: Мюнхен (рожден в Киеве)
Контактная информация:

if ($$haveestim==" ")
if ($_COOKIE[$haveestim]==" ")
сравнение переменных со строкой содержащей один символ: ПРОБЕЛ !.
Поскольку эти переменные пустые и не равны проблему - форма не показывается.

Решение:

Код: Выделить всё

if ($$haveestim=="")
if ($_COOKIE[$haveestim]=="")
а ещё лучше пользоваться ф-циями PHP isset или empty:

Код: Выделить всё

if (!isset($$haveestim))
if (!isset($_COOKIE[$haveestim]))

Код: Выделить всё

if (empty($$haveestim))
if (empty($_COOKIE[$haveestim]))
MOZGovi4ok
Сообщения: 12
Зарегистрирован: 28 май 2007, 00:16

спасибо тебе огромное, выручил! усё точно, а я постарой памяти пробелы то и не посмотрел!
MOZGovi4ok
Сообщения: 12
Зарегистрирован: 28 май 2007, 00:16

Да, с одним то делом мне помогли, но вот теперь возникла вторая проблема!
Проблема заключается в коде обработчика. Ошибка возникает в 5-ой строчке "setcookie("$namecook", "1", time()+2592000);".
Привожу код обработчика:
<?php
$namecook="$nom"."haveest";
if ($$namecook=="")
{
setcookie("$namecook", "1", time()+2592000);
$dirct="cnt";
$kolvooc="$nom"."kol";
$ocenka="$nom"."est";
if ((file_exists("$dirct/$kolvooc")!=true)||(file_exists("$dirct/$name2")!=True))
{
$hdl1=fopen("$dirct/$kolvooc", "a+");
fwrite($hdl1,1);
fclose($hdl1);
$hdl2=fopen("$dirct/$ocenka","a+");
fwrite($hdl2,$ocen);
fclose($hdl2);
}
else
{
$hdl1 = fopen("$dirct/$kolvooc","r+");
$kvo = fread($hdl1, filesize("cnt/$kolvooc"));
$kvo++;
rewind($hdl1);
fwrite($hdl1,$kvo);
fclose($hdl1);
$hdl2=fopen("$dirct/$ocenka","r+");
$sred=fread($hdl2,filesize("cnt/$ocenka"));
$sred=($sred*($kvo-1)+$ocen)/$kvo;
rewind($hdl2);
fwrite($hdl2,$sred);
fclose($hdl2);
}
echo ("Благодарим вас за участие в голосовании!");
}
else
{
echo ("Вы уже голосовали за эту фотографию!");
}
?>
Подскажите, пожалуйста, в чём заключается ошибка!
Аватара пользователя
Oscar
Сообщения: 963
Зарегистрирован: 29 май 2004, 13:44
Откуда: Мюнхен (рожден в Киеве)
Контактная информация:

в чём заключается ошибка?
MOZGovi4ok
Сообщения: 12
Зарегистрирован: 28 май 2007, 00:16

Усё, спасибо, Oscar! Все уже заработало, я разобрался!
MOZGovi4ok
Сообщения: 12
Зарегистрирован: 28 май 2007, 00:16

Благодаря добрым людям, особенно Oscarу, удалось завершить данный код. Он протестирован и полностью работает! :D
Голосование на PHP
Свойства:
-не требует mysql, собранная информация хранится в текстовом файле;
-голосование при помощи формы;
-защита от повторного голосования с помощью записи в Cookie;
-создание нескольких парралельных голосований;
-возможность подтасовки результатов :) .
Установка:
1)Скопируйте файлы на сервер
2)Вставьте в страницу, на котрой будет происходить голосование строчку
<?php include('golos.php'); ?>
3)Создайте на сервере отдельный каталог для системы с именем "cnt" и назначьте ему права на запись, проставив атрибуты 777.
4)Результаты голосвания будут хранится в этом каталоге, название файлов с результатами будет соответствовать названию
страницы, на которой распологается голосование, плюс приставка к имени (kol и est).
5)Изменяя данные в этих фалах, можно легко подтасовать результаты :) .
Вы можете изменить код, усложнив его, допустим добавив для защиты от "накручивания" еще и проверку ip-адреса компьютера.
Если кто-то уссовершенствует данный код, просьба: сообщить мне - как и что! ;)
Вложения
Голосование на PHP.zip
(1.92 КБ) 23 скачивания
Ответить