我有一个动态表,列出了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>
如果数据库中有一些数据,我将拥有Items,Category和Name的列表以及带有Delete选项的额外列,否则,它将返回Items Not Found! 我想单击Delete链接并将变量$ item_num和$ item_category referent传递给实际行到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函数的最佳方法,我会非常感谢能帮助我完成此任务的任何帮助。
由于
答案 0 :(得分:1)
您应该将$ item_num和$ item_category添加到tr元素的属性中。
例如:
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 make事件中:
$('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注入。
答案 1 :(得分:0)
给你的tr或td ids(或类名,如果那样更好)。
$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'
});
});
答案 2 :(得分: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;
}
并在调用delete时使用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();
}
});
}