![](/img/trans.png)
[英]X-editable: How to get id of each row so I can update individual members?
[英]Update 1 row at a time and each row has a different value when using x-editable for the same user
对于此示例,我有一个HTML表,其中包含2行(可能更多)。 中间列是可编辑的,HTML表中的每一行都是数据库中的不同列。 当我编辑第1行并刷新页面时,第2行现在与第1行具有相同的值。我不希望这样做。 每行的用户ID(pk)相同。 有关创建新记录的文档说,这可以与更新现有记录一起使用,但对我没有帮助。 我正在寻找尽可能多的帮助。
这是我桌子的图片:
如何获取每一行以保持其值而不更新其他所有行?
例如,如果我更新第1行中的列,则只希望更新第1行的列。
请帮忙!
这是我的代码:
HTML代码:
<td><a class="myeditable" data-name="fb_url" data-type="text" data-pk="<?php echo ($userid);?>" title="Edit"><?php echo ($result['fb_url']);?></a></td>
<td><a class="myeditable" data-name="tw_url" data-type="text" data-pk="<?php echo ($userid);?>" title="Edit"><?php echo ($result['tw_url']);?></a></td>
Post.php代码
require("config.php");
$pk = $_POST['pk'];
$name = $_POST['name'];
$value = $_POST['value'];
if(!empty($value)) {
try // save user selection to the database
{
$stmt = $db->prepare("UPDATE social_preferences SET fb_url = :fburl, tw_url = :twurl WHERE user_id = :userID AND ");
$stmt->bindParam(":userID", $pk, PDO::PARAM_INT);
$stmt->bindParam(':twurl', $value);
$stmt->bindParam(':fburl', $value);
$stmt->execute();
} catch(PDOException $e) { echo 'Connection failed: ' . $e->getMessage(); }
}else {
echo 'No value...';
}
JS代码:
$(document).ready(function() {
//toggle `popup` / `inline` mode
$.fn.editable.defaults.mode = 'inline';
$('.myeditable').editable({
url: 'post.php',
ajaxOptions: {
type: 'post',
},
success: function(data, config) {
if(data && data.id) {
//set pk
$(this).editable('option', 'pk', data.id);
}
}
});
});
当我在Chrome开发工具中检查“网络”标签时,看到以下内容:方法:POST状态:302临时移动
OP在谈论行,但实际上它是列。
$accepted_names = array('fb_url', 'tw_url');
if (in_array($_POST['name'], $accepted_names)) {
if(!empty($_POST['value'])) {
$value = $_POST['value'];
$id = $_POST['pk'];
try {
$stmt = $db->prepare('UPDATE social_preferences SET ' . $_POST['name'] . ' = :value
WHERE user_id = :id');
$stmt->bindParam(':id', $id, PDO::PARAM_INT);
$stmt->bindParam(':value',$value);
$stmt->execute();
}
catch (PDOExeption $e) {
echo json_encode(array('status' => 'failed', 'msg' => $e->getMessage()));
exit;
}
echo json_encode(array('id' => $id, 'status' => 'oké', 'msg' => $value));
}
else {
echo jsonencode(array('status' => 'failed', 'msg' => 'No value ....'));
}
}
else {
header($_SERVER['SERVER_PROTOCOL'] . ' 422 Unprocessable entity');
}
我假设您使用oracle SQL。
将要更新的所有用户放入一个数组中,并使用foreach对其进行迭代。
对每个执行更新语句。
我不知道是否可以在一个语句中运行多个更新,但是我不这样认为。
编辑:为确保仅影响一行,请尽可能使用唯一标识符,例如用户ID。
实际上,您只需要遵循此处X表的X表文档
好的,这是一个信息标签。 您可以在数据库中输入data-name =“您在数据库中的字段列” data-pk =“您的主键”,然后输入多个PK。
现在,请尝试以下示例。
HTML:
<td>
<a class="myeditable" data-name="fb_url" data-type="text" data-pk="<?php echo $userid;?>" data-url="post.php" title="Edit"><?php echo ($result['fb_url']);?></a>
</td>
JS代码:
<script>
$(document).ready(function() {
$('.myeditable').editable();
});
</script>
Post.php代码
if(!empty($_POST['name'])) {
$pk = $_POST['pk']; // post from data-pk
$name = $_POST['name']; // post from data-name
$value = $_POST['value']; // this is your value
$stmt=$db->prepare("UPDATE social_preferences SET $name= '".$value."' WHERE your_id= '".$pk."'");
$stmt->execute();
}else {
header($_SERVER['SERVER_PROTOCOL'] . ' 422 Unprocessable entity');
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.