За последние 24 часа нас посетили 17743 программиста и 1718 роботов. Сейчас ищет 981 программист ...

проверка на то, что студент уже голосовал

Тема в разделе "JavaScript и AJAX", создана пользователем 3ay4ka, 23 сен 2014.

  1. 3ay4ka

    3ay4ka Новичок

    С нами с:
    19 сен 2014
    Сообщения:
    27
    Симпатии:
    0
    Доброго дня!
    Суть в том, что мне задали написать курсовик и сделать онлайн голосование.
    Есть логин система, где студента берут из базы.. Кандидаты тоже храняться в базе..
    Я долго мучался как бы отправить голос в базу ии тут в интернете нашел способ с ajax

    На ксрине есть есть имя/фамилия/факультет ии лайки/дислайки

    По нажатию лайка/дислайка имя пропадает (благодаря ajax)

    Ноо если обновить страничку, то это имя опять высвечивается...
    Можно попросить дописать скрипт на проверку, что голосует всего один раз (или подсказать другую идею) как бы исправить эту ошибку..
    Сам от ajax понимаю только 1-2 % из всей системы...

    вот сам скрипт, который делает, чтоб имя исчезал
    Код (Text):
    1. <script type='text/javascript' src='jquery.pack.js'></script>
    2. <script type='text/javascript'>
    3. $(function(){
    4.     $("a.vote_up").click(function(){
    5.     //get the id
    6.     the_id = $(this).attr('id');
    7.    
    8.     // show the spinner
    9.     $(this).parent().html("<img src='images/spinner.gif'/>");
    10.    
    11.     //fadeout the vote-count
    12.     $("span#votes_count"+the_id).fadeOut("fast");
    13.    
    14.     //the main ajax request
    15.         $.ajax({
    16.             type: "POST",
    17.             data: "action=vote_up&id="+$(this).attr("id"),
    18.             url: "votes.php",
    19.             success: function(msg)
    20.             {
    21.                 $("span#votes_count"+the_id).html(msg);
    22.                 //fadein the vote count
    23.                 $("span#votes_count"+the_id).fadeIn();
    24.                 //remove the spinner
    25.                 $("span#vote_buttons"+the_id).remove();
    26.             }
    27.         });
    28.     });
    29.    
    30.     $("a.vote_down").click(function(){
    31.     //get the id
    32.     the_id = $(this).attr('id');
    33.      
    34.     // show the spinner
    35.     $(this).parent().html("<img src='images/spinner.gif'/>");
    36.    
    37.     //the main ajax request
    38.         $.ajax({
    39.             type: "POST",
    40.             data: "action=vote_down&id="+$(this).attr("id"),
    41.             url: "votes.php",
    42.             success: function(msg)
    43.             {
    44.                 $("span#votes_count"+the_id).fadeOut();
    45.                 $("span#votes_count"+the_id).html(msg);
    46.                 $("span#votes_count"+the_id).fadeIn();
    47.                 $("span#vote_buttons"+the_id).remove();
    48.             }
    49.         });
    50.     });
    51. });
    52. </script>

    вот вывод кандидатов из базы на php+mysql (вдруг пригодится)

    Код (Text):
    1. <table width="600" border="0">
    2.     <tr style="font-weight: bold; font-size: 20px;">
    3.         <!--<th>Name</th>
    4.         <th>Surname</th>
    5.         <th>Faculty</th>
    6.         <th>+ / -</th>-->
    7.     </tr>
    8.  
    9.  
    10. <?php
    11.      require("connectme.php");
    12. $q = "SELECT * FROM candidate";
    13. $r = mysql_query($q);
    14. if(mysql_num_rows($r)>0) //table is non-empty
    15. {
    16.     while ($row = mysql_fetch_array($r))
    17.     {
    18.         $id = $row['id'];
    19.         $candidate_name = $row['candidate_name'];
    20.         $candidate_surname = $row['candidate_surname'];
    21.         $candidate_faculty = $row['candidate_faculty'];
    22.         $net_vote = $row['votes_up'] - $row['votes_down'];
    23. ?>
    24.     <tr>
    25.         <th><span class="vote_buttons" id="vote_buttons<?php echo $row['id']; ?>"><?php echo $candidate_name; ?></span></th>
    26.         <th><span class="vote_buttons" id="vote_buttons<?php echo $row['id']; ?>"><?php echo $candidate_surname; ?></span></th>
    27.         <th><span class="vote_buttons" id="vote_buttons<?php echo $row['id']; ?>"><?php echo $candidate_faculty; ?></span></th>
    28.         <th>
    29.             <span class="vote_buttons" id="vote_buttons<?php echo $row['id']; ?>">
    30.                 <a href="javascript:;" class="vote_up" id="<?php echo $row['id']; ?>">
    31.                     <img src="images/Like.png">
    32.                 </a>
    33.                        
    34.                 <a href="javascript:;" class="vote_down" id="<?php echo $row['id']; ?>">
    35.                     <img src="images/Dislike.png">
    36.                 </a>
    37.             </span>
    38.         </th>
    39.     </tr>
    40.  
    41. <?php
    42.     }#hile
    43. }//if
    44. ?>
    45. </table>

    а вот сам votes.php, где берет инфу, считывает и записывает в базу


    Код (Text):
    1. <?php
    2. require ("connectme.php");
    3.  
    4.     function getAllVotes($id)
    5.     {
    6.         $votes = array();
    7.         $q = "SELECT * FROM candidate WHERE id = $id";
    8.         $r = mysql_query($q);
    9.         if(mysql_num_rows($r)==1)//id found in the table
    10.         {
    11.             $row = mysql_fetch_assoc($r);
    12.             $votes[0] = $row['votes_up'];
    13.             $votes[1] = $row['votes_down'];
    14.         }
    15.             return $votes;
    16.     }
    17.  
    18.     function getEffectiveVotes($id)
    19.     {
    20.         $votes = getAllVotes($id);
    21.         $effectiveVote = $votes[0] - $votes[1];
    22.         return $effectiveVote;
    23.     }
    24.  
    25. $id = $_POST['id'];
    26. $action = $_POST['action'];
    27.  
    28. $cur_votes = getAllVotes($id);
    29.  
    30. if($action=='vote_up')
    31. {
    32.     $votes_up = $cur_votes[0]+1;
    33.     $q = "UPDATE candidate SET votes_up = $votes_up WHERE id = $id";
    34.  
    35. }
    36. else if($action=='vote_down')
    37. {
    38.     $votes_down = $cur_votes[1]+1;
    39.     $q = "UPDATE candidate SET votes_down = $votes_down WHERE id = $id";
    40. }
    41.  
    42. $r = mysql_query($q);
    43.     if($r)
    44.     {
    45.         $effectiveVote = getEffectiveVotes($id);
    46.         echo $effectiveVote." votes";
    47.     }
    48.     elseif(!$r)
    49.     {
    50.         echo "Failed!";
    51.     }
    52. ?>
    вот скрин когда заходит и выводит всех кандидатов,

    [​IMG]

    и по нажатию лайка имя пропадает:

    [​IMG]

    надеюсь на вашу помощь, ибо реально, всю малину портит то, что после рефреша страницы именя появляются еще раз
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ну запоминай, делай выборку, кто кого лайкнул и т.п. А ты как хотел?
     
  3. 3ay4ka

    3ay4ka Новичок

    С нами с:
    19 сен 2014
    Сообщения:
    27
    Симпатии:
    0
    спасибо,
    проблему решил с помощью php

    а другое дело, возможно вывести определенное сообщение после того, как последнее имя из бд было записано (в моем случае после нажатия лайка оно пропало
    и появилось новое сообщение)?
     
  4. Хыиуду

    Хыиуду Активный пользователь

    С нами с:
    3 июн 2014
    Сообщения:
    618
    Симпатии:
    5
    Вешайте на кнопку обработчик на JS, который в определенный элемент на странице выведет ваше сообщение и еще что угодно.
     
  5. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    никому не говори как. делиться зазорно.