一連のデータベース結果を素敵なグリッドに表示し、それらをページ付けする 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>