好的。我是jEditable的新手。让我解释一下我在jEditable中遇到的问题。
我的数据库中有这个简单的表 -
id car make
1 panamera porsche
2 italia ferraris
3 avantador lamborghini
4 slk mercedes
我将在while循环中回显此表,下面是代码 -
<script type="text/javascript">
<?php
$query2 = "SELECT * FROM inplace LIMIT 0, 6";
$result2 = mysql_query($query2) or die ('Query couldn\'t be executed');
$row2 = mysql_fetch_assoc($result2);
?>
$(function() {
$(".items").editable("handler.php", {
submitdata : {userid: "<?php echo $row2['id']; ?>"},
indicator : "<img src='img/indicator.gif'>",
tooltip : "Doubleclick to edit...",
event : "click",
onblur : "submit",
name : 'newvalue',
id : 'elementid',
});
});
</script>
</head>
<body>
<ul>
<?php
$query = "SELECT * FROM inplace LIMIT 0, 6";
$result = mysql_query($query) or die ('Query couldn\'t be executed');
while ($row = mysql_fetch_assoc($result)) {
echo '<li class="items" id="car">'.$row['car'].'</li>';
echo '<li class="items" id="make">'.$row['make'].'</li>';
}
?>
</ul>
在上面的代码中,我在可编辑脚本中传递newvalue
(用户编辑)和elementid
(car或make)。我还需要一个标识符,以帮助识别要更新的正确数据库ID。所以我试图在submitdata : {userid: "<?php echo $row2['id']; ?>"}
中传递数据库ID。我不确定这种方法是否正确。
以下是“handler.php”文件中的更新查询 -
require("db.php");
function fail($msg) {
header('HTTP/1.0 404 Not Found');
die($msg);
}
$id = (int)@$_POST['userid'];
$field = @$_POST['elementid'];
$allowed_fields = array('car','make');
if (!in_array($field, $allowed_fields)) fail('Invalid or missing field.', 404);
$newvalue = $_POST['newvalue'];
$query = "UPDATE inplace SET `$field`='$newvalue' WHERE id=$id";
$result = mysql_query($query);
echo $newvalue;
所以这里的问题是,submitdata : {userid: "<?php echo $row2['id']; ?>"}
仅传递第一个ID。这意味着它只传递一个id。因此,即使您分别编辑属于ids 2和3的italia
或avantador
,它也会更新第一个ID。当我回显查询时,无论您编辑哪辆车,它总是显示为UPDATE inplace SETcar='volante' WHERE id=1
。当我在submitdata中直接写2或3或4时,它会正确更新。它传递的只有一个id。有人建议我使用像id="car-'.$row['id'].'"
然后爆炸它然后使用foo和东西。我试过用它但是没有为我工作。寻找解决方案。
答案 0 :(得分:1)
您可以在包含ID号的<li>
标记中创建自定义属性。然后在你的jQuery中,你只需抓住那个值。
<script type="text/javascript">
$(function() {
$("li.items").each(function(index) {
$(this).editable("handler.php", {
submitdata : {userid: $(this).attr('carid')},
indicator : "<img src='img/indicator.gif'>",
tooltip : "Doubleclick to edit...",
event : "click",
onblur : "submit",
name : 'newvalue',
id : 'elementid',
});
});
});
</script>
</head>
<body>
<ul>
<?php
$query = "SELECT * FROM inplace LIMIT 0, 6";
$result = mysql_query($query) or die ('Query couldn\'t be executed');
while ($row = mysql_fetch_assoc($result)) {
echo '<li class="items" carid="'.$row['id'].'" id="car">'.$row['car'].'</li>';
echo '<li class="items" carid="'.$row['id'].'" id="make">'.$row['make'].'</li>';
}
?>
</ul>
免责声明:我没有对此进行测试,我对jQuery语法并不是100%肯定。
[编辑] 我只是将其改为希望使用$(this)
选择器来引用每个特定的<li>
。
答案 1 :(得分:0)
您正在写出id
的PHP代码submitdata : {userid: "<?php echo $row2['id']; ?>"},
只能在服务器上运行,并且只运行一次,因此所有提交只会使用该值。
cillosis解决了你的问题。