2017-03-02 10 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

あなたのコード内の2つの問題があります。まず、あなたが作成しているクエリ文字列が不正です。 langの値と残りのシリアライズされたフォームデータの間に&を追加する必要があります。第二に、.dropdown-toggleテキストを取得するためのDOMトラバーサルが正しくありません。 thisform要素を参照するので、find()を使用してDOMを処理する必要があります。parents()ではなく、DOMを処理する必要があります。

少なくともデバッグを助けるために、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); 
    } 
    }); 
}); 
関連する問題