代码之家  ›  专栏  ›  技术社区  ›  Devner

jquery&php-删除现有视图中的记录时,自动用下一个记录更新当前表视图

  •  0
  • Devner  · 技术社区  · 15 年前

    平台:

    php、mysql和jquery

    我所拥有的:

    我有一个数据库表。在我的应用程序中,我能够获取所有行。当我查询数据库时,我已经将记录提取限制设置为30,但是可以通过下拉列表更改。所以考虑我在一个查询中提取多达30行数据并显示它们。我正在表(行)中填充此数据。我在每个记录旁边都有一个复选框和一个删除按钮。单击“删除”按钮时,选中的所有行都将被删除。

    我想做的是:

    对于我删除的每一行,我都在尝试用下一组行更新当前视图,直到满足提取行限制。困惑?下面是一个例子:

    例子:

    考虑到我的表中有1000行&我已将记录提取限制设置为30,这意味着一次最多显示30条记录。我可以使用分页导航到其他记录。现在在我的视图中,表中有30行数据。我选择了5行并通过jquery删除了它们。删除后,我可以从视图中删除已删除的行。所以在本例中,由于我删除了5行,所以我可以删除它们,现在我的视图只显示了25行(这是正确的)。因为我的表中还有995行,并且我的记录提取限制为30,所以现在我希望这样做可以自动显示接下来的5条记录。我希望现有条目向上移动,新条目填充在底部。

    换句话说,只要存在足够的行,我就希望用与删除的记录数相同的记录数填充视图。因此,如果我删除了10条记录,我希望接下来的10条记录被提取并再次自动显示,使其总数为显示的30行数据。如果删除了20条记录,那么我希望自动提取并显示接下来的20条记录(再次使其总数为显示的30行数据)。我想用附加到它上的效果来完成这个操作,这样我就可以直观地注意到新的行已经出现了。也许可以应用幻灯片或Fadein+幻灯片效果?希望我讲得通。

    我需要什么:

    我需要 php&jquery代码 能够达到上述效果/功能。事先谢谢。

    这是我的一点 jQuery代码 (如果有帮助的话):

    $('#button_delete').click(function() {  
    
      $.ajax({
       type: 'POST',  
       cache: false,
       url: 'test.php',
       data: $('#form1').serialize(), 
       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) 
                {
    
                    jQuery.each(val, function(i, new_val) 
                    {                  
                        $('#table').append('<tr id='+new_val+'>'+
    
                      '<td></td>'+
                      '<td></td>'+
                      '<td>'+new_val+'</td>'+           
                      '</tr>'); 
                    });
                });
    
    
          }
         }       
       }) 
    
      return 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
    
    <?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));    
    ?>
    
    1 回复  |  直到 15 年前
        1
  •  1
  •   Adam Benzan    15 年前

    因为您使用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;
    });
    

    或是有这种效果的东西。

    现在,您应该能够通过$_post['last_id']访问删除代码中的最后一个ID。通过将“删除日志”更改为:

    $res = mysql_query("SELECT id,  message, date 
                       FROM mytable WHERE id > ".(int)$last_id." limit ".$arr_size);
    

    你应该在最后一个结果之后得到结果。