За последние 24 часа нас посетили 16618 программистов и 1643 робота. Сейчас ищут 1232 программиста ...

Голосование на AJAX

Тема в разделе "JavaScript и AJAX", создана пользователем alexei, 13 авг 2008.

  1. alexei

    alexei Активный пользователь

    С нами с:
    25 июл 2006
    Сообщения:
    46
    Симпатии:
    0
    Адрес:
    Россия, Нижневартовск
    Доброго времени суток господа. В общем курил я курил маны по AJAX, не догоняю, начал с простого, это голосование, написал скрипт, пробывал его завязать на AJAX'e, не получилось, в общем просьба моя в следующем, объясните пожалуйста как оно работает на рабочем примере.

    Мой скрипт голосования, кратко о нем:
    1. Работает с MySQL
    2. Разрешен 1 голос, 1 раз в сутки с одного ip адреса.

    Сам скрипт:
    index.php
    PHP:
    1.  
    2. <?php
    3.  
    4. // Подключаемся к базе
    5. include ("sqlconnect.php");
    6.  
    7. // Получаем дату и ip
    8. $curdate = date("Y-m-d");
    9. $ip = $_SERVER['REMOTE_ADDR'];
    10.  
    11. //  Проверяем текущее голосование
    12. $query = "SELECT `id`,`title` FROM `polls` WHERE `start` <= '$curdate' AND `end` >= '$curdate';";
    13. $result = mysql_query($query) or die(mysql_error());
    14. $question = mysql_fetch_array($result);
    15. // Если голосований нет, выводим информационное сообщение
    16. if (!$question){
    17.     echo 'На данный момент опросы не проводятся';
    18. }
    19. // Если голосование есть
    20. else{
    21.     // Проверяем голосовал ли юзер в этом опросе
    22.     $query = "SELECT * FROM `polls_votes` WHERE `ip` LIKE '$ip' AND `date` = '$curdate';";
    23.     $result = mysql_query($query) or die(mysql_error());
    24.     $checkvote = mysql_num_rows($result);
    25.     // Если голосовал выводим ему результат и сообщение о том что он уже голосовал
    26.     if ($checkvote > 0){
    27.     echo $question['title'].'<br>';
    28.     $query = "SELECT `id`, `option_text`, (SELECT COUNT(id) FROM `polls_votes` WHERE `option_id`=`polls_options`.`id`) AS votes FROM `polls_options` WHERE `poll_id` = '".$question['id']."';";
    29.     $result = mysql_query($query) or die(mysql_error());
    30.     while ($options = mysql_fetch_array($result)){
    31.     echo $options['option_text'].'-'.$options['votes'].'<br>';
    32.     }
    33.     echo 'Вы уже голосовали в этом опросе';
    34. }
    35.     else{
    36.     // Выводим форму с возможностью проголосовать
    37.     echo $question['title'].'<br>';
    38.     $query = "SELECT `id`, `option_text`, (SELECT COUNT(id) FROM `polls_votes` WHERE `option_id`=`polls_options`.`id`) AS votes FROM `polls_options` WHERE `poll_id` = '".$question['id']."';";
    39.     $result = mysql_query($query) or die(mysql_error());
    40.     echo '<form name="poll" action="vote.php" method="post">';
    41.     while ($options = mysql_fetch_array($result)){
    42.     echo $options['option_text'].'<input type="radio" name="option" value="'.$options['id'].'"</input><br>';
    43.     }
    44.     echo '<input type="submit" value="Проголосовать"></form>';
    45.     }
    46. }
    47. ?>
    48.  
    vote.php
    PHP:
    1.  
    2. <?php
    3.  
    4. // Подключаемся к базе
    5. include ("sqlconnect.php");
    6.  
    7. // Получаем дату и ip
    8. $curdate = date("Y-m-d");
    9. $ip = $_SERVER['REMOTE_ADDR'];
    10.  
    11. // Получаем option
    12. $option = (int)$_REQUEST['option'];
    13.  
    14. // Если пользователь не указал вариант ответа, отсылаем ему информационное сообщение
    15. if ($option == 0){
    16.     echo 'Ошибка, вы не указали один из вариантов ответа';
    17. }
    18. else{
    19. //  Проверяем текущее голосование
    20. $query = "SELECT `id` FROM `polls` WHERE `start` <= '$curdate' AND `end` >= '$curdate';";
    21. $result = mysql_query($query) or die(mysql_error());
    22. $question = mysql_fetch_array($result);
    23. // Если голосований нет, выводим информационное сообщение
    24. if (!$question){
    25.     echo 'На данный момент опросы не проводятся';
    26. }
    27. // Если голосование есть
    28. else{
    29.     // Проверяем голосовал ли юзер в этом опросе
    30.     $query = "SELECT * FROM `polls_votes` WHERE `ip` LIKE '$ip' AND `date` = '$curdate';";
    31.     $result = mysql_query($query) or die(mysql_error());
    32.     $checkvote = mysql_num_rows($result);
    33.     if ($checkvote > 0){
    34.         echo 'Вы уже голосовали в этом опросе';
    35.     }
    36.     // Если все ок, записываем в базу информацию
    37.     else{
    38.         $query = "INSERT INTO `polls_votes` (`id`, `option_id`, `ip`, `date`) VALUES(NULL, '".$option."','$ip', '$curdate');" or die(mysql_error());
    39.         $result = mysql_query($query) or die(mysql_error());
    40.         echo 'Ваш голос учтен. Спасибо за участие в опросе.';
    41.     }
    42. }
    43. }
    44.  
    45. ?>
    46.  
    sqlconnect.php
    PHP:
    1.  
    2. <?php
    3.  
    4. // Подключаемся к базе
    5. $sql = mysql_connect("hostname", "user", "pass");
    6. mysql_select_db("dbase");
    7. mysql_query("SET NAMES cp1251");
    8. ?>
    9.  
    Дамп базы MySQL:
    [sql]
    CREATE TABLE `polls` (
    `id` int(11) NOT NULL auto_increment,
    `title` varchar(255) default NULL,
    `start` date NOT NULL,
    `end` date NOT NULL,
    PRIMARY KEY (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=cp1251 ;

    CREATE TABLE `polls_options` (
    `id` int(11) NOT NULL auto_increment,
    `poll_id` int(11) default NULL,
    `option_text` varchar(255) default NULL,
    PRIMARY KEY (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=cp1251 ;

    CREATE TABLE `polls_votes` (
    `id` int(11) NOT NULL auto_increment,
    `option_id` int(11) default NULL,
    `ip` varchar(255) default NULL,
    `date` date NOT NULL,
    PRIMARY KEY (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=cp1251 ;
    [/sql]

    Админки у скрипта нету пока что, для созданя опроса используйте следующий запрос:
    [sql]
    INSERT INTO `polls` VALUES (1, 'Любите ли вы AJAX ?', '2008-08-13', '2008-08-20');
    INSERT INTO `polls_options` VALUES (1, 1, 'Да');
    INSERT INTO `polls_options` VALUES (2, 1, 'Нет');
    INSERT INTO `polls_options` VALUES (3, 1, 'А что это такое ?');
    [/sql]
     
  2. alexei

    alexei Активный пользователь

    С нами с:
    25 июл 2006
    Сообщения:
    46
    Симпатии:
    0
    Адрес:
    Россия, Нижневартовск
    43 просмотра 0 ответов :( Неужели так сложно ?
     
  3. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    для этого надо очень захотеть, а ты не привёл даже пример того, что не получилось.
     
  4. alexei

    alexei Активный пользователь

    С нами с:
    25 июл 2006
    Сообщения:
    46
    Симпатии:
    0
    Адрес:
    Россия, Нижневартовск
    В общем немного получилось с либой от dklab, чуть позже выложу результат.
     
  5. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Я читал и знаю, как реализовать. Но тут дофига кода и у меня нет времени вставить в него AJAX, по-другому, как я понял, не получится, ибо каждую строчку объяснять не хочется.