使用AJAX使用按钮将表单信息发送到另一个页面

时间:2016-01-05 16:02:04

标签: javascript php jquery mysql ajax

您好我有两个应该互相连接的文件。我想向另一个使用sql查询发送表单信息的页面发送一个AJAX请求。

我尝试创建的应用程序是一个包含八个问题的问卷,每个问题有四个答案与相同的id(qid)配对,每个答案都有一个来自数据库的值。在回答了八个问题后,您将看到一个向页面test.php发送AJAX请求的按钮(名为submitAJAX)。

问题是虽然我与AJAX的连接正常,但表单中的值不会发送到我的数据库。以前我认为问题可能在于表单页面,但现在我认为问题出在这个文件中:

test.php(带json的文件)

<?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']);
$tid = intval($_GET['tid']);
   $sql2 = "INSERT INTO result (qid, points, tid) VALUES ($qid, $answerPoint, $tid)";
   $connect->query($sql2); 
   $lastid = $connect->insert_id;
   if($lastid>0) {
    echo json_encode(array('status'=>1));
}
   else{
    echo json_encode(array('status'=>0));
} 
}
?>

我认为问题可能出在以下行:if($lastid>0) { $ lastid应该总是大于0,但每当我检查test.php时,我会收到以下消息:{"status":0}我的目的是获得此消息:{"status":1}

<html>
    <head>
        <meta charset="utf-8">
    </head>
    <body>
<?php
$localhost = "localhost";
$username = "root";
$password = "";
$connect = mysqli_connect($localhost, $username, $password) or die ("Kunde inte koppla");
mysqli_select_db($connect, 'wildfire');

$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'];?>">
<input type='hidden' name='tid' class="tid" value="<?php echo $row1['tid'];?>">
<?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>

<script src="https://code.jquery.com/jquery-1.11.3.js"></script> 
  <script type="text/javascript">
function goBack() {
    window.history.go(-1);
}
$(document).ready(function(){ 
$("#submitAjax").click(function(){
        if($('.radiobtn').is(':checked')) { 
            var radiobtn = $('.radiobtn:checked').val();
            var qid = $('#qid').val();            
             var answer = $('input[name=answer1]:radio').val();
            $.ajax(
            {
                type: "GET",
                url: 'test.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>

    </body>

我想从test.php发送到我的数据库的值是:

qid(int),tid(int),Point(int)

有一个数据库连接,我的test.php文件的sql查询应该可以工作,但它不发送表单信息。有什么东西需要重写或修复才能使它工作吗?

3 个答案:

答案 0 :(得分:2)

首先,AJAX调用中的数据参数未使用正确的语法。你错过了括号。它应该看起来像:

data: JSON.stringify({ radiobtn: radiobtn, qid: qid }),

第二次,我建议使用POST代替GET:

type: "POST",

这意味着您需要在test.php上的$ _POST [&#39; radiobtn&#39;]和$ _POST [&#39; qid&#39;]中查找您的数据。注意:在将值赋给变量之前,您应该使用isset()检查您期望的密钥,如下所示:

$myBtn = isset($_POST['radiobtn']) ? $_POST['radiobtn'] : null;

第三次,为了进行测试,请在条件中使用console.log(),检查要检查的复选框,以验证条件是否按预期工作。

if($('.radiobtn').is(':checked')) {
    console.log('here');

<强>更新

第四:您应该在AJAX调用中指定内容类型,如下所示:

contentType: "application/json; charset=utf-8",

答案 1 :(得分:1)

  

mysqli_insert_id() 返回查询生成的ID,其中包含具有AUTO_INCREMENT属性的列。

在您的SQL中,您自己提供ID,没有自动增量。因此,您应该从$connect->insert_id获得 0 ,因为如果连接上没有先前的查询或者查询未更新AUTO_INCREMENT值,则函数返回零

出于您的目的,您可以使用return的{​​{1}}值,其中TRUE表示成功,FALSE表示失败。

if($connect->query($sql2)) {
   echo json_encode(array('status'=>1));
}
else{
   echo json_encode(array('status'=>0));
} 

答案 2 :(得分:1)

执行插入结果的查询后,可以使用sql语句选择最后一个插入ID。尝试像

这样的东西
$sql2 = "INSERT INTO result (qid, points, tid) VALUES ($qid, $answerPoint,         $tid)";
$connect->query($sql2); 
$result = $connect->query("SELECT LAST_INSERT_ID()");
$row = $result->fetch_row();
$lastid = $row[0];

那应该返回正确的最后一个插入ID,如果那是你的错误发生的地方。