Помогни ни да направим Uroci.net по - богат! Добави урок

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

PHP » PHP
HunteR   трудност:    видян: 15781

Това е код с доста пояснения кое за какво е.

 

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



Първото нещо, което Ви трябва е 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 "Няма такава анкета или все още няма добавени анкети!"; // изкарваме съобщение, че няма такава анкета или изобщо не сме добавили
}
}
?>


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

 


Страници: 1 2 »

Коментари (16)

HunteR на 19.06 2008 в 14:57ч.
Забравих да ви дам и картинките.
Ето ги:
http://tapotiichici.hit.bg/bar_left.bmp
http://tapotiichici.hit.bg/bar_right.bmp
http://tapotiichici.hit.bg/vote.bmp

Сложте ги и 3-те в папката, в която са файловете!
HunteR на 21.06 2008 в 12:31ч.
Имах грешка:
Таблица ips:
CREATE TABLE `ips` (
`id` int(10) NOT NULL,
`ip` varchar(25) COLLATE utf8_general_ci NOT NULL default '',
PRIMARY KEY (`id`)
);


Трябва да изглежда така:
CREATE TABLE `ips` (
`id` int(10) NOT NULL,
`ip` varchar(25) COLLATE utf8_general_ci NOT NULL default ''
);
HunteR на 14.07 2008 в 11:45ч.
Ако не Ви се занимава да създавате на ръка всичките файлове - ето Ви архив с всичките файлове: http://tapotiichici.hit.bg/Polls.rar
PsycXo на 14.07 2008 в 17:39ч.
Какво по-дяволите е BD? Защо при опит да отворя index.php, ми пише "Не мога да се свържа с BD!" ?
GainWard на 17.07 2008 в 07:30ч.
trqbva da e DB = Datebase ;)
justifyyy на 17.07 2008 в 11:27ч.
BD е по-българско. Означава "база данни" за неразбралите. А DB е Database, не Datebase :D
embata на 23.07 2008 в 14:48ч.
Имам въпрос как направя така че да се избират примерно 5 отговора и като се гласува и 5 те да ги изкара че е гласувано за тях кутийките трябва да са checkbox ама другото незнам как да стане ?
gamer345 на 07.09 2008 в 11:16ч.
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/www/csfrags.freehostia.com/admin.php on line 131 Какво да правя? config_poll-a е попълнен правилно обаче не мога да добавям анкети ?????
gamer345 на 07.09 2008 в 11:18ч.
първо пише:
Анкетата е успешно създадена успешно! (ама пак го има онуй Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/www/csfrags.freehostia.com/admin.php on line 131 ) и не ми я добавя
alore на 08.09 2008 в 15:17ч.
Качвам файловете, но като влезна в index.php или admin.php пише "Не мога да се свържа с БД." Какво съм забравил?
HunteR на 10.09 2008 в 13:16ч.
Еми @gamer345 явно нещо не си направил както трябва.
Ето виж тук има демо и всичко си бачка: http://hunter.bg2.info/test/poll/

@alore трябва да си нагласиш връзката за базата данни.
Това се прави от файла config_poll.php
NePoZnAtIa на 15.06 2009 в 22:01ч.
Нещо се не става бе казва ми няма база данни апък аз истеглих това дето си го дал...архива...и пак не ще бе :D
embata на 12.07 2009 в 17:55ч.
NePoZnAtIa - трябва да си си направил база данни и да я свържеш за това не става !
и като си направиш базата данни трева да сложиш SQL таблиците в нея иначе нищо нема да стане !
slavov на 04.08 2009 в 19:38ч.
а как да вържа базата данни със самата анкета ? Че качих файловете сичко нарпавих ама не съм ги вързал нещо как трябва !?
slavov на 11.08 2009 в 13:45ч.
вързах го но като ида във админ панела за да въведа анкета и ми дава грешка:
Parse error: syntax error, unexpected '=' in /home/slav0v/public_html/anketa2/admin.php on line 14
ergobg на 01.02 2015 в 16:17ч.
Нещо не се получава когато се опитвам да вляза в админ панела ми иска парола и след като я въведа пак ми иска и до там, паролата която въвеждам е правилна но не става. Защо?

Регистрирайте се, за да добавите коментар


Калдейта ЕООД - © 2003-2010. Всички права запазени.
Препоръчваме: Национален Бизнес | Bomba.bg | IT Новини | Диплома.бг | TRAVEL туризъм | Реферати | AmAm.bg | Иде.ли | Курсови работи | Фото Форум | Spodeli.net | Фото-Култ | Atol.bg | Elmaz.com | MobileBulgaria.com | Казанлък.Com