Преглед на урок

Анкети за вашият сайт + админ панел

Анкети за вашият сайт + админ панел




Здравейте!
Това е повече като код, отколкото урок, но в кода има доста пояснения кое за какво е :)

Сега нека започваме с анкетата.

Първото нещо, което Ви трябва е SQL структрурата на БД.
Ето я и нея:

Код

CREATE TABLE `poll` ( 
`id` int(10) NOT NULL auto_increment, 
`vapros` varchar(250) COLLATE utf8_general_ci NOT NULL default '', 
`podrejdane` int(1) NOT NULL default '1', 
`status` int(1) NOT NULL default '1', 
PRIMARY KEY (`id`) 
); 

CREATE TABLE `otgovori` ( 
`id` int(10) NOT NULL auto_increment, 
`id_poll` int(10) NOT NULL, 
`otgovor` varchar(250) COLLATE utf8_general_ci NOT NULL default '', 
`broi` int(5) NOT NULL default '0', 
PRIMARY KEY (`id`) 
); 

CREATE TABLE `ips` ( 
`id` int(10) NOT NULL, 
`ip` varchar(25) COLLATE utf8_general_ci NOT NULL default '', 
PRIMARY KEY (`id`) 
);

След като сте създали BD и сте създали таблицата следва да създаден файла за връзка с BD.
Него ще го кръстим config_poll.php
Ето го и него:

Код

<?php 
$host="localhost"; 
$dbusername="root"; 
$dbpassword=""; 
$db="poll"; 
$db_conn = mysql_connect(" $host", "$dbusername", "$dbpassword" ) 
or die( "Не мога да се свържа с BD!" ); 
$conn=mysql_select_db("$db", $db_conn) or die( "Не мога да се свържа с BD!" ); 
$chars = "SET NAMES cp1251"; 
mysql_query($chars); 

$pass_admin = "123"; 
?>

Така мисля, че Ви е ясно как да го попълните.
Само долу където е променливата $pass_admin променете 123 на паролата, с която желаете да влизате в админ панела.

Нека сега продължим с кода.
Създавате си един файл function_poll.php
В него сложете следният код:

Код

<?php 
function poll($promenliva) { // създаваме функция 
$ip = getenv( "REMOTE_ADDR" ); 
include( "config_poll.php" ); // добавяме файла за връзка с BD 
if (isset($promenliva) && is_numeric($promenliva)) { // проверяваме дали сме задали стойност на функцията и ако сме задали дали е число 
$poll_here = mysql_num_rows(mysql_query("SELECT * FROM poll WHERE id = '$promenliva' LIMIT 1" )); // взимаме дадената анкета 
if ($poll_here > 0) { // ако анкетата съществува нея ще изкарваме в страницата 
$poll_query = mysql_query("SELECT * FROM poll WHERE id = '$promenliva' LIMIT 1" ); 
$poll = mysql_fetch_array($poll_query); 
$poll_broi = mysql_num_rows($poll_query); 
} else { // ако не съществува ще изкараме най-новата добавена анкета 
$poll_query = mysql_query("SELECT * FROM poll ORDER BY id DESC LIMIT 1" ); 
$poll = mysql_fetch_array($poll_query); 
$poll_broi = mysql_num_rows($poll_query); 
} 
} else { // ако не сме избрали точно дадена анкета ще вземеме последната добавена 
$poll_query = mysql_query("SELECT * FROM poll ORDER BY id DESC LIMIT 1" ); 
$poll = mysql_fetch_array($poll_query); 
$poll_broi = mysql_num_rows($poll_query); 
} 

if ($poll_broi > 0) { // ако изобщо съществува анкета 
if ($poll['status'] == 1) { // проверяваме дали сме включили анкетата 
$dali_si_glasuval = mysql_num_rows(mysql_query("SELECT * FROM ips WHERE ip = '$ip' AND id = '".$poll['id']."'" )); 
if ($dali_si_glasuval == 0) { // проверяваме дали потребителя е гласувал. Ако не е му позволяваме да гласува 
if (isset( $_POST['submit'] ) && isset( $_POST['vote'] ) && is_numeric( $_POST['vote'] )) { // малко защити :P 
$vote = $_POST['vote']; 
$dali_taq_anketa = mysql_fetch_array(mysql_query("SELECT * FROM otgovori WHERE id = '$vote' LIMIT 1" )); 
if ( $dali_taq_anketa['id_poll'] == $poll['id'] ) { // проверяваме дали отговора е точно към тази анкета 
mysql_query("UPDATE otgovori SET broi = broi + 1 WHERE id = '$vote' LIMIT 1" ); 
mysql_query("INSERT INTO ips (id,ip) VALUES ( '".$poll['id']."','$ip' )" ); 

if ($poll['podrejdane'] == 1) { $order_by = "ORDER BY id ASC"; } // ако е избран тип стандартно подреждане 
elseif ($poll['podrejdane'] == 2) { $order_by = "ORDER BY broi DESC"; } // ако е избран тип подреждане по гласове 

$query_otgovori = mysql_query("SELECT * FROM otgovori WHERE id_poll = '".$poll['id']."' $order_by" ); 
$query = mysql_query("SELECT SUM(broi) as kolko FROM otgovori WHERE id_poll = '".$poll['id']."' GROUP BY id_poll" ); 
$votes = mysql_fetch_array($query); 
$votes = $votes['kolko']; 
?> 
<b><?=$poll['vapros']?></b><br><br> 
<table border="0"> 
<?php 
// изкарваме резултатите от анкетата 
while ($row_otgovori = mysql_fetch_array($query_otgovori)) { 
$procent = $row_otgovori['broi'] * (100/$votes); // смятаме процентите 
$procent = round($procent); // закръгляме ги 
?> 
<tr><td><?=$row_otgovori['otgovor']?></td><td><img src="bar_left.bmp" height="9" border="0"><img src="vote.bmp" width="<?=$procent?>" height="9" border="0"><img src="bar_right.bmp" height="9" border="0"></td><td>Гласове: <?=$row_otgovori['broi']?> (<?=$procent?>%)</td></tr> 
<?php 
} 
?> 
</table><br> 
Общо гласове: <b><?=$votes?></b> 
<?php 
} 
} else { 
$query_otgovori = mysql_query("SELECT * FROM otgovori WHERE id_poll = '".$poll['id']."' ORDER BY id ASC" ); 
?> 
<b><?=$poll['vapros']?></b><br><br> 
<form action="" method="post"> 
<?php 
// тук извеждаме формата за гласуване с възможните отговори 
while ($row_otgovori = mysql_fetch_array($query_otgovori)) { ?> 
<input type="radio" name="vote" value="<?=$row_otgovori['id']?>"> <?=$row_otgovori['otgovor']?><br> 
<?php } ?> 
<input type="submit" name="submit" value="Гласувай"> 
</form> 
<?php 
} 
} else { // ако е гласувал му извеждаме резултатите 
if ($poll['podrejdane'] == 1) { $order_by = "ORDER BY id ASC"; } // ако е избран тип стандартно подреждане 
elseif ($poll['podrejdane'] == 2) { $order_by = "ORDER BY broi DESC"; } // ако е избран тип подреждане по гласове 

$query_otgovori = mysql_query("SELECT * FROM otgovori WHERE id_poll = '".$poll['id']."' $order_by" ); 
$query = mysql_query("SELECT SUM(broi) as kolko FROM otgovori WHERE id_poll = '".$poll['id']."' GROUP BY id_poll" ); 
$votes = mysql_fetch_array($query); 
$votes = $votes['kolko']; 
?> 
<b><?=$poll['vapros']?></b><br><br> 
<table border="0"> 
<?php 
// изкарваме резултатите от анкетата 
while ($row_otgovori = mysql_fetch_array($query_otgovori)) { 
$procent = $row_otgovori['broi'] * (100/$votes); // смятаме процентите 
$procent = round($procent); // закръгляме ги 
?> 
<tr><td><?=$row_otgovori['otgovor']?></td><td><img src="bar_left.bmp" height="9" border="0"><img src="vote.bmp" width="<?=$procent?>" height="9" border="0"><img src="bar_right.bmp" height="9" border="0"></td><td>Гласове: <?=$row_otgovori['broi']?> (<?=$procent?>%)</td></tr> 
<?php 
} 
?> 
</table><br> 
Общо гласове: <b><?=$votes?></b> 
<?php 
} 
} else { // ако е изключена ще показваме само резултатите без да даваме право да гласуват 
if ($poll['podrejdane'] == 1) { $order_by = "ORDER BY id ASC"; } // ако е избран тип стандартно подреждане 
elseif ($poll['podrejdane'] == 2) { $order_by = "ORDER BY broi DESC"; } // ако е избран тип подреждане по гласове 

$query_otgovori = mysql_query("SELECT * FROM otgovori WHERE id_poll = '".$poll['id']."' $order_by" ); 
$query = mysql_query("SELECT SUM(broi) as kolko FROM otgovori WHERE id_poll = '".$poll['id']."' GROUP BY id_poll" ); 
$votes = mysql_fetch_array($query); 
$votes = $votes['kolko']; 
?> 
<b><?=$poll['vapros']?></b><br><br> 
<table border="0"> 
<?php 
// изкарваме резултатите от анкетата 
while ($row_otgovori = mysql_fetch_array($query_otgovori)) { 
$procent = $row_otgovori['broi'] * (100/$votes); // смятаме процентите 
$procent = round($procent); // закръгляме ги 
?> 
<tr><td><?=$row_otgovori['otgovor']?></td><td><img src="bar_left.bmp" height="9" border="0"><img src="vote.bmp" width="<?=$procent?>" height="9" border="0"><img src="bar_right.bmp" height="9" border="0"></td><td>Гласове: <?=$row_otgovori['broi']?> (<?=$procent?>%)</td></tr> 
<?php 
} 
?> 
</table><br> 
Общо гласове: <b><?=$votes?></b> 
<?php 
} 
} else { 
echo "Няма такава анкета или все още няма добавени анкети!"; // изкарваме съобщение, че няма такава анкета или изобщо не сме добавили 
} 
} 
?>

Този код може да не го закачате. Разбира се ако желаете да променяте нещо може да го направите стига да знаете как :)

Сега следва и админ панела.
Създайте си файл admin.php(може да не е с това име, а както си решите Вие)
В него сложете следният код:

Код

<?php 
session_start(); 
include( "config_poll.php" ); 
$admin = $HTTP_SESSION_VARS['admin']; 
if (isset( $HTTP_SESSION_VARS['admin'] ) && $admin == 1) { 
echo "<a href=\"?page=add\">Добави анкета</a><br><br>"; 
$page = $_GET['page']; 
if ($page == "edit" && isset( $_GET['id'] ) && is_numeric( $_GET['id'] )) 
{ 
$id = $_GET['id']; 
$query_poll_exzit = mysql_query("SELECT * FROM poll WHERE id = '$id' LIMIT 1" ); 
$dali_poll_exzit = mysql_num_rows($query_poll_exzit); 
if ($dali_poll_exzit > 0) { 
if (isset( $_POST['submit'] )) { 
if ($_POST['vapros_edit'] != NULL && ($_POST['podrejdane_edit'] == 1 || $_POST['podrejdane_edit'] == 2) && ($_POST['off_poll'] == 0 || $_POST['off_poll'] == 1)) { 
mysql_query("UPDATE poll SET vapros = '".$_POST['vapros_edit']."',podrejdane = '".$_POST['podrejdane_edit']."',status = '".$_POST['off_poll']."' WHERE id = '$id' LIMIT 1" ); 

$query_otgovorite = mysql_query("SELECT * FROM otgovori WHERE id_poll = '$id' ORDER BY id ASC" ); 
while ($otgovorite = mysql_fetch_array($query_otgovorite)) { 
$idtoo = $otgovorite['id']; 
mysql_query("UPDATE otgovori SET otgovor = '".$_POST["otgovor_$idtoo"]."' WHERE id = '".$otgovorite['id']."'" ); 
} 
echo "<META HTTP-EQUIV=\"refresh\" CONTENT=\"3;URL=?\" >"; 
echo "<b>Анкетата е редактирана успешно!</b>"; 
} 
} else { 
$poll_exzit = mysql_fetch_array($query_poll_exzit); 
$query_otgovorite = mysql_query("SELECT * FROM otgovori WHERE id_poll = '$id' ORDER BY id ASC" ); 
?> 
<form action="" method="post"> 
Въпрос: <input type="text" name="vapros_edit" value="<?=$poll_exzit['vapros']?>" size="50"><br><br> 
<?php 
$nomer = 1; 
while ($otgovorite = mysql_fetch_array($query_otgovorite)) { 
?> 
Отговор <?=$nomer?>: <input type="text" name="otgovor_<?=$otgovorite['id']?>" value="<?=$otgovorite['otgovor']?>" size="50"><br> 
<?php 
$nomer++; 
} 
?><br> 
Подреждане: <select name="podrejdane_edit"> 
<option value="1"<?php if ($poll_exzit['podrejdane'] == 1) { echo " selected=\"selected\""; } ?>>Стандартно</option> 
<option value="2"<?php if ($poll_exzit['podrejdane'] == 2) { echo " selected=\"selected\""; } ?>>Брой отговори</option> 
</select><br> 
Изключване на гласуването: <select name="off_poll"> 
<option value="1"<?php if ($poll_exzit['status'] == 1) { echo " selected=\"selected\""; } ?>>Не</option> 
<option value="0"<?php if ($poll_exzit['status'] == 0) { echo " selected=\"selected\""; } ?>>Да</option> 
</select><br> 
<input type="submit" name="submit" value="Редактирай"> 
</form> 
<?php 
} 
} else { 
echo "Не съществува такава анкета!"; 
} 
?> 
<?php 
} 
elseif ( $page == "add" ) 
{ 
if (isset( $_POST['submit'] )) { 
$kolko_otgovora = 0; 
for ($i=1;$i<=15;$i++) { 
$otgovor4e = trim( $_POST["otgovor_$i"] ); 
if ($otgovor4e != NULL) { 
$otgovorite[] = $otgovor4e; 
$kolko_otgovora++; 
} 
} 

if ($kolko_otgovora >= 2 && $_POST['vapros'] != NULL && ($_POST['podrejdane'] == 1 || $_POST['podrejdane'] == 2)) { 
$kolko_otgovori = count($otgovorite); 
mysql_query("INSERT INTO poll (vapros,podrejdane) VALUES ('".$_POST['vapros']."','".$_POST['podrejdane']."' )" ); 

$posleden_id = mysql_fetch_array(mysql_query("SELECT * FROM poll ORDER BY id DESC LIMIT 1" )); 
$posleden_id = $posleden_id['id']; 
for ($no=0;$no<$kolko_otgovori;$no++) { 
if ($otgovorite[$no] != NULL) { 
mysql_query("INSERT INTO otgovori (id_poll,otgovor) VALUES ('$posleden_id','$otgovorite[$no]' )" ); 
} 
} 
echo "<b>Анкетата е успешно създадена!</b>"; 
echo "<META HTTP-EQUIV=\"refresh\" CONTENT=\"3;URL=?\" >"; 
} else { echo "Не сте въвели въпрос или не сте въвели най-малко 2 отговора!"; } 

} else { 
?> 
<form action="" method="post"> 
Въпрос: <input type="text" name="vapros" size="50"><br><br> 
<?php 
for ($i=1;$i<=15;$i++) { 
?> 
Отговор <?=$i?>: <input type="text" name="otgovor_<?=$i?>" size="50"><br> 
<?php 
} 
?> 
<br> 
Подреждане: <select name="podrejdane"> 
<option value="1">Стандартно</option> 
<option value="2">Брой отговори</option> 
</select><br> 
<input type="submit" name="submit" value="Създай"> 
</form> 
<?php 
} 
} 
elseif ($page == "dell" && isset( $_GET['id'] ) && is_numeric( $_GET['id'] )) 
{ 
$id = $_GET['id']; 
mysql_query("DELETE FROM poll WHERE id = '$id'" ); 
mysql_query("DELETE FROM otgovori WHERE id_poll = '$id'" ); 
mysql_query("DELETE FROM ips WHERE id = '$id'" ); 
echo "Анкетата е успешно изтрита!"; 
echo "<META HTTP-EQUIV=\"refresh\" CONTENT=\"3;URL=?\" >"; 
} 
else 
{ 
$query_polls = mysql_query("SELECT * FROM poll ORDER BY id DESC" ); 
?> 
<table border="1"> 
<tr><td><b>ID:</b></td><td><b>Анкета</b></td><td><b>Опции</b></td></tr> 
<?php 
while ($polls = mysql_fetch_array($query_polls)) { 
?> 
<tr><td><?=$polls['id']?></td><td><?=$polls['vapros']?></td><td>[<a href="?page=edit&id=<?=$polls['id']?>">Редактирай</a>] [<a href="?page=dell&id=<?=$polls['id']?>">Изтрий</a>]</td></tr> 
<?php 
} 
?> 
</table> 
<?php 
} 
if ( $page == "logout" ) { $HTTP_SESSION_VARS['admin'] = 0; echo "<META HTTP-EQUIV=\"refresh\" CONTENT=\"1;URL=?\" >"; } 
echo "<br><br><a href=\"?page=logout\">Изход</a>"; 
} else { 
if (isset( $_POST['submit'] ) && $_POST['pass_admin'] == $pass_admin) { 
$HTTP_SESSION_VARS['admin'] = 1; 
echo "<META HTTP-EQUIV=\"refresh\" CONTENT=\"1;URL=?\" >"; 
} else { 
?> 
<form action="" method="post"> 
Парола: <input type="password" name="pass_admin" size="10"> 
<input type="submit" name="submit" value="Влез"> 
</form> 
<?php 
} 
} 
?>

И след като ги имате тези файлове. Може да влезнете в админ панела и да създадете анкета.
Сега ето как може да добавите анкетата в страницата, която си пожелаете.

Примерно искате да добавите анкета в страницата index.php
Добавяте някаде най-отгоре във файла следният код:
<?php include("function_poll.php" ); ?>
Така ще include функцията с анкетите :)

Сега е най-лесното. Там където искате да поставите анкетата просто трябва да сложите следният код:

Код
<?php @poll(); ?>

Така автоматично ще се появи последната от вас създадена анкета в админ панела.
Ако желаете примерно в друга страница да поставите точно определена анкета.
Трябва да поставите този код:

Код
<?php @poll(1); ?>

Както виждате между скобите сме сложили 1.
Какво точно прави тя. Това е ID на самата анкета. Примерно искате да поставите точно дадена анкета.
Влизате в admin панела. Виждате ID-то и и после между скобите в кодчето по-горе слагате ID на анкетата и тя ще се появи :)

Това е всичко. Надявам се кода да Ви е харесал :P

Ето ви и 3-те картинки от урока:
http://tapotiichici.hit.bg/bar_left.bmp
http://tapotiichici.hit.bg/bar_right.bmp
http://tapotiichici.hit.bg/vote.bmp

Сложте ги и 3-те в папката, в която са файловете!

Ако урокът ви допада, споделете го в Twitter и Facebook или го запазете в Delicious.




Урокът е добавен от: HunteR

Коментари

Lo0pY

Браво за положения труд :)
Сега ще я тествам..

Lo0pY

Много лошо че след всеки рефреш можеш пак да гласуваш :(
Поне при мен така де...
Иначе добре направена... :) Поздрави

roshli0

Браво супер е, но бихте ли ви помогнали да направя системата за анкети не със MySql ами информацията да се записва във файл.
Благодаря ви за помоща.

Добави коментар

Трябва да сте регистиран потребител за може да оставяте коментари! Направете своята безплатна регистрация още сега.