0

次のように、MySQL テーブルからいくつかの項目をリストする動的テーブルがあります。

   <?php
   $output='';
   $sql1=mysql_query("SELECT * FROM table1 ORDER BY item")or die(mysql_error());
   $sql1n=mysql_num_rows($sql1);
   if($sql1n>=1){
      while($row=mysql_fetch_array($sql1)){
          $item_num=$row['item_num'];
          $item_category=$row['item_category'];
          $item_name=$row['item_name'];

          output .='<tr>';
          output .='<td>'.$item_num.'</td>';
          output .='<td>'.$item_category.'</td>';
          output .='<td>'.$item_name.'</td>';
          output .='<td><a href="#">Delete</a></td>';
          output .='</tr>';
    }else{
          output .='Items not found!";
    }
    ?>

今、私は自分のHTMLページを持っています

    <body>
          <table width="100%"  id="panel" border="0" cellspacing="0" cellpadding="3" class="table2">
         <tr>
            <td>Item #</td>
            <td>Category</td>
            <td>Name</td>
         </tr>
         <?php echo $output; ?>
         </table>
    </body>

データベース内にデータがある場合は、アイテム、カテゴリ、名前のリストと、[削除] オプションを含む追加の列が表示されます。それ以外の場合は、アイテムが見つかりません! [削除] リンクをクリックし、実際の行を参照する変数 $item_num と $item_category を jquery 関数に渡します。この関数は、実際のファイルを更新せずに、次の PHP ファイルに送信し、アイテムがが正常に削除されました。

削除-Item.php

<?php
    include ('dataconfig.php');

    if((isset($_POST['item_num']))and(isset($_POST['item_category']))){
      $item_num=$_POST['item_num'];
      $item_category=$_POST['item_category'];
      $sql_delete=mysql_query("DELETE FROM table1 WHERE item_num='$item_num' AND item_category='$item_category'")or die(mysql_error());
    }
?>

それを行うための jQuery 関数を構築する最善の方法がわかりません。このタスクを完了するための助けをいただければ幸いです。

ありがとう

4

3 に答える 3

1

tr 要素の属性に $item_num と $item_category を追加する必要があります。

例えば:

output .='<tr id="'.$item_num.'" category="'.$item_category.'">';
output .='<td>'.$item_num.'</td>';
output .='<td>'.$item_category.'</td>';
output .='<td>'.$item_name.'</td>';
output .='<td><a href="#">Delete</a></td>';
output .='</tr>';

jQueryでは、行のクリック時にイベントを作成します:

$('table tr[id]').click(function(){
    var obj = $(this);
    $.ajax({
      type: "POST",
      url: 'url/to/Delete-item.php',
      data: { item_num: obj.attr("id"), item_category: obj.attr("category") },
      dataType: "json",
      success: function(data) {
          if (data.success == "true") {
              alert('Item was deleted');
          } else {
              alert('error');
          }
      }
  });
})

Delete-item.php を変更します

if((isset($_POST['item_num']))and(isset($_POST['item_category']))){
    $item_num=$_POST['item_num'];
    $item_category=$_POST['item_category'];
    $sql_delete=mysql_query("DELETE FROM table1 WHERE item_num='$item_num' AND item_category='$item_category'")or die(mysql_error());
    $success = ($sql_delete) ? "true" : "false";
    $successArray = array("success" => $success);
    echo json_encode($successArray);
}

私はそれをテストしませんでした。

$item_num では intval を使用し、$item_category では mysql_real_escape_string を使用して SQL インジェクションを防止することを忘れないでください。

于 2012-11-22T23:17:47.703 に答える
0

ID をテーブルに追加します。つまり、次のようにします。

output .='<tr id="'.$item_num.'">';

あなたが削除を行うバックエンド(delete_item.php)で、削除が成功したことを確認するためにいくつかの出力を追加します。

$sql_delete=mysql_query("DELETE FROM table1 WHERE item_num='$item_num' AND item_category='$item_category'")or die("0");
if ($sql_delete) {
   print $item_num;
}

削除を呼び出すときは、jQuery ライブラリを使用します。

function delete_item(item_id, cat_id) {
  $.post('delete-item.php', { 
    // POST parameters
    item_num: item_id, 
    item_category: cat_id 
  }, function(data) {
     // if returned data is the deleted item id then.. 
     if (data==item_id) {
        // .. remove the row from the table.
        $("#" + item_id).remove();
     }
  });
}
于 2012-11-22T23:19:24.583 に答える
0

tr または td の ID (またはクラス名の方がよい場合) を指定します。

$output .= "<tr id='row_{$item_num}'>";
$output .= "<td class='item_category'>{$item_category}</td>";
...
$output .= "<td><a href='#' class='delete' rel='{$item_num}'>Delete</a></td>";
...

この値を次のように取得します: (注: .siblings() または .parent() を使用して行と item_cat td を取得することもできます。どちらの方法でも...

$('a.delete').live('click', function(e) {
  e.preventDefault();
  var item_num = $(this).attr('rel');
  var this_row = $('tr#row_'+item_num);
  //Now you have the parent row. You can do anything you want with it. If you just want to get the value of the corresponding item_cat, you could then do
  var item_cat = $(this_row).children('td.item-category').text();
  $.post('/your_url', { item_number: item_num, item_category: item_cat }, function(data) {
      //deal with the return result of 'data'
  });
});
于 2012-11-22T23:12:24.640 に答える