PHP : Създаване на анкета ( с прости файлове)
Ще се опитам да покажа нагледно с прост и лесен код как да си направите анкета.
За база данни ще ползвам прости файлове, а не MySQL база данни.
Ето и по важните неща:
Ще направиме анкета с въпрос и 3 възможни отговора:
Въпрос: Коя антивирусна е по добра?
0тговор 1:Kaspersky
0тговор 2:Norton
0тговор 3:Panda
След като посетителя гласува примерно за Panda, към броя на гласувалите за Panda
трябва да прибавиме неговия глас.
Пример:
Брой гласували:
0тговор 1:Kaspersky – 10 гласа
0тговор 2:Norton – 5 гласа
0тговор 3:Panda – 6 гласа
След като посетителя гласува резултатите ще се променят на:
Брой гласували:
0тговор 1:Kaspersky – 10 гласа
0тговор 2:Norton – 5 гласа
0тговор 3:Panda – 7 гласа
И новите резултати да се запишат отново в файла,който ползваме за база данни.
Има още един проблем:
Посетителя не би трябвало да може да гласува повече от веднъж.
Трябва да запишеме някъде, че е гласувал и да не му позволимe да
гласува пак.
Но за това ще стане въпрос към края.
Сега ще направиме анкетата без да ограничаваме посетителя колко пъти да гласува.
Това е с цел по лесно да се разбере работата на този елементарен скрипт.
Ще създадеме два файла:
- form.html – това е формуляра на анкетата
- vote.php – това е скрипта, който ще обработва данните изпратени от form.html
- db.inc – ще бъде създаде от скрипта vote.php и в него ще
се записват резултатите
Ето кода на form.html:
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=windows-1251">
</head>
<body>
<br>
Коя антивирусна е по-добра?<br>
<FORM ACTION="vote.php" METHOD=POST >
<INPUT TYPE="radio" NAME="vote" VALUE="a">
Kaspersky
<br>
<INPUT TYPE="radio" NAME="vote" VALUE="b">
Norton
<br>
<INPUT TYPE="radio" NAME="vote" VALUE="c">
Panda
<br>
<INPUT TYPE="submit" VALUE="Гласувай"> </form>
</body>
</html>Горния код трябва да ви е ясен ако знаете малко HTML, но да поясня все пак:
Формуляра е с radio бутони, така че в зависимост от това как гласува посетителя изпраща
различни данни към скрипта vote.php (ако гласува за Kaspersky изпраща „a“ – за Norton-„b“-
за Panda – „c“)
Той(скрипта vote.php) от своя страна в зависимост от полученото променя базата данни.
Ето го и скрипта vote.php:
<html>
<head>
<title>vote</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>
<?php
$vote= $HTTP_POST_VARS["vote"];
if (file_exists("db.inc"))
{
$db= file("db.inc");
$a=$db[0];
$a=str_replace("\n","",$a);
$b=$db[1];
$b=str_replace("\n","",$b);
$c=$db[2];
$c=str_replace("\n","",$c);
}
else
{
$a=0;
$b=0;
$c=0;
}
if ($vote==a)
{$a=$a+1;}
elseif ($vote==b)
{$b=$b+1;}
elseif ($vote==c)
{$c=$c+1;}
$zapisdb=$a."\n".$b."\n".$c;
$fp = fopen ( "db.inc" ,"w");
fwrite($fp, $zapisdb );
fclose($fp);
echo 'Резултати : <br>';
echo 'Kaspersky - '.$a.' гласа<br>';
echo "Norton - ".$b." гласа<br>";
echo "Panda - ".$c." гласа<br>";
?>Не е дълъг нали?
Сега ще го разгледаме ред по ред:
$vote= $HTTP_POST_VARS["vote"]; -
Променливата $vote може да приема три стойности - а,b или c ,в зависимост
от това за кой е гласувано в анкетата.
if (file_exists("db.inc")) - което буквално означава "Ако файла db.inc съществува"
Тази проверка е задължителна, защото файла може и да не съществува.
Той се създава когато някой за първи път гласува, но преди това още го няма.
Ако съществува се изпълнява този код:
$db= file("db.inc"); - отваря файла и го разделя на редове
като всеки ред ще бъде елемент от масива $db
$a=$db[0];-$а е равно на стойноста от първия ред на файла db.inc
$a=str_replace("\n","",$a);-от всеки елемент се маха знака за нов ред "\n"
$b=$db[1]; -$b е равно на стойноста от втория ред на файла db.inc
$b=str_replace("\n","",$b);
$c=$db[2]; -$c е равно на стойноста от третия ред на файла db.inc
$c=str_replace("\n","",$c);
ако не съществува, то това значи, че никой още не е гласувал и стойностите за
$a=0;
$b=0;
$c=0;
Следва проверка за кого е гласувано:
if ($vote==a)- ако е гласувано за Kaspersky
{$a=$a+1;} - $а се увеличава с 1
elseif ($vote==b) - ако е гласувано за Norton
{$b=$b+1;} - $b се увеличава с 1
elseif ($vote==c) - ако е гласувано за Panda
{$c=$c+1;} - $c се увеличава с 1
Следва запис на данните:
$zapisdb=$a."\n".$b."\n".$c; - $zapisdb e съставена от данните разделени с знак за нов ред
$fp = fopen ( "db.inc" ,"w"); - отваря файла за запис и изтрива цялото му съдържание.
Ако не съществува такъв файл го създава .
fwrite($fp, $zapisdb ); - записва променливата $zapis във файла db.inc
fclose($fp); - затваря файла db.inc
Следва показване на резултатите:
echo 'Резултати : <br>';
echo 'Kaspersky - '.$a.' гласа<br>';
echo "Norton - ".$b." гласа<br>";
echo "Panda - ".$c." гласа<br>";А файла db.inc ще преставлява нещо такова:
17
26
12където
17 е броя на гласувалите за Kaspersky
26 е броя на гласувалите за Norton
12 е броя на гласувалите за Panda
Когато някой потребтел гласува, скрипта vote.php променя стойноста на един
от редовете в зависимост от вота .
Сега ще промениме малко скрипта vote.php, като му добавиме няколко реда.
<html>
<head>
<title>vote</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>
<?php
$ipaddress = getenv("REMOTE_ADDR");
$vote= $HTTP_POST_VARS["vote"];
if (file_exists("db.inc"))
{
$db= file("db.inc");
$a=$db[0];
$a=str_replace("\n","",$a);
$b=$db[1];
$b=str_replace("\n","",$b);
$c=$db[2];
$c=str_replace("\n","",$c);
}
else
{
$a=0;
$b=0;
$c=0;
}
if (file_exists("ip.inc"))
{
$ip= file("ip.inc");
$n=count($ip);
for ($i=0; $i<$n;$i++)
{
if (eregi($ipaddress,$ip[$i]))
{
echo "Вие вече гласувахте.<br>";
echo 'Резултати : <br>';
echo 'Kaspersky - '.$a.' гласа<br>';
echo "Norton - ".$b." гласа<br>";
echo "Panda - ".$c." гласа<br>";
exit;
}
}
}
if ($vote==a)
{$a=$a+1;}
if ($vote==b)
{$b=$b+1;}
if ($vote==c)
{$c=$c+1;}
$zapisdb=$a."\n".$b."\n".$c;
$zapisip=$ipaddress."\n";
$fp = fopen ( "db.inc" ,"w");
fwrite($fp, $zapisdb );
fclose($fp);
$fp = fopen ( "ip.inc" ,"a");
fwrite($fp, $zapisip );
fclose($fp);
echo 'Резултати : <br>';
echo 'Kaspersky - '.$a.' гласа<br>';
echo "Norton - ".$b." гласа<br>";
echo "Panda - ".$c." гласа<br>";
?>Да разгледаме всеки добавен ред:
$ipaddress = getenv("REMOTE_ADDR"); - взима ip адреса на посетителя
и го присвоява на променливата $ipaddress
if (file_exists("ip.inc")) -проверява дали файла
ip.inc съществува(може да не съществува само в случай, че никой досега не е гласувал)
{
$ip= file("ip.inc");-ако съществува го отваря, като всеки ред от файла става
елемент от масива $ip
$n=count($ip);-$n става равна на броя на елементите в масива $ip
for ($i=0; $i<$n;$i++)-този цикъл ще обходи всичките елементи
{
if (eregi($ipaddress,$ip[$i]))-ако намери съответствие между ip-адреса на посетителя
и някой от ip-адресите записани в файла ip.inc ще изпълни ето това :
echo "Вие вече гласувахте.<br>";
echo 'Резултати : <br>';
echo 'Kaspersky - '.$a.' гласа<br>';
echo "Norton - ".$b." гласа<br>";
echo "Panda - ".$c." гласа<br>";
exit;
По този начин казва на на потребителя, че вече е гласувал, показва му резултатите досега и
спира изпълнението на скрипта.
Ако пък ip-адреса на потребителя го няма в базата данни скрипта ще извърши следното
$zapisip=$ipaddress."\n";- $zapisip е равна на ip-aдреса и към
него прибавен знака за нов ред(така че когато го записваме в файла ip.inc да е на отделен ред)
$fp = fopen ( "ip.inc" ,"a"); - този ред отваря файла за запис,
но не изтрива съдържанието му а, само добавяне. Ако фйла не съществува, го създава.
fwrite($fp, $zapisip ); - добавя ip адреса след края на съдържанието на файла.
fclose($fp); -затваря файлаУрока е подготвен специално за http://web-tourist.net


