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(数据)查看返回对象解析成什么。