javascript - 如何解决ajax从php获取数据时只取第一行数据的问题?

标签 javascript php jquery mysql ajax

当我尝试使用 ajax 单击将数据更新到数据库中而不刷新页面时,我的 ajax 代码出现问题。我试图让用户单击从数据库中获取的每个数据中的按钮。但问题是,每次我点击每个数据时,它只获取第一行数据。你能帮我看看我的代码有什么问题吗? 这里是 Ajax

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script>        
  $(function () {

    $('.vote').on('submit', function (e) {
    var vote =  $(this).attr("data-id");
      e.preventDefault();

      $.ajax({
        type: 'post',
        url: 'file-includes/social-interaction/vote_action.php',
        data: {vote : vote},
        success: function (data) {
            alertify.log(data, "", 0);
            return false;
        }
      });

    });

  });

</script>

这里是 PHP

    <?php   
    session_start();
    error_reporting(0);
    require '../../core/database/connect.php';
    require '../../core/functions/general.php';
    require '../../core/functions/users.php';
    //mysql_query("SET NAMES utf8");
    $current_file = explode('/', $_SERVER['SCRIPT_NAME']);
    $current_file = end($current_file);
    if (logged_in() == true) {
        $session_user_id = $_SESSION['user_id'];
        $user_data = user_data($session_user_id, 'user_id', 'username', 'password', 'first_name', 'last_name', 'email', 'password_recover','type','allow_email', 'profile', 'quote','dob','status','current_occupation','location','skill','about_user','joined_date','phone','ban','fbpname','fbpurl','fb','fbn','website','whatsapp','profile_view');
        $user_id = $user_data['user_id'];
        if (user_active($user_data['username']) == false) {
            session_destroy();
            header('Location: index');
            exit();
        }
        if ($current_file !== 'change_password.php' && $current_file !=='logout.php' && $user_data['password_recover'] == 1) {
            header('Location: change_password?force');
            exit();
        }
    }
    $errors = array();
?>
<?php
protect_page();
if($_POST){
    $question_id = $_POST['question_id'];
    $answer_id = $_POST['answer_id']; 
    $rate = $_POST['score_input'];
    $user_id = $user_data['user_id'];
    $sql = "SELECT * FROM vote_action WHERE answer_id = ".$answer_id." AND user_id=".$user_id."";
    $result = mysql_query($sql);
    if(mysql_num_rows($result)!=0)
       {
           echo 'You\'ve already voted for this answer';
        //mysql_query("DELETE FROM `vote_action` WHERE `answer_id` = '$answer_id' AND `user_id` = '$user_id'");
       }else{
        mysql_query("INSERT INTO `vote_action` (`vote_id`, `question_id`, `user_id`, `rate_score`, `answer_id`) VALUES (NULL, '$question_id', '$user_id', '$rate', '$answer_id');");
         echo 'You\'ve voted for this answer the answer and give the user '.$rate.' Score(s)';
        }
}
?>

html 文件在这里

<form class="vote" data-id="<?php echo 'vote-'.$answer_id?>">
            <input type="hidden" data-id="<?php echo 'vote-'.$answer_id?>" value="<?php echo $question_id_get;?>" name="question_id_asnwer" class="vote">
            <input type="hidden" data-id="<?php echo 'vote-'.$answer_id?>" value="<?php echo $answer_id;?>" name="answer_id" class="vote">
            <!-- Small button group -->
<select id="first-disabled" name="score_input" data-id="<?php echo 'vote-'.$answer_id?>" class="selectpicker vote" data-hide-disabled="true" data-live-search="true" data-width="55%">
    <optgroup disabled="disabled" label="disabled">
      <option>Hidden</option>
    </optgroup>
    <optgroup label="SCORE">
      <option data-icon="glyphicon-heart">1</option>
      <option data-icon="glyphicon-heart">2</option>
      <option data-icon="glyphicon-heart">3</option>
      <option data-icon="glyphicon-heart">4</option>
      <option data-icon="glyphicon-heart">5</option>
    </optgroup>
</select>
            <button type="submit" name="vote" class="btn-text" data-vote="<?php echo $answer_id; ?>"><i class="glyphicon glyphicon-menu-up"></i></button> <span>25 </span>
            </form>

最佳答案

这就是出错的原因。我刚刚找到了。如果有人遇到同样的问题,你可以看到这个。谢谢... 这是我的新 ajax 代码

<script type="text/javascript">
      $(function () {
        $('.form').on('submit', function (e) {

          e.preventDefault();
          var form_data = $(this).closest(".form").serialize();
          //alert(form_data); //I used this to see how my ajax get data from form but I don't want it to be show to user so I commented it out
          $.ajax({
           type: 'GET',
           url: 'file-includes/social-interaction/vote_action.php',
           data: form_data,
           success: function (data) {
            console.log(data)
                alertify.log(data, "", 0);
            }
         });

        });
//event.preventDefault();
     });
</script>

这是我用于发布数据的新工作 php

<?php
protect_page();
if($_GET){
    $question_id = $_GET['question_id'];
    $answer_id = $_GET['answer_id']; 
    $rate = $_GET['score_input'];
    $user_id = $user_data['user_id'];
    $sql = "SELECT * FROM vote_action WHERE answer_id = '".$answer_id."' AND user_id='".$user_id."'";
    $result = mysql_query($sql);
    if(mysql_num_rows($result)!=0)
       {
           echo 'You\'ve already voted for this answer';
        //mysql_query("DELETE FROM `vote_action` WHERE `answer_id` = '$answer_id' AND `user_id` = '$user_id'");
       }else{
        mysql_query("INSERT INTO `vote_action` (`vote_id`, `question_id`, `answer_id`, `user_id`, `rate_score`) VALUES (NULL, '$question_id', '$answer_id', '$user_id', '$rate')");
         echo 'You\'ve voted for this answer the answer and give the user '.$rate.' Score(s)';
        }
}
?>

最后这是我的工作形式:

<form action="" class="form">
    <input type="hidden" name="question_id" value="<?php echo $question_id;?>" />
    <input type="hidden" name="answer_id" value="<?php echo $answer_id;?>" />
    <select id="first-disabled" name="score_input" class="selectpicker" data-hide-disabled="true" data-live-search="true" data-width="width:10%;">
    <optgroup disabled="disabled" label="disabled">
      <option>Give Score</option>
    </optgroup>
    <optgroup label="Useless Answer">
      <option>0</option>
      <option>1</option>
      <option>2</option>
      <option>3</option>
    </optgroup>
    <optgroup label="Good Answer">
      <option>4</option>
      <option>5</option>
      <option>6</option>
    </optgroup>
    <optgroup label="Helpful Answer">
      <option>7</option>
      <option>8</option>
      <option>9</option>
      <option>10</option>
    </optgroup>
  </select>
  <input class="submit" type="submit" name="submit" value="submit" class="glyphicon glyphicon-ok icon-color-blue">
</form>

关于javascript - 如何解决ajax从php获取数据时只取第一行数据的问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47107295/

相关文章:

2 个表之间的 PHP/MySQL 关系

javascript - ‘this’ vs. 'bind.(this)' vs. 将事件传递给事件处理程序,React JS vs. vanilla JavaScript

javascript - MVC bundle 加载失败

PHP语法问题

php - 如何在 mysqli 查询中使用 $_POST 变量? (php)

jQuery隐藏元素,同时在页面布局中保留其空间

javascript - 如何解析多层对象的键中包含点 (.) 的对象?

javascript - 使用 toastr 获取 'Cannot read property ' 然后“未定义”

jquery - 使浏览器窗口非常短时使标题全宽

javascript - 无休止的页面一遍又一遍地加载相同的记录