0
votes

I am attempting to write a plugin that searches an SQL table based on input supplied via a form. My code is...

                global $table_name_log;
                $pagenum = isset( $_GET['pagenum'] ) ? absint( $_GET['pagenum'] ) : 1;
                $limit = 25;
                $offset = ( $pagenum - 1 ) * $limit;

                $l_task=isset( $_POST['l_task'] ) ? $_POST['l_task'] : "a";
                $l_val=$_POST['l_val']; if($l_val=="") { $l_task="a"; }
                if($l_task=="d")
                {
                    $criteria="where log.Doc_Number='{$l_val}'";
                }
                elseif($l_task=="e")
                {
                    $criteria="where log.Employee='{$l_val}'";
                }
                else
                {
                    $criteria="";
                }
                    $SQLQuery="SELECT em.ID, log.Date, em.Payroll, log.Doc_Number, doc.Doc_Name, doc.Replaced_By, log.Trainer, log.Log, log.Type
                            FROM {$table_name_log} log
                            join {$table_name_employee} em on log.Employee=em.ID
                            join {$table_name_documents} doc on log.Doc_Number=doc.Doc_Number
                            {$criteria}
                            order by log.Employee asc
                    ";

                //Get total number of results
                $results=$wpdb->get_results("{$SQLQuery}",ARRAY_A);
                $search_total = $wpdb->num_rows;

                //Limit results by page
                $results=$wpdb->get_results("{$SQLQuery} LIMIT {$offset}, {$limit}",ARRAY_A);
                if(! $results)
                {
                    if($pagenum>1)
                    {
                        $pagenum=1;
                        $results=$wpdb->get_results("{$SQLQuery} LIMIT 0, {$limit}",ARRAY_A);
                    }
                }

I then display the results of the query. At the bottom of the displayed results I have this code...

                $total=$search_total;
                $num_of_pages = ceil( $total / $limit );
                $page_links = paginate_links( array(
                    'base' => add_query_arg( 'pagenum', '%#%' ),
                    'format' => '',
                    'prev_text' => __( '«', 'aag' ),
                    'next_text' => __( '»', 'aag' ),
                    'total' => $num_of_pages,
                    'current' => $pagenum
                ) );

                if ( $page_links ) {
                    echo '<div class="tablenav"><div class="tablenav-pages" style="margin: 1em 0">' . $page_links . '</div></div>';
                }

The problem is that although the number of pages is calculated correctly and page 1 displays the correct results; when selecting another page it displays the results without the $criteria set by $l_task. How do I edit the code so that the pagination links feed the correct query to use for the additional pages?

1

1 Answers

0
votes

Works now by adding this at the top...

if(isset($_GET['l_task'])) { $_POST['l_task']=$_GET['l_task']; }
if(isset($_GET['l_val'])) { $_POST['l_val']=$_GET['l_val']; }

I then added this...

'add_args' => array( 'l_task' => $_POST['l_task'], 'l_val' => $_POST['l_val'] )

to...

$page_links = paginate_links( array(
    'base' => add_query_arg( 'pagenum', '%#%' ),
     'format' => '',
     'prev_text' => __( '&laquo;', 'aag' ),
     'next_text' => __( '&raquo;', 'aag' ),
     'total' => $num_of_pages,
     'current' => $pagenum,
     'add_args' => array( 'l_task' => $_POST['l_task'], 'l_val' => $_POST['l_val'] )
) );