2016-08-25 21 views
0

Ajaxを使用してidでデータベースの行を更新する必要があります。フォームからAjax経由でデータを送信

マイフォーム:

<form id="update_ajax"> 
    <input type="text" name="name" class="test_hide"> 
    <input type="hidden" name="id" value="<?php echo $row['id']; ?>"> 
    <input type="submit" value="<?php echo $row['id']; ?>" class="pure-button"> 
</form> 

私のAjax機能:

$("#update_ajax").on("submit", function() { 
     var id = $(this).attr('id'); 
     var name = $(this).attr('name'); 
     var dataall={'id' : id, 'name' : name}; 
     $.ajax({ 
      type: "post", 
      url: "update.php", 
      data: dataall, 
      success: function (data) { 
       alert(data); 
      } 
     }); 
    }); 

そして、私のPHPファイルは次のとおりです。

if ((isset($_GET['id'])) && (isset($_GET['name']))) { 
    $id = $_GET['id']; 
    $name = $_GET['name']; 
}else{ 
    die("Not set"); 
} 
$pdo = new PDO("mysql:host=localhost;dbname=test", "root", "8169x5it"); 
$query = $pdo->prepare("UPDATE test SET name=:name WHERE id=:id"); 
$query->bindParam(':name', $name); 
$query->bindParam(':id', $id); 
$query->execute(); 

そして、 name値が$_GET['name']に設定されていないというエラーがあります。なぜそれが設定されていないのか理解できません。私はそれをデータで送るからです。あなたが持っているもの

+2

'var id = $(これ).attr( 'id');'それは正しくありません[docs]を参照してください(http://api.jquery.com/val/) – NDM

+1

'$(this).attr( 'name') 'は' name'属性を持たないため、未定義です。 '$(" input [name = name] ")。val()'が必要です。 – Barmar

答えて

2

これは間違っている:

var id = $(this).attr('id'); 
var name = $(this).attr('name'); 

$(this)はフォームなので、$(this).attr('id')は隠し入力の値は、"update_ajax"ではありません。フォームにname=something属性がないため、$(this).attr('name')は未定義です。何が本当に欲しい:

var id = $(this).find("input[name=id]").val(); 
var name = $(this).find("input[name=name]").val(); 

しかし、あなたがそれをすべてを簡素化することができます:

var dataall = $(this).serialize(); 

serialize()、フォーム内のすべての入力を見つけて、すべてのそれらの値を含む、URLエンコードされた文字列を返します。

最後に、type: 'GET'を使用するようにjQueryを変更するか、$_GETの代わりに$_POSTを使用するようにPHPを変更する必要があります。

+1

ありがとう!今分かります。 – Denys

+0

なぜ更新を押すと、ページを再読み込みせずに1回更新され、再読み込みせずに2回目に更新されますか?そして、私はデータを更新するためにF5を押す必要があります。 – Denys

+0

時にはうまく動作しない場合があります。それは何だろう? – Denys

0

、あなたがhttp://api.jquery.com/val/

を望んでいた何http://api.jquery.com/attr/

は、ソース内の他のエラーのように見えていないショットは、それが動作する必要があることを与えます。私たちに知らせていない場合。

はEDIT:

$(this).attr('id'); 
$(this).attr('name'); 

$("input[name=id]").val(); 
$("input[name=name]").val(); 

それとも

$(this).serialize(); 

後で https://api.jquery.com/serialize/を参照してください。また、

あなたが変更します

+2

彼はセレクタも変更する必要があります。 – Barmar

関連する問題