0

平台:

PHP、mySQL 和 jQuery

是)我有的:

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

我想做什么:

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

例子:

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

换句话说,只要存在足够的行,我想用相同数量的记录填充我的视图,因为许多记录已被删除。因此,如果我删除 10 条记录,我希望再次自动获取并显示接下来的 10 条记录,使其总计显示 30 行数据。如果删除了 20 条记录,那么我希望自动获取并显示接下来的 20 条记录(再次使其总计显示 30 行数据)。我想用附加的效果来做到这一点,这样我就可以直观地注意到新行已经出现。也许可以应用上滑或淡入淡出+上滑效果?希望我说得通。

我需要的:

我需要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>

测试.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));    
?>
4

1 回答 1

1

由于您使用 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);

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

于 2010-01-07T07:14:29.893 回答