使用jQuery使用POST方法更新数据库

时间:2017-03-02 20:54:26

标签: php jquery

我想将表单中的每个数据发送到外部php文件并更新数据库值。似乎没有任何反应。控制台不显示任何错误。我已经搜索了回复,似乎没有任何对我有用。

$(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",
			      data: 'lang='+lang+'&'+$(this).serialize(),
        }).done(function(data){
          console.log(data);
        })
        .fail(function(error){
          console.log(error);
        });
;
    });
});
<form id="updatesettings" method="post">
		        <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>
		        <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>
		        <p><input type="submit" class="button" href="#" value="Save settings"></p>
		      </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"){
	$lang="en";
}
else {
	$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;
?>

非常感谢您提供帮助!

2 个答案:

答案 0 :(得分:0)

如果成功(完成)或错误(失败),您不会处理结果。尝试:

$.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

答案 1 :(得分:0)

您的代码中存在两个问题。首先,你建立的查询字符串是错误的。您需要在&值和序列化表单数据的其余部分之间添加lang。其次,DOM遍历以获取.dropdown-toggle文本是不正确的。 this会引用form元素,因此您需要使用find()来处理DOM,而不是parents()才能使用它。

还值得添加successerror处理程序,至少有助于调试。试试这个:

$('#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);
    }
  });
});