2017-03-02 46 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); 
    } 
    }); 
});