jQuery&;PHP-删除现有视图中的记录时,使用下一个记录自动更新当前表视图
平台:jQuery&;PHP-删除现有视图中的记录时,使用下一个记录自动更新当前表视图,php,jquery,mysql,delete-row,Php,Jquery,Mysql,Delete Row,平台: <?php $from = 0; $limit = 30; $result = mysql_query( "SELECT * FROM mytable ORDER BY m_id ASC LIMIT $from, $limit" ); ?> <table> <tr> <td>ID</td> <td>Content</td> </tr> &l
<?php
$from = 0;
$limit = 30;
$result = mysql_query( "SELECT * FROM mytable ORDER BY m_id ASC LIMIT $from, $limit" );
?>
<table>
<tr>
<td>ID</td>
<td>Content</td>
</tr>
<?php
while( $rows = mysql_fetch_array($result) )
{
?>
<tr id=<?php echo $rows['m_id']; ?>>
<td><?php echo $rows['m_id']; ?></td>
<td><?php echo $rows['content']; ?></td>
</tr>
<?php
}
?>
</table>
PHP、mySQL和jQuery
我所拥有的:
<?php
$from = 0;
$limit = 30;
$result = mysql_query( "SELECT * FROM mytable ORDER BY m_id ASC LIMIT $from, $limit" );
?>
<table>
<tr>
<td>ID</td>
<td>Content</td>
</tr>
<?php
while( $rows = mysql_fetch_array($result) )
{
?>
<tr id=<?php echo $rows['m_id']; ?>>
<td><?php echo $rows['m_id']; ?></td>
<td><?php echo $rows['content']; ?></td>
</tr>
<?php
}
?>
</table>
我有一个数据库表。在我的应用程序中,我能够获取所有行。当我查询数据库时,我已将记录获取限制设置为30,但这可以通过下拉列表更改。因此,考虑到我在一个查询中获取了30行数据并显示它们。我正在表格(行)中填充此数据。我在每条记录旁边都有一个复选框和一个删除按钮。单击“删除”按钮时,将删除选中的所有行
我想做什么:
<?php
$from = 0;
$limit = 30;
$result = mysql_query( "SELECT * FROM mytable ORDER BY m_id ASC LIMIT $from, $limit" );
?>
<table>
<tr>
<td>ID</td>
<td>Content</td>
</tr>
<?php
while( $rows = mysql_fetch_array($result) )
{
?>
<tr id=<?php echo $rows['m_id']; ?>>
<td><?php echo $rows['m_id']; ?></td>
<td><?php echo $rows['content']; ?></td>
</tr>
<?php
}
?>
</table>
对于我删除的每一行,我都会尝试用下一组行更新当前视图,直到达到fetch row限制。令人困惑下面是一个例子:
示例:
<?php
$from = 0;
$limit = 30;
$result = mysql_query( "SELECT * FROM mytable ORDER BY m_id ASC LIMIT $from, $limit" );
?>
<table>
<tr>
<td>ID</td>
<td>Content</td>
</tr>
<?php
while( $rows = mysql_fetch_array($result) )
{
?>
<tr id=<?php echo $rows['m_id']; ?>>
<td><?php echo $rows['m_id']; ?></td>
<td><?php echo $rows['content']; ?></td>
</tr>
<?php
}
?>
</table>
假设我的表中有1000行&我已将记录获取限制设置为30,这意味着一次最多将显示30条记录。我可以使用分页导航到其他记录。现在在我看来,表中有30行数据。我选择了5行并通过jQuery删除了它们。删除后,我可以从视图中删除删除的行。所以在本例中,由于我删除了5行,所以我可以删除它们,现在我的视图只显示了25行(这是正确的)。因为我的表中还有995行,而且我的记录获取限制为30,所以现在我希望它能够自动显示接下来的5条记录。我希望现有条目向上移动,并在底部填充新条目
换句话说,只要有足够的行存在,我就希望用相同数量的记录填充视图,因为许多记录已被删除。因此,如果我删除10条记录,我希望接下来的10条记录被自动提取并再次显示,使其总数为30行数据,并显示出来。如果删除了20条记录,那么我希望自动获取并显示接下来的20条记录(再次使其总数为显示的30行数据)。我想在做这件事时附加一个效果,这样我就可以直观地注意到出现了新行。也许可以应用slideup或fadein+slideup效果?希望我有道理
我需要什么:
<?php
$from = 0;
$limit = 30;
$result = mysql_query( "SELECT * FROM mytable ORDER BY m_id ASC LIMIT $from, $limit" );
?>
<table>
<tr>
<td>ID</td>
<td>Content</td>
</tr>
<?php
while( $rows = mysql_fetch_array($result) )
{
?>
<tr id=<?php echo $rows['m_id']; ?>>
<td><?php echo $rows['m_id']; ?></td>
<td><?php echo $rows['content']; ?></td>
</tr>
<?php
}
?>
</table>
我需要PHP&jQuery代码才能实现上述效果/功能。提前谢谢
下面是我的一点jQuery代码(如果有帮助的话):
$('#按钮_删除')。单击(函数(){
$.ajax({
键入:“POST”,
cache:false,
url:'test.php',
数据:$('#form1')。序列化(),
数据类型:“json”,
成功:函数(数据){
如果(data.success==1)
{
$.each(data.id,函数(索引,值){
$('#'+value).remove();
});
jQuery.each(data.new_rows_data,function(i,val)
{
jQuery.each(val,function(i,new_val)
{
$('#表')。追加(''+
''+
''+
''+新值'''
'');
});
});
}
}
})
返回false;
});
PHP代码:
<?php
$from = 0;
$limit = 30;
$result = mysql_query( "SELECT * FROM mytable ORDER BY m_id ASC LIMIT $from, $limit" );
?>
<table>
<tr>
<td>ID</td>
<td>Content</td>
</tr>
<?php
while( $rows = mysql_fetch_array($result) )
{
?>
<tr id=<?php echo $rows['m_id']; ?>>
<td><?php echo $rows['m_id']; ?></td>
<td><?php echo $rows['content']; ?></td>
</tr>
<?php
}
?>
</table>
身份证件
内容
test.php
//test.php
<?php
$id = $_POST['id'];
if( is_array( $id ) )
{
$arr_size = sizeof( $id );
foreach ( $id as $value )
{
$sql = "DELETE FROM mytable WHERE id = ".(int)$value." LIMIT 1";
$result = mysql_query($sql);
}
if( $result )
{
$success = 1;
$message = 'Deleted';
}
else
{
$success = 0;
$message = 'Unable to DELETE FROM DB.';
}
}
$last_id = 500;
for($i=1; $i <= $arr_size; $i++)
{
$new_value = ($last_id + $i);
$new_rows[] .= $new_value;
$res = mysql_query("SELECT id, message, date
FROM mytable WHERE id = ".(int)$new_value." "); //LIMIT 1
$row = mysql_fetch_array($res);
$new_rows_data['row']['id'] .= $row['id'];
$new_rows_data['row']['message'] .= $row['message'];
$new_rows_data['row']['date'] .= $row['date'];
}
print json_encode(array('success' => $success, 'message' => $message, 'id' => $id, 'new_rows' => $new_rows,
'new_rows_data' => $new_rows_data));
?>
//test.php
由于您正在使用AJAX(或者我猜是ajaj)删除行,您还可以将当前显示的最后一个id传递到删除帖子页面
然后,您还可以传递一组json编码的行,这些行的长度与删除的行数相同,并使用jquery将这些行追加到表中,将最后一个id设置为追加行的最后一个id
$('#button_delete').click(function() {
$.ajax({
type: 'POST',
cache: false,
url: 'test.php',
data: $.extend($('#form1').serialize(), { 'last_id':$('#table tr:last').attr('id') }),
dataType: 'json',
success: function(data) {
if(data.success === 1)
{
$.each(data.id, function (index, value) {
$('#'+value).remove();
});
jQuery.each(data.new_rows_data, function(i, val)
{
$('#table').append('<tr id='+val.id+'>'+
'<td></td>'+
'<td></td>'+
'<td>'+val.message+'</td>'+
'</tr>');
});
}
}
})
return false;
});
你应该在上一次之后得到结果。嗨,亚当,谢谢你的回复。由于我已经通过表单序列化的方式传递了所选的行id,那么如何传递最后一个可见行的id呢$(“table tr:last”).attr('id')可能会可靠地获取最后一个可见的。(虽然我会在数据行中添加一些类,在表中添加一个ID,这样选择器就不那么通用了。)嗨,Adam,我已经编辑了我的原始帖子,包括test.php页面(表单提交到的页面)。我修改了代码,以便在成功事件中发送$new_rows_data['row']['id']、$new_rows_data['row']['message']和$new_rows_data['row']['date']值,然后在主表中,用每一行的相应数据填充新行,但它没有工作不正常。它不是在一行中填充单个记录的数据,而是为接收到的每个数据创建多行…从上面继续。。。因此,如果我删除了一条记录,我试图让它在各自的列中用id、消息和数据值填充一个新行(我的原始PHP代码只显示了2列,对此表示抱歉),但是它填充了3个新行,一个是id,第二个是消息,第三行是日期。简单地说,它将每一列视为新行,并以错误的方式更新我的表。我希望我有道理。希望我们能找到解决办法。非常感谢。然后它可能会遍历对象的字段,而不是列表中的对象。在成功方法中使用data.new_rows还是data.new_rows_data?看起来新的行数据应该可以与每个语句一起工作,我假设['row']最终将是行id或类似的东西。我建议您使用firebug或类似的工具,并使用console.log(数据)查看返回对象解析成什么。