Система за анкети
Ще създадем система за анкети, която може да сложите в вашия сайт и с която може да създавате неопределен брои анкети.
Като за начало ще трябва да създадем таблиците в mysql те ще са три на брои, в първата ще записваме въпросите, в втората отговорите и резултатите и в третата ИП адресите на тези които са гласували.

SQL
CREATE TABLE `ip` (
`ip_id` int(11) NOT NULL auto_increment,
`v_id` varchar(10) NOT NULL,
`uip` varchar(250) NOT NULL,
PRIMARY KEY (`ip_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=0 ;

CREATE TABLE `otgovori` (
`o_id` int(11) NOT NULL auto_increment,
`v_id` varchar(5) NOT NULL,
`otgovor` varchar(250) character set cp1251 NOT NULL,
`rezultat` varchar(10) NOT NULL,
PRIMARY KEY (`o_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=0 ;

CREATE TABLE `vaprosi` (
`v_id` int(11) NOT NULL auto_increment,
`vapros` varchar(250) character set cp1251 NOT NULL,
PRIMARY KEY (`v_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=0 ;

Това са трите таблици

Сега нека създадем конфиг файла.
conn.php

<?php
$user="****"; // Базаданни потребител
$password="*****"; // Базаданни парола
$database="******"; // Име на Базата данни
$link=mysql_connect('localhost',$user,$password);
$db=mysql_select_db($database);
?>



Следва формата за създаване на анкета.
addnew.php

<?php
//Първо проверяваме дали има изпратена стойност от формата ако има записваме това което сме изпратили от формата ако няма на екрана се появява формата.
if (isset($_POST['submit'])) {
$vapros=$_POST['vapros']; // Взимаме въпроса изпратен от формата.
$otg=array(); // Създаваме масив от отговори и цикъл с които ще ги ги вкараме в масива.
for($i=0;$i<=15;$i++){
$otg[$i]=$_POST['otg'.$i];//Взимаме отговорите изпратени от формата.
}

//Понеже от формата изпращаме и присвояваме 16 полета а анкетата която сме създали може да има по малко отговори трябва да премахнем празните елементи от масива.
foreach($otg as $i => $value) {
if($value == "") {unset($otg[$i]);}
}


$realotg= array_values($otg); //Това е новия масив с всички отговори
$broi=count($realotg); // Преброяваме елементите в масива

include('conn.php');//Инклудваме конфиг файла с който се свързваме в БД
$sql="INSERT vaprosi (vapros) VALUES ('$vapros')";//Записваме въпроса в таблицата vaprosi
$rez=mysql_query($sql,$link);

$sql="SELECT * FROM vaprosi ORDER BY v_id DESC LIMIT 0 , 1";//Селектираме най-големия Индивидуалния номер на последния записан въпрос
$rez=mysql_query($sql,$link);
$red=mysql_fetch_array($rez);
$v_id=$red['v_id'];

$broi=count($realotg)-1;

//С един дикъл записваме всички отговори в таблицата otgovori
for($i=0;$i<=$broi;$i++){
$sql="INSERT INTO otgovori(`v_id` , `otgovor` , `rezultat`) VALUES ('$v_id','$realotg[$i]','0')";
$rez=mysql_query($sql,$link);
}

}
//този код се изпълнява преди формата да бъде изпълнена
else{
echo"<form action=\"addnew.php\" method=\"POST\" />\n";
echo"Въпрос<br />";
echo"<input type=\"text\" name=\"vapros\" /><br/><br />Отговори<br />\n";

// С цикъл
for($i=0;$i<=15;$i++){

echo"<input type=\"text\" name=\"otg".$i."\" style=\"width:400px;\"/><br />\n";
}
echo"<input type=\"submit\" name=\"submit\" /></form>";
}
?>


Създаваме и index.php

<?php
include('conn.php'); // Инклудваме конфиг файла
$ip= getenv("REMOTE_ADDR"); //Взимаме ИП адреса на потребителя
$sql="SELECT * FROM vaprosi ORDER BY v_id DESC LIMIT 0 , 1"; //Селектираме последния записан въпрос в БД
$rez=mysql_query($sql,$link);
$red=mysql_fetch_array($rez);
$vapros=$red['vapros'];//Това е променливата с въпроса
$v_id=$red['v_id']; //Това е променливата с ИД номера на въпроса

$sql1="SELECT * FROM ip WHERE `uip` LIKE '$ip' AND `v_id` LIKE '$v_id' ";//Селектираме от таблицата с ИП адреси дали има записан ИП адреса на потребителя и ИД на въпроса , т.е. дали е гласувал вече.
$rez1=mysql_query($sql1,$link);
$chekip=mysql_num_rows($rez1); //Ако даден потребител е гласувал ще върне резултат по голям от 0 в противен случаи ще върне 0

$sql1="SELECT * FROM ip WHERE `v_id` LIKE '$v_id'";
$rez1=mysql_query($sql1,$link);
$broiip=mysql_num_rows($rez1); //Взимаме броя на общо гласувалите в анкетата като селектираме ИП адресите които са записани за даден въпрос

echo $vapros."<br /><br />"; //Принтираме Въпроса


//Проверяваме дали потребителя е гласувал ако не е изписваме формата за гласуване
if($chekip==0){


$sql="SELECT * FROM otgovori WHERE v_id LIKE '$v_id'";//Селектираме всички отговори със ИД($v_id) на въпроса.
$rez=mysql_query($sql,$link);


echo"<form action=\"sendvote.php\" method=\"POST\" >";

//С цикала while принтираме отговорите
while($red=mysql_fetch_array($rez)){
//С радио бутона изпращаме $о_id ( ид на въпроса) към формата такаче да бъде променено точно това поле от БД.
echo $red['otgovor']."<input type=\"radio\" name=\"vote\" value=\"".$red['o_id']."\" /><br />";
}
echo"<input type=\"submit\" /></form>";
}


//Тази част от кода се изпалнява ако потребителя вече е гласувал т.е. акo $chekip получи стоиност по голяма от 0
else{
//Селектираме отговорите от таблица отговори за съответния въпрос
$sql="SELECT * FROM otgovori WHERE v_id LIKE '$v_id'";
$rez=mysql_query($sql,$link);

//Отново с цикъл ги принтираме
while($red=mysql_fetch_array($rez)){

echo $red['otgovor']." ".$red['rezultat']." ";
$procent=$red['rezultat']*(100/$broiip) ;//Пресмятаме ги в проценти

echo "<img src=\"bar_left.gif\" alt=\"\" border\"0\" /><img src=\"vote.gif\" style=\"width:$procent; height:9px\" alt=\"\" border\"0\" /><img src=\"bar_right.gif\" alt=\"\" border\"0\" /><br />";
}

}

mysql_close($link);
?>


Сега е ред и на последния фаил този, които обработва формата за гласуване
SENDVOTE.PHP

<?php
$vote=$_POST['vote'];//Присвояваме стойноста на въпроса
$ip= getenv("REMOTE_ADDR"); //Взимаме ИП адреса на потребителя
include('conn.php');//Инклудваме конфиг файла
$sql="SELECT * FROM otgovori WHERE o_id LIKE '$vote'";//Селектираме от таблицата с отговори отговора които съответства на $vote ( на изпратения отговор )
$rez=mysql_query($sql,$link);
$red=mysql_fetch_array($rez);

$v_id=$red['v_id'];
$tvote=$red['rezultat'];

$tvote++ ;

$sql1="SELECT * FROM ip WHERE `uip` LIKE '$ip' AND `v_id` LIKE '$v_id' ";//Проверяваме дали този потребител вече не е гласувал
$rez1=mysql_query($sql1,$link);
$chekip=mysql_num_rows($rez1);//Проверяваме дали този потребител вече не е гласувал

//Ако не е гласувал записваме в полето с ИД които сме приели от $vote стоиноста на $tvote
if($chekip==0){
$sql="UPDATE otgovori SET rezultat='$tvote' WHERE o_id='$vote'";
$rez=mysql_query($sql,$link);

$sql="INSERT ip (v_id , uip) VALUES ('$v_id', '$ip')";
$rez=mysql_query($sql,$link);
}
//Ако потребителя вече е гласувал ...
else {echo "Вие вече сте гласували!";}
mysql_close($link);
//Пренасочваме го към страницата от която идва
$refe=getenv("HTTP_REFERER");
header("Location: $refe");
?>

За графиката при показване на резултатите ще ви трябват следните картинки
http://web-tourist.net/project/mute/bar_left.gif
http://web-tourist.net/project/mute/vote.gif
http://web-tourist.net/project/mute/bar_right.gif


DEMO
Незнам дали ви стана ясно, но ако имате въпроси питайте в форума.

УРОКА Е ПОДГОТВЕН СПЕЦИАЛНО ЗА WEB-TOURIST.NET














/ Трябва да сте регистриран за да напишете коментар /
От: SeCuRiTy
13:18 13-11-2009
Анкетата е супер :P
От: WindowsXP
14:45 02-02-2010
Не ми харесва, поради простата причина, че когато пиша текст на кирилица, той ми излиза на въпросителни ?????? ??? ??
От: Anton40
17:14 23-09-2010
Еми не си сложил тага, който разчита кирилицата за това ти става така :)
От: varnaweb
22:40 31-01-2011
По повод безплатно създаване на анкети виж www.webanketi.com

Много лесен за работа, за по малко от минута е готова анкетата, без регистрация, всичко е на български.
1