2

因此,我正在制作一个练习场,目前显示了数百个练习。我从 MySQL 数据库中提取数据没有问题。我的问题是能够在单独的页面上查看每个练习。目前,所有练习都使用此功能进行:

//Category 1 is biceps 
$cat = 1;
//$category is used for the case statement, to allow the form to submit and refresh         to the case statement that it is on, for each instance of the function. 
$category = 'biceps';
show_exercise($cat, $category);

这是函数本身:

//Show exercises based on exercise category 
function show_exercise($cat, $category)
{
    $dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
    $query = "SELECT * FROM exercises WHERE cat_id='$cat' ";
    $result = mysqli_query($dbc, $query);
    while($row = mysqli_fetch_array($result))
    {
        $output[] = '<div class="item"> 
        <h2>'. $row['name'] .'</h2> 
        <img src="'. $row['image'] .'" alt="'. $row['name'] .'" /> 
        <input class="button" type="submit" name="add" value="add" /> 
        <a href="index.php?p=view"><input class="button" type="submit" name="view" value="view"/></a> 
        </div>';
    }
    echo join('', $output);
}

现在这只是将我所有不同的练习作为一个数组拉到一个页面上。我希望能够选择和查看每个单独的练习,但我不知道如何操作。一种方法是为每个练习创建一个页面,但我有数百个。上面代码中的按钮没有被使用,但想法是当有人单击“查看”按钮时,他们会被带到练习的单独页面,在那里他们可以阅读更多详细信息。数据库中上述代码中使用的所有数据都可以在各个练习页面上使用。

我的页面是用 switch 语句管理的,我想我会提到这一点,因为它可能会改变答案。这是我正在使用的 switch 语句:

// Validate what page to show: 

if(isset($_GET['p']))
{
    $p = $_GET['p'];
}
elseif(isset($_POST['p']))
{
// Forms 
    $p = $_POST['p'];
}
else 
{
    $p = NULL;
}
// Determine what page to display: 

switch ($p)
{
    case  'contact' : 
        $page = 'contact.php';
        $page_title = 'Contact Us';
    break;

    case  'exercises' : 
        $page = 'exercises.php';
        $page_title = 'Exercises';
    break;

    case  'routines' : 
        $page = 'routines.php';
        $page_title = 'Your Routines';
    break;

    case  'arms' : 
        $page = 'arms.php';
        $page_title = 'arms routine';
    break;
}

此声明继续进行更多页面。我不知道我是否让这听起来比现在更难。如果有任何问题,我将准备发表评论。

4

1 回答 1

0

我希望能够选择和查看每个单独的练习,但我不知道如何操作。一种方法是为每个练习创建一个页面,但我有数百个。

“页面”是什么意思?

无论如何,您实际上不需要多个 PHP 脚本,因为它可以将查询字符串参数传递给自身。但是,如果将其分布在多个页面上,通常会更容易维护。看起来你已经在这样做了。好的。

例如,您可以添加一个名为“itemid”的参数,该参数仅在您访问“查看”页面时使用。

如果视图页面是在您的母脚本中包含的另一个脚本(我称之为“页面脚本”)中实现的,我建议您的所有“页面脚本”都实现相同的函数,即generate_page($query_string)调用来自母脚本的查询字符串。如果您使用 OOP,每个页面都可以是实现相同接口的类。但我试图提出一些类似于你已经在做的事情。

所以你的母页是这样的:

<?php
$pagename = $_GET["page"];
$allowed_pages = ["view", "contact"];
if (!in_array($pagename,$allowed_pages)) exit("Invalid page!");
require($page . ".php");
generate_page($_GET);
?>

视图.php

<?php
function generate_page($arguments) {
   if (!isset($arguments["item"])) exit("Item needs to be specified!");
   // Do SQL query and view THIS item. (remember to guard against SQL injection!)
   // you can do this by using a different WHERE clause
}
?>

现在视图可以显示它想要的。如果其他页面不想使用,$arguments则不必使用该参数。

您可以将链接更改为类似<a href="index.php?p=view&item={$row['itemid']}">.

于 2013-02-23T14:15:56.410 回答