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

    Система за анкети

    Ще създадем система за анкети, която може да сложите в вашия сайт и с която може да създавате неопределен брои анкети.
    Като за начало ще трябва да създадем таблиците в 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");
    ?>

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

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

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