1

Jqueryを使用してMySQL行を更新する際に問題が発生しました。

これは私の現在のコードです。

<script type="text/javascript">
$(document).ready(function(){
$(".insert").click(function(){

var id=$("#id").val();
var ip=$("#ip").val();
var permissions=$("#permissions").val();
var password=$("#password").val();
var key=$("#key").val();

$.post('myscript.php?action=updateAPIuser', {id: id, ip: ip, permissions: permissions,     password: password, key:key },
function(data){
$("#message").html(data);
$("#message").hide();
$("#message").fadeIn(1500); 
});
return false;
});
});   
</script>

これはhtmlです:

<table width="100%" border="0" cellspacing="1" cellpadding="3">
<tr>
<th>Customer</th>
<th>Permission</th>
<th>IP</th>
<th>Key</th>
<th>Password</th>
<th>Date added</th>
<th>Action</th>
</tr>
<tr class="record" id="record-1"><td>John Doe</td>
<td><select id="permissions" name="permissions" />
<option value="ro" selected>Read Only</option>
<option value="rw">Read Write</option>
</select></td>
<td><input type="text" id="ip" name="ip" value="1.1.1.13">
<input type="hidden" id="id" name="id" value="1"></td>
<td><input type="text" id="key" name="key" value="mijnkey"></td>
<td><input type="text" id="password" name="password" value="password000"></td>
<td>2012-10-24 20:48:25</td><td><a class="insert" title="Update data" href="#"><img src="images/icons/save.png" title="Save" alt="Save"></a> 
</td></tr>

<tr class="record" id="record-2"><td>Jane Doe</td>
<td><select id="permissions" name="permissions" />
<option value="ro" selected>Read Only</option>
<option value="rw">Read Write</option>
</select></td>
<td><input type="text" id="ip" name="ip" value="2.2.1.13">
<input type="hidden" id="id" name="id" value="1"></td>
<td><input type="text" id="key" name="key" value="janeskey"></td>
<td><input type="text" id="password" name="password" value="pass000"></td>
<td>2012-10-24 20:48:25</td><td><a class="insert" title="Update data" href="#"><img src="images/icons/save.png" title="Save" alt="Save"></a> 
</td></tr>
</table>

そしてもちろん、MySQLの行を更新するためのphpがあります。

問題は次のとおりです。[保存](別名[更新])をクリックすると、Jqueryは常にID1の行を更新します。どの行をクリックしても。

だから私の質問は:正しい行が更新されるようにコードを変更するにはどうすればよいですか?

乾杯、ハブ

PSこれは行を更新するための私のPHPコードです:

function updateAPIuser($req){
global $db_whmcs, $_LANG;    

$id = $req['id'];
$ip = $req['ip'];
$permissions = $req['permissions'];
$password = $req['password'];
$key = $req['key'];
$updated = date("Y-m-d H:i:s");

header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); // always modified
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0"); // HTTP/1.1
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache"); // HTTP/1.0



  $query = "UPDATE `mod_powerdns_api` SET 
`ip` = '".$ip."',
`key` = '".$key."',
`permissions` = '".$permissions."',
`updated` = '".$updated."', 
`password` = '".$password."' 
WHERE `id` = ".$id;

mysql_query($quer) or pdns_die('Can not update user'.mysql_error());

} // 終わり

4

2 に答える 2

0

まず第一に、重複したIDを使用するべきではありません。

http://www.w3schools.com/tags/att_global_id.aspから

定義と使用法

id属性は、HTML要素の一意のIDを指定します(値はHTMLドキュメント内で一意である必要があります)。

次のコードを使用して、正しいIDを取得できます。

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

他の要素も同じ方法で見つけることができます:

$(".insert").bind('click', function(){
    var tr = $(this).parents('tr');

    var id = tr.find('[name="id"]').val();
    var ip = tr.find('[name="ip"]').val();
    var permissions = tr.find('[name="permissions"] option:selected').val();
    var password = tr.find('[name="password"]').val();
    var key = tr.find('[name="key"]').val();
});
于 2012-10-25T20:12:13.747 に答える
0

コードの問題は、HTMLのIDが重複していることが原因です。

このような場合、クラスを使用できます。id属性を完全に削除してみてください。

この方法を試してください。

$(".insert").click(function(clickmychick){

    var $tr = $(this).closest('tr') ;  // Cache the closest tr

    var id= $tr.find('[name="id"]')val();
    var ip= $tr.find('[name="ip"]')val();
    var permissions=$tr.find('[name="permissions"] option:selected').attr('value');
    var password= $tr.find('[name="password"]')val();
    var key= $tr.find('[name="key"]')val();
}
于 2012-10-25T20:22:00.663 に答える