Webmaster общности: Predpriemach.com | SearchEngines.bg

    Анкети + админ панел

    Автор: HunteR

    Здравейте,

    знам, че има доста уроци за анкети, но реших да напиша и аз един 🙂
    Това е повече като код, отколкото урок, но в кода има доста пояснения кое за какво е 🙂

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

    Първото нещо, което Ви трябва е 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
    Добавяте някаде най-отгоре във файла следният код:

    Така ще include функцията с анкетите 🙂

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

    <?php @poll(); ?>

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

    <?php @poll(1); ?>

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

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

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

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

    Кода е авторски и забранявам преписването му в други сайтове без мое съгласие или съгласието на админа!

    Оставете коментар