使用jQuery更新使用POST方法的数据库
问题描述:
我想将表单中的每个数据发送到外部php文件并更新数据库值。似乎没有任何反应。控制台不显示任何错误。我寻找答复,似乎没有任何工作适合我。使用jQuery更新使用POST方法的数据库
$(document).ready(function(){
$('#updatesettings').submit(function(e) {
e.preventDefault();
var lang = $(this).find('.dropdown-toggle').text();
console.log('lang=' + lang +'&'+ $(this).serialize());
$.ajax({
type: "POST",
url: "modules/game/updatesettings.php",
\t \t \t data: 'lang='+lang+'&'+$(this).serialize(),
}).done(function(data){
console.log(data);
})
.fail(function(error){
console.log(error);
});
;
});
});
<form id="updatesettings" method="post">
\t \t <p>
<label for="link">LINK</label>
<input type="text" name="link" class="textbox" id="link" value="<?php echo $tlink;?>" placeholder="LINK"> <?php if($tlink != "") echo'<i class="fa fa-check green"></i>'; else echo'<i class="fa fa-times red"></i>';?>
</p>
\t \t <p>
<label for="email">EMAIL</label>
<input type="text" name="email" class="textbox" id="email" value="<?php echo $email; ?>" placeholder="E-MAIL"><?php if($email != "") echo' <i class="fa fa-check green"></i>'; else echo' <i class="fa fa-times red"></i>';?>
</p>
<div class="btn-group">
<a class="btn dropdown-toggle btn-select" data-toggle="dropdown" href="#"><?php echo $langset; ?> <span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a href="#"><span class="flag flag-usa flag-1x"></span> English</a></li>
<li><a href="#"><span class="flag flag-rou flag-1x"></span> Romana</a></li>
</ul>
</div>
\t \t <p><input type="submit" class="button" href="#" value="Save settings"></p>
\t \t </form>
外部PHP文件,我尝试使用了更新的就是这个。
<?php
@include_once('modules/connections/dbconn.php');
$link = $_POST["link"];
$link = mysql_real_escape_string($link);
$email = $_POST["email"];
$email = mysql_real_escape_string($email);
$id = $_SESSION["id"];
$lang = $_POST["lang"]
if($lang=="English"){
\t $lang="en";
}
else {
\t $lang="ro";
}
mysqli_query($GLOBALS['connect'],"UPDATE users SET `link`='$link' WHERE `id`='$id'");
mysqli_query($GLOBALS['connect'],"UPDATE users SET `email`='$email' WHERE `id`='$id'");
mysqli_query($GLOBALS['connect'],"UPDATE users SET `lang`='$lang' WHERE `id`='$id'");
exit;
?>
谢谢你这么多的努力提供帮助!
答
如果成功(完成)或错误(失败),则不处理结果。尝试:
$.ajax({
type: "POST",
url: "updatesettings.php",
data: 'lang='+lang+'&'+$(this).serialize(),
})
.done(function(data){
console.log(data);
})
.fail(function(error){
console.log(error);
});
()完成时,你的要求是正确的被调用,失败()在一些错误的情况下。
提示:按f12并转至网络选项卡检查您的请求。
检查this pen
+0
这还不够。主要的问题在于数据,因为没有任何东西被分配给变量lang。 – Daniel
答
有没有在你的代码的两个问题。首先,你正在构建的查询字符串格式不正确。您需要在lang
值与序列化表单数据的其余部分之间添加&
。其次,DOM遍历得到.dropdown-toggle
文本是不正确的。 this
将引用form
元素,因此您需要使用find()
来减少DOM,而不是parents()
。
它也值得添加一个success
和error
处理程序,至少有助于调试。试试这个:
$('#updatesettings').submit(function(e) {
e.preventDefault();
var lang = $(this).find('.btn-group .dropdown-toggle').text();
$.ajax({
type: "POST",
url: "updatesettings.php",
data: 'lang=' + lang + '&' + $(this).serialize(),
success: function() {
console.log('it worked!');
},
error: function(x, s, e) {
console.log('it failed');
console.log(x, s, e);
}
});
});
请求已发送?在调试控制台的网络选项卡中检查它 – bxN5
检查lang ='+ lang + $(this).serialize()'的输出。你错过了一个'&'来加入这些值。 –
@ bxN5是的,它是发送请求 – Daniel