![]() ![]() |
21.06.2008г. в 12:36ч.
Коментар:
#1
|
|
|
Новак ![]() Група: Потребители Съобщения: 29 Дата на регистрация: 31.07.2006г. От: Септември Потребител # 668 |
Това е код с доста пояснения кое за какво е. Сега нека започваме с анкетата. Първото нещо, което Ви трябва е 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 '' ); След като сте създали 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"); ?> Така ще включите функцията с анкетите. Сега е най-лесното. Там където искате да поставите анкетата просто трябва да сложите следният код: КОД <?php @poll(); ?> Така автоматично ще се появи последната от вас създадена анкета в админ панела. Ако желаете примерно в друга страница да поставите точно определена анкета трябва да поставите този код: КОД <?php @poll(1); ?> Както виждате между скобите сме сложили 1. Какво точно прави тя? Това е ID на самата анкета. Ако желаете да поставите точно дадена анкета влизате в admin панела, виждате ID-то й и и после между скобите в кода по-горе слагате ID на анкетата и тя ще се появи. Ето ви и 3-те картинки от урока: Сложте ги и 3-те в папката, в която са файловете! Това е всичко. Надявам се кода да ви е харесал. Кода е авторски и забранявам преписването му в други сайтове без мое съгласие или съгласието на админа! Това съобщение е било редактирано от HunteR на 21.06.2008г. в 12:38ч. |
|
|
4.08.2008г. в 17:36ч.
Коментар:
#2
|
|
|
Новак ![]() Група: Потребители Съобщения: 29 Дата на регистрация: 31.07.2006г. От: Септември Потребител # 668 |
Така направих малко промени с анкетите.
Ако вече използвате тази система ще трябва да добавите новите полета в таблица poll. Ето как ще стане това: Отивате в phpMyAdmin примерно. Цъкате на базата данни на анкетите и намирате бутончето SQL. Трябва да има поле за слагане на код. Въвеждате това: КОД ALTER TABLE poll ADD `otgovori_min` int(2) NOT NULL default '1'; ALTER TABLE poll ADD `otgovori_max` int(2) NOT NULL default '1'; Ако ви изпише, че успешно е въвело 2-те полета значи до тук всичко е ОК. След, което сваляте този архив: Замествате новите файлове със старите, като не слагате файла config_poll.php, защото пак ще трябва да гласите връзката с базата данни и паролата за админ панела. --------------- А за тези, които те първа инсталират системата за анкетите - сваляте горният архив, разархивирате, правите си база данни. Импортвате си структурата на таблицата в phpMyAdmin-а, която се намира във файла SQL.txt. И сте готови Повече информация може да намерите в урока. --------------- Сега нека обясня какво ново съм добавил към анкетите. Не е кой знае какво, но видях на няколко места, че го искат и реших да направя този Update :?: Значи вече след като създавате анкета ще може да избирате за колко отговора да може да гласува даден потребител. Като може да определите за колко най-малко отговора да може да гласува и за колко най-много Ако изберете повече от 1 отговор radio бутончетата ще станат checkbox-чета П.П: Само за информация. Ако нагласите да трябва да се гласува примерно за най-малко 2 отговора от анкетата трябва някъде да го съобщите, защото потребителите няма да знаят и няма да им добави резултатите. |
|
|
16.08.2008г. в 22:04ч.
Коментар:
#3
|
|
![]() Новак ![]() Група: Потребители Съобщения: 10 Дата на регистрация: 28.09.2006г. Потребител # 1 119 |
Искам да попитам а в този модел анкета всеки може ли да се гласува ?
|
|
|
21.04.2009г. в 21:13ч.
Коментар:
#4
|
|
|
Новак ![]() Група: Потребители Съобщения: 6 Дата на регистрация: 21.04.2009г. Потребител # 7 029 |
А идея как да изкарва резултатите и без да си гласувал? Т.е. бутонче Виж резултатите като при всяка анкета.
|
|
|
30.06.2009г. в 23:15ч.
Коментар:
#5
|
|
|
Новак ![]() Група: Потребители Съобщения: 29 Дата на регистрация: 31.07.2006г. От: Септември Потребител # 668 |
Това го има във версия 2, която ти дадох на LS
П.П: Който иска може да я свали от тук :8080/polls/polls.rar |
|
|
3.08.2009г. в 23:19ч.
Коментар:
#6
|
|
![]() Магистър ![]() ![]() ![]() ![]() ![]() Група: Потребители Съобщения: 591 Дата на регистрация: 20.03.2008г. От: Стара Загора/София Потребител # 5 216 |
Аз бих използвал require() вместо include().
|
|
|
25.08.2010г. в 15:52ч.
Коментар:
#7
|
|
|
Новак ![]() Група: Потребители Съобщения: 5 Дата на регистрация: 24.08.2010г. Потребител # 12 702 |
moje li da popitam kade da gi sloja tezi raboti za6toto nishto ne razbiram blagoedarq predvaritelno
|
|
|
26.08.2010г. в 19:59ч.
Коментар:
#8
|
|
![]() Магистър ![]() ![]() ![]() ![]() ![]() Група: Потребители Съобщения: 591 Дата на регистрация: 20.03.2008г. От: Стара Загора/София Потребител # 5 216 |
тц... и да ти кажем пак няма да разбереш така че...
|
|
|
1.09.2010г. в 17:02ч.
Коментар:
#9
|
|
|
Новак ![]() Група: Потребители Съобщения: 5 Дата на регистрация: 24.08.2010г. Потребител # 12 702 |
molate pone ako znaesh nqkoe klip4e ili nqkoii dr urok koiito e podroben shte sam ti mn blagoedaren
blagodarq predvaritelno |
|
|
1.09.2010г. в 20:08ч.
Коментар:
#10
|
|
![]() Магистър ![]() ![]() ![]() ![]() ![]() Група: Потребители Съобщения: 591 Дата на регистрация: 20.03.2008г. От: Стара Загора/София Потребител # 5 216 |
На програмиране с клипчета не се учи...
|
|
|
1.09.2010г. в 21:07ч.
Коментар:
#11
|
|
|
Новак ![]() Група: Потребители Съобщения: 5 Дата на регистрация: 24.08.2010г. Потребител # 12 702 |
ЦИТАТ(kioki @ 1.09.2010г. в 21:08ч.) ![]() На програмиране с клипчета не се учи... po to4no |
|
|
5.09.2010г. в 17:27ч.
Коментар:
#12
|
|
|
Новак ![]() Група: Потребители Съобщения: 5 Дата на регистрация: 24.08.2010г. Потребител # 12 702 |
aide pls mola vi daiite sistema za reg ama hubavo da e pokazano 4e sam na4inaesht
|
|
|
8.09.2010г. в 10:21ч.
Коментар:
#13
|
|
|
Новак ![]() Група: Потребители Съобщения: 5 Дата на регистрация: 24.08.2010г. Потребител # 12 702 |
dobre napravix vsi4ko no sega kak da go sloja v saita mi polzvam za xosting hit.bg ima li lqkaf na4in pishete pls
|
|
|
8.09.2010г. в 15:30ч.
Коментар:
#14
|
|
![]() Доктор - уроци ![]() ![]() ![]() ![]() ![]() ![]() Група: Потребители Съобщения: 836 Дата на регистрация: 15.11.2008г. Потребител # 6 111 |
не, няма. hit.bg не поддържа нито php, нито каквато и да било база данни
|
|
|
![]() ![]() |