2017-03-02 124 views
0

我想将表单中的每个数据发送到外部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; 
 
?>

谢谢你这么多的努力提供帮助!

+0

请求已发送?在调试控制台的网络选项卡中检查它 – bxN5

+0

检查lang ='+ lang + $(this).serialize()'的输出。你错过了一个'&'来加入这些值。 –

+0

@ bxN5是的,它是发送请求 – Daniel

回答

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

+0

这还不够。主要的问题在于数据,因为没有任何东西被分配给变量lang。 – Daniel

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); 
    } 
    }); 
});