如何创建从数据库驱动的动态菜单和页面?

时间:2014-05-25 22:28:26

标签: php mysql loops dynamic menu

我是这里的新手,也是php的新手。我虽然不是stackoverflow的新手:)

我正在创建一个简单的报告系统,我希望从数据库生成菜单和页面。

我看到this video on YouTube并设法使用以下代码创建菜单。

我有一个名为Reports的数据库表,其列名为rep_idrep_daterep_ledit_daterep_bydepartment,{{1 },positionreport

基于上述方法,我使用此代码创建了一个菜单。

rep_to

因此,我创建了一个名为<?php require ("includes/db.php"); mysqli_select_db($con, '$db_name'); $sql = "SELECT * FROM reports"; $result = mysqli_query($con, $sql) or die (mysqli_error($con)); $represult=mysqli_fetch_assoc($result); $rep_by=$represult['rep_by']; $report=$represult['report']; ?> <li> Menu <ul> <?php do { ?> <li><a href="reports.php?rep_id=<?php echo $represult['rep_id']; ?>"> <?php echo $represult['rep_by'] . " (" . $represult['rep_date'] . ")"; ?></a></li> <?php } while ($represult=mysqli_fetch_assoc($result)); //$represult['rep_by']; //$represult['report']; //$represult['report'] ; ?> </ul> </li> 的页面,以查看数据库中内容的详细信息。我想要的是看到以下 rep_by(rep_date)作为标题并作为内容报告。

我可能也希望在内容中使用其他列。那么菜单和reports.php应该有什么样的代码来实现我想要的。我所做的是以下内容,它只在单击所有菜单链接时输出第一行。

reports.php

2 个答案:

答案 0 :(得分:1)

report.php:

<?php

require ('includes/db.php');

mysqli_select_db($con, $db_name);

$sql= 'SELECT * FROM Reports WHERE rep_id = ?';
$stmt = $con->prepare($sql);
$id = $_GET['rep_id'];
$stmt->bind_param('i', $id);
$stmt->execute();

$stmt->bind_result($rep_id, $rep_date, $rep_ledit_date, $rep_by, $department, $position, $report, $rep_to);
$stmt->fetch();

?>

<h1><?php echo "$rep_by ($rep_date)"; ?></h1>
<?php echo $report; ?>

reports.php(稍微调整一下)

<?php 

require ('includes/db.php');

mysqli_select_db($con, $db_name);

$sql = 'SELECT * FROM Reports';
$stmt = $con->prepare($sql);
$stmt->execute();

$stmt->bind_result($rep_id, $rep_date, $rep_ledit_date, $rep_by, $department, $position, $report, $rep_to);

?>  
Menu
<ul>
<?php while ($stmt->fetch()) { ?>

<li><a href="report.php?rep_id=<?php echo $rep_id; ?>"> <?php echo "$rep_by ($rep_date)"; ?></a></li>

<?php } ?>
</ul>

答案 1 :(得分:0)

由于PHP标记和HTML的混合,您的代码有点令人困惑所以我将其重新编写为100%PHP。

require ("includes/db.php");

mysqli_select_db($con, '$db_name');

$sql = "SELECT * FROM reports";
$result = mysqli_query($con, $sql) or die (mysqli_error($con));

echo '<li>'
   . '<ul>'
   ;

while ($represult = mysqli_fetch_assoc($result)) {
  echo '<li>'
     . '<a href="reports.php?rep_id=' . $represult['rep_id'] . '">'
     . $represult['rep_by']
     . ' (' .   $represult['rep_date'] . ')'
     . '</a>'
     . '</li>'
     ;
} 

echo '</ul>'
   . '</li>'
   ;

我在原始代码中看到的主要问题是您正在进行两次此调用:

$represult=mysqli_fetch_assoc($result);

一个在$result = mysqli_query(…)附近,另一个在do / while循环的尾端。此外,不确定do / while循环的值,因此我将其重构为简单的while循环。最后,重组为100%PHP,我做了一些格式化的连接,使其更容易阅读&amp;看看整体逻辑的结构。

编辑:原始海报添加了额外的代码,说问题是它只返回第一个结果。问题 - 再次是缺少while循环。这是我重构的代码版本:

require ("includes/db.php");

mysqli_select_db($con, '$db_name');

$sql= "SELECT * FROM reports";
$result = mysqli_query($con, $sql) or die (mysqli_error($con));


while ($represult = mysqli_fetch_assoc($result)) {

  echo '<h1>'
     . $represult['rep_by']
     . ' ('
     . $represult['rep_date']
     . ')'
     . '</h1>'
     . $represult['report']
     ;

}