2011-11-01 68 views
0

我是PHP + MySQL的新手,並遵循一個示例來構建網頁。全局變量並減少PHP + MySQL中的數據庫訪問

基本上,我的首頁讀取數據庫,檢索頁面上的所有項目和列表。每個項目都有指向新頁面的鏈接,顯示其詳細信息。

列表頁:

//itemlist.html.php 
<html><body> 
<ul> 
<?php foreach ($items as $item): ?> 
    <li><a href="?C1=<?php echo($item['c1']); ?>"> 
    <?php echo($item['c1']); ?></a></li> 
<?php endforeach; ?> 
</ul> 
</body></html> 

商品頁面中:

//itemeach.html.php 
<html><body> 
<h1><?php echo($c1) ?></h1> 
<p><?php echo($c2) ?></p> 
</body></html> 

索引頁:

<?php 
if (isset($_GET['C1'])) 
{ 
    /* 
    I want to reuse $iteminfos and get value for $c1 and $c2 
    */ 
    include 'itemeach.html.php'; 
    exit(); 
} 
$result = mysqli_query($link, 'SELECT * FROM TB'); 
while ($row = mysqli_fetch_array($result)) 
{ 
    $items[] = array('c1' => $row['c1'], 'c2' => $row['c2']); 
} 
include 'itemlist.html.php'; 
?> 

我刪除了不必要的代碼。自從第一次加載index.php時,檢索$ infos。我想避免再次訪問數據庫來獲取一個特定的項目,所以我正在考慮重新使用$ infos。但是當我觸發'C1'時它變爲空。這可能會將$ items保留爲全局變量嗎?還是有其他方法可以做到這一點?

任何幫助將不勝感激!

+0

您可以將檢索到的行集存儲在$ _SESSION超全局中。像:$ _SESSION ['items'] = $ items;並把它放在while循環之後。 –

+0

爲每個頁面做一個新的數據庫請求是標準方法。 – 2011-11-01 19:30:28

+0

而不是打開一個新窗口,我正在考慮彈出一個div(+ css)。我知道如何使用JavaScript來做一個靜態的流行div,但是如何使用php + javascript,即流行div中的上下文是動態的? – DrXCheng

回答

0

您可以將檢索到的行集存儲在$ _SESSION superglobal中。像:

if (empty($_SESSION['items']) { 
    $result = mysqli_query($link, 'SELECT * FROM TB'); 
    while ($row = mysqli_fetch_array($result)) { 
     $rowData[] = array('c1' => $row['c1'], 'c2' => $row['c2']); 
    } 

    $_SESSION['items'] = $rowData; 
} 

$items = $_SESSION['items']; 

但是是啊什麼大said說是真實的。

0

只要將查詢和while循環移動到if(isset($ _ GET ['C1']))行的上面,這會使$ items可用於itemeach.html.php腳本。如果您可以發佈itemeach.html.php的內容,我們可以進一步幫助您。