使用AJAX将表单值提交到数据库

时间:2016-01-02 19:40:26

标签: php jquery mysql ajax forms

我有这份调查问卷,我正在研究用户获得四种答案的答案。每个答案都分配了一个单选按钮,单选按钮具有数据库表中的值(1-10)。这样,不同的替代品具有不同的值。用户还可以在问题之间来回切换。

在完成八个问题之后,考生将看到一个按钮,它取代了下一个和后一个按钮。当用户单击它时,它应该提交一个AJAX请求并将表单值发送到数据库。

我遇到的问题是单击按钮时表单值没有发送到我的数据库。我已经测试过,表单显示答案,单选按钮有值,所以问题在于SubmitAjax按钮没有发送值。

为什么不起作用?

表格问题:包含答案替代方案和分数值

qid(int), answer(varchar), point(int)

表结果:应使用AJAX函数发送的值

qid(int), point(int)

PHP / AJAX

<html>
    <head>
        <meta charset="utf-8">

<script src="https://code.jquery.com/jquery-1.11.3.js"></script> 
  <script type="text/javascript">
function goBack() {
    window.history.go(-1);
}


$("#submitAjax").click(function(){
        if($('.radiobtn').is(':checked')) { 
            var radiobtn = $('.radiobtn:checked').val();
            var qid = $('#qid').val();            

            $.ajax(
            {
                type: "GET",
                url: 'login.php',
                dataType: "json",
                data: "radiobtn="+radiobtn+"&qid="+qid,
                success: function (response) {
                    if(response.status == true){
                        alert('points added');
                    }
                    else{
                        alert('points not added');   
                    }
                }
            });

            return false;
        }
    });


</script>
    </head>
    <body>
<?php

$localhost = "localhost";
$username = "root";
$password = "";
$connect = mysqli_connect($localhost, $username, $password) or die ("Kunde inte koppla");
mysqli_select_db($connect, 'wildfire');

if(count($_GET) > 0){
   $answerPoint = intval($_GET['radiobtn']);
   $qid = intval($_GET['qid']);

   $sql2 = "INSERT INTO result (qid, points) VALUES ($answerPoint, $qid)";
   $connect->query($sql2); 
   $lastid = $connect->insert_id;
   if($lastid>0)
    echo json_encode(array('status'=>1));
   else
    echo json_encode(array('status'=>0));
}

$qid = 1;
if(count($_POST) > 0){
    $qid = intval($_POST['qid'])+1;

}


?>



<form method="post" action="">
<input type="hidden" name="qid" id="qid" value="<?=$qid?>">
<?php
$sql1 = mysqli_query($connect,"SELECT * FROM question where answer != '' && qid =".intval($qid));
while($row1=mysqli_fetch_assoc($sql1)){
?>
<input type='radio' name='answer1' class="radiobtn" value="<?php echo $row1['Point'];?>">
<?php echo $row1['answer'];?><br>
<?php
}
?>
<?php if ($qid <= 8) {  ?>
<button type="button" onclick="history.back();">Tillbaka</button>
<button type="submit">Nästa</button>
<?php } else { ?>
<button id="submitAjax" type="submit">Avsluta provet</button>
     <?php } ?>  
</form>



<?php
if(count($_GET) > 0){
   $answerPoint = intval($_GET['radiobtn']);
   $qid = intval($_GET['qid']);

   $sql2 = "INSERT INTO result (points,qid) VALUES ($answerPoint, $qid)";
   $connect->query($sql2); 
   $lastid = $connect->insert_id;
   if($lastid>0)
    echo json_encode(array('status'=>1));
   else
    echo json_encode(array('status'=>0));
}

?>

    </body>


</html>

1 个答案:

答案 0 :(得分:1)

$("#submitAjax").click(function(){

该行将逻辑绑定到标题中的按钮。但是,它不在$(document).ready(function(){...})中;或$(function(){...});

这意味着它将在页面的其余部分加载到DOM之前执行,在这种情况下,它将找不到您要绑定的按钮,并且什么都不做。

你应该把你的逻辑包含在准备好的文档中,或者把它放在你身体的尽头,这样你的元素就会在你试图查找它们时存在。