您好我有两个应该互相连接的文件。我想向另一个使用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查询应该可以工作,但它不发送表单信息。有什么东西需要重写或修复才能使它工作吗?
答案 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,如果那是你的错误发生的地方。