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);
}

これで、さまざまな演習をすべて1つのページに配列としてまとめることができます。個々のエクササイズを選択して表示できるようにしたいのですが、方法がわかりません。1つの方法は、すべての演習用のページを作成することですが、私には何百もあります。上記のコードのボタンは使用されていませんが、誰かが「表示」ボタンをクリックすると、演習の別のページに移動して詳細を読むことができます。上記のコードでデータベースから使用されたすべてのデータは、個々の演習ページで使用できます。

私のページは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

個々のエクササイズを選択して表示できるようにしたいのですが、方法がわかりません。1つの方法は、すべての演習用のページを作成することですが、私には何百もあります。

「ページ」とはどういう意味ですか?

とにかく、クエリ文字列パラメータをそれ自体に渡すことができるため、実際には複数の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);
?>

view.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 に答える