1

ここで使用したタイトルが理解できることを願っています...

ward_id と ward_name の 2 つの列を持つデータベースがあります。

病棟ごとに動的なページを作成し、ページ タイトルに ward_name を表示したいと考えています。含めている header.php ファイルを作成しました。

....?wid={$row['ward_id']} を使用して URL を介して ID を渡しています。これは、その ID を使用してデータベースからデータを取得する他のクエリを作成するときに正常に機能しています。

しかし、私が抱えている問題は、ページが ward_name をページ タイトルとして表示することを拒否することです。私はこのようなものがうまくいくと思っていました:

    $wardid = $_GET['wid'];

    $query = "SELECT ward_name, ward_id FROM wards WHERE ward_id=$wardid";
    $result = mysql_query($query);

    while ($row=mysql_fetch_array($result))
    {
$pagetitle = "$row['ward_name']";
    }

しかし、そうではありません。上記で非常に多くのバリエーションを試しましたが、すべてを思い出すことはできないので、誰かが私を助けてくれることを本当に願っています...現在のコードは次のとおりです。

ヘッダー ページ:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">

    <head>
    <meta charset="utf-8">
    <title><?php echo $pagetitle; ?></title>
    <link rel="stylesheet" href="style.css">
    </head>

    <body>

        <div class="wholepage">

            <div class="headlinewrapper">
                <div class="headline">
                    <h1></h1>
                    <h2></h2>
                </div>
            </div>

            <div class="headlinesidewrapper">
                <div class="headlineside">
                    <p>shv jsfj sjnsf jnsf nsnf nj njsfn
njfjn sfns njf njnsf njs dgbjn dn jnd njjn dd d d nj njd njnd njd nn djndj njd</p>
                </div>
            </div>

            <div class="topnavigation">
                <ul>
                <li><a href="index.php">Home</a></li>
                <li><a href="boroughs.php">Boroughs</a></li>
                <li><a href="wards.php">Wards</a></li>
                </ul>
            </div>

            <div class="sidebar">

            </div>

            <div class="mainpagewrapper">

動的ページ:

<?php

    $pagetitle = "Hello";
    include ('header.php');

    ?>

                <div class="mainpage">
                    <div class="infobox">

                    </div>
    <?php

    require('mysqli_connect.php');

    mysql_select_db('onetwom2_london');


    $wardid = $_GET['wid'];

    $query = "SELECT ward_name, ward_id FROM wards WHERE ward_id=$wardid";
    $result = mysql_query($query);

    while ($row=mysql_fetch_array($result))
    {
    echo "<div class=\"boroughlist\"><p>{$row['ward_name']}</p></div>" ;
    }

    $pagetitle = $result;

    ?>

    <div class="clear">
    </div>      
                </div>
            </div>
        </div>


    </body>

    </html>

したがって、URLを介して渡されたIDをデータベースに保存されているward_idと一致させる方法/可能かどうかを知りたいだけで、そのIDにリンクされたward_nameをページタイトルに表示させます。これが本当に簡単な質問である場合は申し訳ありません。これを解決するために何時間も費やしましたが、完全に困惑しています! (私が上に投稿したコードは、5 時間のフラストレーションの結果にすぎないので、助けを求める前に一生懸命努力したことを感謝してください :) )

4

3 に答える 3

0

まず、 二重引用符をできるだけ使用しないでください。'代わりに一重引用符を使用してください。二重引用符は、php が解析される文字列内の変数を探すようにします。一重引用符を使用すると、文字列内のすべての変数がプレーン テキストとしてエコーされ、全体的なパフォーマンスが向上します。

そう、

それ以外の

$pagetitle = "$row['ward_name']";

あなたが使いたい

$pagetitle = $row['ward_name'];

こっちも一緒:

echo "<div class=\"boroughlist\"><p>{$row['ward_name']}</p></div>";

次のように変更する必要があります。

echo '<div class="boroughlist"><p>'.$row['ward_name'].'</p></div>';

単一引用符を使用する\"と、コードが読みやすくなり、書きやすくなります。

 
PHPでデータベースを操作するには、MySQLi クラスを使用することをお勧めします。https://github.com/ajillion/PHP-MySQLi-Database-Classをご覧ください。実装は簡単で、学習曲線は低くなります。

MySQLiは MySQL の後継です (現在は非推奨です)。MySQLi では、(ユーザー) 入力を含むクエリをSQL インジェクションから保護する準備済みステートメントが導入されました。PDOはさらに優れていますが、使いにくいです。

について $wardid = $_GET['wid'];:値が整数として解釈されていることを確認してください。だからこれを試してください:

$wardid = (int) $_GET['wid']; // type cast to integer aka Type Juggling
$query  = 'SELECT ward_name, ward_id FROM wards WHERE ward_id=`'.$wardid.'` LIMIT 1';

に注意してLIMIT 1ください。これにより、クエリが 1 つの結果に制限され、結果が見つかった直後に停止するため、パフォーマンスが向上します。

頑張って SQL と PHP について学びましょう :-)


編集:

質問者様のコメントによると、質問で出されたコードを書き換えた例を追加したいと思います。

<?php

    // I'll demonstrate how to use the MySQLi Class
    require_once('mysqlidb.php');

    // Connect to the database
    $db = new Mysqlidb('host', 'username', 'password', 'databaseName');

    // Get the wid from the uri
    $wardid = $_GET['wid'];

    // Fetch the page title from the db
    $result    = $db->where('ward_id', $wardid)->get('wards', 1);
    $pagetitle = $result['ward_name'];

?>
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title><?php echo $pageTitle; ?></title>
    <link rel="stylesheet" href="style.css">
</head>
<body>

    <!-- A templating engine like smarty would make things easier -->
    <section class="whole-page">
        <div class="headline-wrapper">
            <div class="headline">
                <h1></h1>
                <h2></h2>
            </div>
        </div>
    </section>

    <div class="headline-sidewrapper">
        <div class="headline-side">
            <p>Lorem ipsum...</p>
        </div>
    </div>

    <nav class="top-navigation">
        <ul>
            <li><a href="index.php">Home</a></li>
            <li><a href="boroughs.php">Boroughs</a></li>
            <li><a href="wards.php">Wards</a></li>
        </ul>
    </nav>

    <aside class="sidebar"></aside>

    <section class="mainpage-wrapper">
        <!-- Dynamic page part - I recommend using a separate template that will be included here -->
    </section>

</body>
</html>

これは、MySQLi データベース クラスを使用した基本的な例です。このような作業を簡単にするために、smartyのようなテンプレート エンジンを使用することをお勧めします。また、「関心の分離」を読むことも検討してください。

于 2013-08-12T20:37:33.490 に答える