0

プラットホーム:

PHP、mySQL & jQuery

私が持っているもの:

データベーステーブルがあります。アプリケーション内で、すべての行をフェッチできます。データベースにクエリを実行するとき、レコードのフェッチ制限を 30 に設定しましたが、これはドロップダウン リストで変更できます。したがって、1 回のクエリで最大 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>

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));    
?>
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 に答える