1

好的。我是 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>

在上面的代码中,我在 jeditable 脚本中传递newvalue(用户编辑)和(汽车或制造)。elementid而且我还需要一个标识符来帮助识别要更新的正确数据库 ID。所以我试图将数据库 id 传递给submitdata : {userid: "<?php echo $row2['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。因此,即使您编辑italiaavantador分别属于 id 2 和 3,它也会更新第一个 id。当我回显查询时,无论您编辑哪辆车,它始终显示为UPDATE inplace SETcar='volante' WHERE id=1. 当我直接在提交数据中写入 2 或 3 或 4 时,它会正确更新。它只传递一个id。有人建议我使用 likeid="car-'.$row['id'].'"然后爆炸它,然后使用 foo 和其他东西。我尝试使用它,但对我没有用。寻找解决方案。

4

2 回答 2

1

您可以在<li>包含 ID 号的标签中创建自定义属性。然后在您的 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>

免责声明:我没有对此进行测试,也不能 100% 确定 jQuery 语法。

[编辑]我只是改变了它,希望使用$(this)选择器来引用每个特定的<li>.

于 2012-03-17T08:06:35.580 回答
0

写出 id 的 PHP 代码

submitdata : {userid: "<?php echo $row2['id']; ?>"},

只会在服务器上运行,并且只运行一次,所以所有提交都只会使用那个值。

纤毛虫病可以解决您的问题。

于 2012-03-17T08:24:54.537 回答