2017-06-09 19 views
1

問題があります。私はユーザーが名前、画像などのような情報を入力できるように取り組んでいます。そして、すべてのユーザー情報がカテゴリのページに表示され、ページ区切りでもソートされます。並べ替えでページ分割が機能しない

問題1.並べ替えとカテゴリは個別にうまく機能しましたが、並べ替えは後の選択カテゴリでは機能しません。ユーザーがカテゴリを選択した後、選択したカテゴリでソートすることもできます。

問題2私のページ区切りコードは機能しましたが、カテゴリを選択すると分類されず、並べ替えを選択したときと同じ問題が発生したため正しくありません。

ありがとうございます!

これはカテゴリのためです:

<form action="" method="POST"> 
    <select name="theme_category_name" > 
     <option class="form-control" >Select Your Categories</option> 
     <?php 

     global $wpdb; 
     $table_name ="theme_category"; 
     $category = $wpdb->get_results("SELECT * from $table_name"); 
     foreach($category as $categories){ 
      ?> 
      <option class="form-control" ><?php echo $categories->theme_category_name;?></option> 
      <?php 
     } 
     ?> 

    </select> 
    <input type="submit" class="btn btn-info" name="category_submit" value="GO"/> 
</form> 

この場合、ソートのために:

<form action="" method="post"> 
    <input type="submit" class="btn btn-default" name="Newest" value="Newest "> 
    <input type="submit" class="btn btn-default" name="high_price" value="High Price"> 
    <input type="submit" class="btn btn-default" name="low_price" value="Low Price"> 
</form> 

すべてのPHPコード:

<?php 
     global $wpdb; 
     $table_name ="theme_upload"; 
      //Pegination 
      $pagenum = isset($_GET['pagenum']) ? absint($_GET['pagenum']) : 1;  
      $limit = 2; // number of rows in page 
      $offset = ($pagenum - 1) * $limit; 
      $total = $wpdb->get_var("select count(*) as total from $table_name"); 
      $num_of_pages = ceil($total/$limit); 
      $rowcount = $wpdb->num_rows; 

     $category_s = $_POST['theme_category_name']; 
     //Category Select 
     if(isset($_POST['category_submit'])) 
     { 
      $result = $wpdb->get_results("SELECT * from $table_name WHERE theme_cat_name = '$category_s' limit $offset, $limit"); 
     } 
     //Newest 
     elseif(isset($_POST['Newest'])) 
     { 
      $result = $wpdb->get_results("SELECT * from $table_name ORDER BY id DESC limit $offset, $limit"); 
     } 
     //Sorting for High Price 
     elseif (isset ($_POST['high_price'])) 
      { 
       $result = $wpdb->get_results("SELECT * from $table_name ORDER BY theme_price DESC limit $offset, $limit"); 
      } 
     //Sorting for low Price 
     elseif (isset ($_POST['low_price'])) 
      { 
       $result = $wpdb->get_results("SELECT * from $table_name ORDER BY theme_price ASC limit $offset, $limit"); 
      } 
     // Default Order 
     else { 
       $result = $wpdb->get_results("SELECT * from $table_name limit $offset, $limit"); 
     } 


     if($rowcount>0){  
      foreach($result as $results){ 
       //var_dump($results); 

      ?> 

      <?php 

      } 
     } 
     else{ 
      echo "<tr><td cols=an='5'>No records found</td></tr>"; 
     } 
      ?> 


<?php 
//Pagination Strat // 
$page_links = paginate_links(array(
    'base' => add_query_arg('pagenum', '%#%'), 
    'format' => '', 
    'prev_text' => __('&laquo;', 'text-domain'), 
    'next_text' => __('&raquo;', 'text-domain'), 
    'total' => $num_of_pages, 
    'current' => $pagenum 
)); 

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

?> 

答えて

0

のTh主な問題は、お使いのスクリプトが互いに独立してSQLクエリを実行していることです。

利用可能なフォームデータに基づいて1つのクエリを作成するために、コードにいくつかの変更を提案しました。

また、あなたの入力をエスケープするか、入ってくる$ _POST値をチェックする必要があります。間違いなく、カテゴリ名の$ _POST値をSQLクエリに渡すだけではありません。私は$ _POST値が有効であることを保証するための提案されたソリューションを追加しました。

あなたがここにWordPressのデータベースクラスでプリペアドステートメントを使用して、詳細を読むことができます:PHPの部分については

<form action="" method="POST"> 
    <select name="theme_category_name" > 
     <option class="form-control" value="all" >Select Your Categories</option> 
      <?php 

      global $wpdb; 
      $table_name ="theme_category"; 
      $category = $wpdb->get_results("SELECT * from $table_name"); 
      foreach($category as $categories){ 
       ?> 
       <option class="form-control" value="<?=$categories->theme_category_name?>" ><?php echo $categories->theme_category_name;?></option> 
       <?php 
      } 
      ?> 

     </select> 
     <!-- Change these to buttons, share the name=submit --> 
     <button type="submit" class="btn btn-info" name="submit" value="category_submit">GO</button> 

     <!-- Move these into the same form tag and make them buttons --> 
     <button type="submit" class="btn btn-default" name="submit" value="Newest">Newest</button> 
     <button type="submit" class="btn btn-default" name="submit" value="high_price">High Price</button> 
     <button type="submit" class="btn btn-default" name="submit" value="low_price">Low Price</button> 

</form> 

<?php 
    global $wpdb; 
    $table_name ="theme_upload"; 
     //Pegination 
     $pagenum = isset($_GET['pagenum']) ? absint($_GET['pagenum']) : 1;  
     $limit = 2; // number of rows in page 
     $offset = ($pagenum - 1) * $limit; 
     $total = $wpdb->get_var("select count(*) as total from $table_name"); 
     $num_of_pages = ceil($total/$limit); 
     $rowcount = $wpdb->num_rows; 

    $category_s = $_POST['theme_category_name']; 

    // Get a list of valid categories 
    $categories = $wpdb->get_results("SELECT theme_category_name from theme_category", ARRAY_A); 

    // Sort them into an array of values 
    $allowed_categories = array_column($categories, 'theme_category_name'); 

    // Add in the default value (defined on your page) 
    $allowed_categories[] = 'all'; 

    // Check the incoming value is valid/allowed 
    if(in_array($category_s, $allowed_categories) === false) { 
     // Set up your own error handling here 
     echo "Invalid category"; 
     exit; 
    } 

    // define defaults 
    $where = $order_by = ""; 

    // If a category is specified, define the WHERE clause 
    if($category_s !== 'all') { 
     $where = " WHERE theme_cat_name = '$category_s' "; 
    } 

    // Toggle your order_by values 
    switch($_POST['submit']) { 
     case 'Newest': 
      $order_by = " ORDER BY id DESC "; 
      break; 

     case 'high_price': 
      $order_by = " ORDER BY theme_price DESC "; 
      break; 

     case 'low_price': 
      $order_by = " ORDER BY theme_price ASC "; 
      break; 
    } 

    // Run only 1 SQL query to process all of the incoming information 
    $result = $wpdb->get_results("SELECT * from $table_name $where $order_by LIMIT $offset, $limit"); 

    if($rowcount>0){  
     foreach($result as $results){ 
      //var_dump($results); 

     ?> 

     <?php 

     } 
    } 
    else{ 
     echo "<tr><td cols=an='5'>No records found</td></tr>"; 
    } 
     ?> 


<?php 
//Pagination Strat // 
$page_links = paginate_links(array(
    'base' => add_query_arg('pagenum', '%#%'), 
    'format' => '', 
    'prev_text' => __('&laquo;', 'text-domain'), 
    'next_text' => __('&raquo;', 'text-domain'), 
    'total' => $num_of_pages, 
    'current' => $pagenum 
)); 

if ($page_links) { 
    echo '<div class="tablenav" style="width: 99%;"><div class="tablenav-pages" style="margin: 1em 0">' . $page_links . '</div></div>'; 
} 
//Pagination END // 
?> 
あなたのHTMLの部分については https://codex.wordpress.org/Class_Reference/wpdb#Protect_Queries_Against_SQL_Injection_Attacks

関連する問題