2011-11-01 94 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的内容,我们可以进一步帮助您。