2012-01-22 6 views
0

おはよう/午前 私はページが付けられたテーブルを持っています。最初のページはプライマリコンテンツのdivに表示されます。これは2ページ目をクリックすると表示されます。3.別のリンクで開きます。メインコンテンツのdivで開くようにします最初のページは、それを行う方法を把握することはできません。また、前のボタンをクリックすると、現在のページの前のページではなく、ページ1に進みます。ページ50のページ1に進みます。ここに私のコードがあります。は、PHPのプライマリコンテンツ部門のページ区切りテーブルに2ページ目を表示します

<?php 
require_once ('mysqli_connect.php'); 

$display = 30; 

if (isset($_GET['p']) && is_numeric ($_GET['p'])) 
{ 
    $pages = $_GET['p']; 

} else { 

    $q = "SELECT COUNT(NewCustomerID) FROM customer"; 
    $r = @mysqli_query($dbc, $q); 
    $row = @mysqli_fetch_array ($r, MYSQLI_NUM); 
    $records = $row[0]; 

    if ($records > $display){//more than 1 page. 
    $pages = ceil($records/$display); 
    } else { 
     $pages = 1; 
    } 
} // end of p IF 



if (isset($_GET['s']) && is_numeric ($_GET['s'])) 
{ 
     $start = $_GET['s']; 
    } else { 
     $start = 0; 
    } 

    $q = "SELECT(NewCustomerID) AS customerid, 
     (OldCustomerID) AS oldcustomerid, 
        (FirstName) AS FirstName, 
        (MiddleName) AS MiddleName, 
        (LastName) AS LastName, 
        (UserName) AS UserName, 
        (CarID) AS CarID, 
        (CarColorID) AS CarColorID, 
        (ComputerID) AS ComputerID, 
        (IsLaptop) AS LaptopID, 
        (RaceID) AS RaceID, 
        (ResidenceID) AS ResidenceID, 
        (BirthMonthID) AS BirthMonthID 
    FROM customer ORDER BY LastName ASC LIMIT $start, $display"; 
    $r = @mysqli_query($dbc, $q); if(!$r){die(mysqli_error($dbc));} 

    Echo '<table> 
    <tr> 
     <td><b>NewCustomerID </b></td> 
     <td><b>OldCustomerID </b></td> 
     <td><b>FirstName </b></td> 
     <td><b>MiddleName </b></td> 
     <td><b>LastName </b></td> 
     <td><b>UserName </b></td> 
     <td><b>CarID </b></td> 
     <td><b>CarColorID </b></td> 
     <td><b>ComputerID </b></td> 
     <td><b>IsLaptop </b></td> 
     <td><b>RaceID </b></td> 
     <td><b>ResidenceID </b></td> 
     <td><b>BirthMonthID </b></td> 
    </tr>'; 

    $bg = '#eeeeee'; // set initial back ground color 

    while ($row = mysqli_fetch_array($r, MYSQLI_ASSOC)) { 
     $bg = ($bg =='#eeeeee' ? '#ffffff' : '#eeeeee'); // switch the background color. 

    echo '<tr bgcolor="' . $bg . '"> 
     <td>' . $row['customerid'] . '</td> 
     <td>' . $row['oldcustomerid']. '</td> 
     <td>' . $row['FirstName']. '</td> 
     <td>' . $row['MiddleName']. '</td> 
     <td>' . $row['LastName']. '</td>   
     <td>' . $row['UserName'].'</td> 
     <td>' . $row['CarID'].'</td> 
     <td>' . $row['CarColorID'].'</td> 
     <td>' . $row['BirthMonthID'].'</td> 
     <td>' . $row['ComputerID'].'</td> 
     <td>' . $row['LaptopID'].'</td> 
     <td>' . $row['RaceID'].'</td> 
     <td>' . $row['ResidenceID'].'</td> 
     </tr>'; 

    } // end of while loop 

echo '</table>'; 
mysqli_free_result($r); 
mysqli_close($dbc); 

// make the links to the other pages if necessary 

if ($pages >1) { 
    // add some spaces and start a paragraph 
    echo '<br /> <p>'; 
    // determine what page the script is on: 
    $current_page = ($start/$display)+1; 
    // if it's not the first page, make a previous link; 
    if ($current_page !=1) { 
     echo '<a href="#"' . ($start - $display) . ' &p=' . $pages . '">Previous </a> '; 
    } 
    for ($i = 1; $i <= $pages; $i++) { 
     if ($i != $current_page) { 
      echo '<a href="#" ' . (($display * ($i - 1))) . '&p=' . $pages . '">' 
      . $i . '</a> '; 
     }else{ 
      echo $i . ' '; 
     } 
    }// end of FOR loop 

    // if it is not the last page, make a next button 
    if ($current_page != $pages) { 
     echo '<a href="#"' . ($start + $display) . '&p=' . $pages . '">Next</a>'; 
    } 

    echo '</p>'; // close the paragraph 
} // endo of links section 
?> 
+0

文法的なヒント: '@ 'でエラーを抑制しないでください。悪いアイデア。複数行エコーを使用しない - HEREDOCを使用するか、PHPモードを抜けてください。実際の質問については、クライアント側のJavascriptとAJAXの呼び出しを使用して、新しいページをクリックせずに各ページの読み込みを処理する必要があります。 –

+0

あなたのリンクは?p = 2で、#&p = 2でないものでなければなりません。あなたの獲得は決してうまくいかないでしょう。これはおそらく、常に最初のページに戻る理由を説明します。 –

答えて

0

まず第一に、あなたが表示するようにページを運ぶでしょうGET/POSTパラメータを渡す必要があります。変数$pageの例のように、OFFSETLIMITのキーワード(LIMIT 10 OFFSET 2など)を使用すると、11〜20個の項目番号からなる正確な行が得られます。

これはまさにあなたが必要とするものです。上記の中ですべてです

EDITED

<?php 
    $route  = '/index.php?p='; // where to go on click page 
    $total  = ($records % $display) != 0 ? floor($records/$display) + 1 : $records/$display; // total pages count 
    $current = isset($_GET['p']) ? $_GET['p'] : 1; // current page number 
    $last  = 1; // init value of the last page 
?> 
<p class="pager"> 
    <?php if ($total <= 9): ?> 
     <?php for ($i = 1; $i <= $total; $i++): ?> 
      <a href="<?php echo $route, $i; ?>" <?php if ($current == $i) echo 'class="acitve"'; ?>><?php echo $i; ?></a> 
     <?php endfor; ?> 
    <?php else: ?> 
     <?php 
      $rbound = $current + 1; 
      $lbound = $current - 1; 

      if ($lbound < 1) 
       $lbound = 1; 

      if ($rbound > $total) 
       $rbound = $total; 

      for ($i = 1; $i <= 3; $i++): 
     ?> 
      <a href="<?php echo $route, $i; ?>" <?php if ($current == $i) echo 'class="acitve"'; ?>><?php echo $i; ?></a> 
      <?php $last = $i; ?> 
     <?php endfor; ?> 

     <?php if ($lbound <= $last): ?> 
      <?php for ($i; $i <= $rbound; $i++): ?> 
       <a href="<?php echo $route, $i; ?>" <?php if ($current == $i) echo 'class="acitve"'; ?>><?php echo $i; ?></a> 
      <?php $last = $i; ?> 
      <?php endfor; ?> 
     <?php else: ?> 
      <?php echo $lbound == $last + 1 ? '' : '...'; ?> 
     <?php endif; ?> 

     <?php if ($lbound > 3 && $rbound < $total - 2): ?> 
      <?php for ($i = $lbound; $i <= $rbound; $i++): ?> 
       <a href="<?php echo $route, $i; ?>" <?php if ($current == $i) echo 'class="acitve"'; ?>><?php echo $i; ?></a> 
      <?php $last = $i; ?> 
      <?php endfor; ?> 
     <?php endif; ?> 

     <?php if ($rbound >= $total - 2): ?> 
      <?php for ($i = $lbound; $i < $total - 2; $i++): ?> 
       <a href="<?php echo $route, $i; ?>" <?php if ($current == $i) echo 'class="acitve"'; ?>><?php echo $i; ?></a> 
      <?php $last = $i; ?> 
      <?php endfor; ?> 
      <?php $last = $last > $total - 4 ? $last : $total - 2; ?> 
     <?php else: ?> 
      <?php echo $rbound == $total - 3 ? '' : '...'; ?> 
      <?php $last = $total - 2; ?> 
     <?php endif; ?> 

     <?php for ($i = $total - 2; $i <= $total; $i++): ?> 
      <a href="<?php echo $route, $i; ?>" <?php if ($current == $i) echo 'class="acitve"'; ?>><?php echo $i; ?></a> 
     <?php endfor; ?> 
    <?php endif; ?> 
</p> 

はあなたとしてレンダリングページャ与える:1 2 3 ... 12 13 14 ... 18 19 20を、それは最初の3ページ数、現在のページ+/- 1ページと最後の3を示したので、ここでは現在のページは、13ですページ番号。したがって、最初のページの場合は1 2 3 ... 18 19 20、最後は同じです。 CSSクラスactiveも現在のページリンクに追加します。

+0

大丈夫、申し訳ありません私は考えていない..私は学生です、私は本をフォローしていた。リンクは新しいページでそれらを引き上げることができたときに機能しました。教師は、新しいページで開くのではなく、以前のプロジェクトで作成したプライマリコンテンツのdivでリフレッシュすることを望みます。最初の引っ張りはそれを行いますが、再び起きるときはしません。どのように見えるべきかのスニペットを教えてください。 –

+0

私はフルテキストソリューションを投稿します。 1つの質問 - AJAXを使って読み込む、またはウィンドウを読み込む? – devdRew

+0

私はAJAXが何であるか分かりませんので、窓を再ロードしています。 –

0

時間を節約し、あらかじめ設計されたグリッドを使用してください。私の選択グリッドはDataTablesです。これは、すべてのバグとブラウザの矛盾がすでに解決されており、ページングは​​1行のコードと同じくらい簡単です。本当にシンプルにしたい場合は、テーブル全体を出力し、データシートでページングやソート、フィルタリングなどを並べ替えることができます。私のようなもので多くの結果に対処する必要がある場合は、データをajaxを介してロードし、実際にdatatablesをdomにアセンブルします。いずれにせよ、それはあなた自身のものを書くより速いです。

+0

これは実際にこのクラスの最終プロジェクトです。 –

+0

私も試しました - \tエコー 'Previous'; –

関連する問題