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(ユーザーが編集) と(car または make) を渡しています。elementidまた、更新する正しいデータベース ID を識別するのに役立つ識別子がもう 1 つ必要です。だから私はデータベース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']; ?>"}が 1 番目の ID のみを渡していることです。これは、1 つの ID のみを渡すことを意味します。italiaそのため、id 2 と 3 にそれぞれ属するorを編集しても、avantador最初の id が更新されます。クエリをエコーすると、どの車を編集しても、常に次のように表示されUPDATE inplace SETcar='volante' WHERE id=1ます。submitdata に 2 or 3 or 4 を直接書くと正しく更新されます。1 つの ID のみを渡します。id="car-'.$row['id'].'"誰かが私に like を使ってから爆発させてから 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>

免責事項: 私はこれをテストしておらず、jQuery 構文について 100% 確信が持てません。

[編集]うまくいけば$(this)、セレクターを使用してそれぞれの特定の を参照するように変更しました<li>

于 2012-03-17T08:06:35.580 に答える
0

ID を書き出す PHP コード

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

サーバー上でのみ実行され、一度だけ実行されるため、すべての送信でその 1 つの値のみが使用されます。

肝硬変には、あなたの問題に対する 1 つの解決策があります。

于 2012-03-17T08:24:54.537 に答える