0

一連のデータベース結果を素敵なグリッドに表示し、それらをページ付けする PHP スクリプトがあります。

ドロップダウンシステムを使用してページごとに表示される結果の数を変更する方法を作成する方法を見つけようとしているので、AJAX で遊び始めました。

表示するアイテムの量を決定する変数があるので、まったく同じ PHP コードを持つページをさらにいくつか作成しましたが、その変数の数は異なります。意図したとおりに動作しますが、異なる変数を使用して 3 つの追加ページを作成する必要があったため、考えられる最も非効率的な方法でこれを実行したと感じずにはいられません。

これはどのように改善できますか?

これがphpコードです。私はそれをページ自体に持っていましたが、ajaxが見ている別のファイルに移動しました。

<?php


                //Add the file that connects to the database
                include("C://wamp/www/site/config.php");    
                //Selects which database to get the data from
                mysql_select_db("products");

                //Variables for pagination 

                $per_page = 24;                 
                // get the number of items that actually have Oven in their name
                $sql = "SELECT SUM(rowcount)
                        FROM (
                        SELECT COUNT(1) AS rowcount 
                        FROM brand1
                        WHERE description LIKE '%oven%' 
                        UNION ALL 
                        SELECT COUNT(1) 
                        FROM brand2
                        WHERE description LIKE '%oven%'
                        ) AS counts";
                $pages_query = mysql_query ($sql) ;
                //Ceil rounds up to the nearest number so that we don't get pages with decimals on the end
                $pages = ceil(mysql_result($pages_query, 0) / $per_page);

                //append a page=1,2,3 at the end of the URL to indicate which page the user is on

                //set : 1 so that if a person doesn't pick a page it automatically sets them on page 1.
                $page = (isset($_GET['page'])) ? (int)$_GET['page'] : 1;

                $start = ($page -1) * $per_page;

                //Selects which table to extract the data from
                $i = 0;
                $result = mysql_query("SELECT * FROM brand1 WHERE description LIKE '%oven%' UNION ALL SELECT * FROM brand2 WHERE description LIKE '%oven%' LIMIT $start, $per_page") ;
                $dyn_table = '<table border ="1" cellpadding ="10">';

                //create a variable to store the data in
                while($row = mysql_fetch_array($result))
                    {
                        //Variables to store vendors information, product number and image as retrieved from the database
                        $brand = $row["Brand"];
                        $model_number = $row["Model Number"];
                        $product_image = $row["Image"];

                        //Set up a loop that puts the information into a grid rather than a single line
                        if($i%4==0) //First number sets the column number
                            {
                                // Starts to draw the table. Adds the vendor name, the product number then breaks line to draw the image underneath the titles
                                $dyn_table .= '<tr><td>' .  $brand . " " . $model_number . '<br>' . $product_image .'</td>';
                            }   
                        else
                            {
                                //This line does the same thing, but once the first if condition hits 4, it jumps to this line to contine drawing.
                                $dyn_table .= '<td>' . $brand . " " . $model_number . '<br>' . $product_image . '</td>';
                            }
                        //Simply adds 1
                        $i++;
                    }
                    //Adds the ending of the table
                    $dyn_table .= '</tr></table>';

                    //Draws the table
                    echo $dyn_table;

                    //Set the pagination links at the bottom of the page
                    if ($pages >=1 && $page <= $pages)
                        {
                            for($x=1; $x<=$pages; $x++)
                                {
                                    echo ($x == $page) ? '<strong><a href ="?page='.$x.'">'.$x.'</a></strong> ' : '<a href ="?page='.$x.'">'.$x.'</a> ';
                                }
                        }
            ?>  

そしてAJAX(W3から例を取り出したばかりです

  <script>
function loadXMLDoc()
{
    var xmlhttp;
    if (window.XMLHttpRequest)
    {// code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
    }
    else
    {// code for IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange=function()
    {
    if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
    }
    }
    xmlhttp.open("GET","http://localhost/site/products/ovens/products.php",true);
    xmlhttp.send();
}
</script>
4

2 に答える 2

0

ここで、大きくて退屈な答えを出してください。

あなたのコードは、家族からの汚染全体とその先史時代の手動の ajax のものの外では問題ありません。mysql_ページネーションの方法論はしっかりしており、可能なページ数を見つけて、その制限に基づいて結果の現在のページを取得するという通常のパターンに従います。正しい検証のビットとピースもすべてそこにあります。

これは少し非効率的であるという点では正しいですが、事前に計算された最大結果数/最大ページ数を固定する便利な場所がない限り、それを回避する方法はほとんどありません。あなたはすでにそれを持っているかもしれません。データベース構造を注意深く調べてください。また、適切なインデックスが作成されていることを確認する必要があります。で遊ぶ時間EXPLAIN

私がお勧めできる唯一のものは、無関係かもしれません。データベースの正規化について読む必要があるようです。テーブル名 (brand1、brand2) は、構造がまったく同じである 2 つのテーブルがあることを示唆していますが、唯一の違いは、2 つの異なる「ブランド」を対象としたデータが含まれていることです。これは、ブランドを別の列として追加することで、単一のテーブルで簡単に実行できます。

于 2012-12-10T05:48:19.680 に答える
0

あなたの説明によると、私はあなたがのようなものを持っていると思いますpage1.php... page2.php

を作成しpage.php$_GET['page']どのページを実行する必要があるかを確認し、HTML リンクなどを参照してくださいpage.php?page=2

チャールズが言うように、あなたが提供する詳細レベルで私が提供できるのはこれだけです.

于 2012-12-10T05:26:49.513 に答える