1

自分で作成したCMSデータベースからメニュー名を表示しようとしましたが、完全に表示されましたが、本当に奇妙なエラーがあり、解決策を見つけるのに何時間も費やしましたが、できませんでした.

問題は、メニュー名を H1 タイトルとして表示されるメニュー名をクリックするたびに、メニュー名をページ H1 として正確に 50 行目に表示したいことです。

メニュー名は正しく表示されていますが、ページ名の代わりに N を表示するサブメニュー (ページ) は、N がどこから来ているのかわかりません。

注: データベース接続またはデータの取得に問題はありません。

これは私のコンテンツページのコードです:

<?php include("includes/header.php"); ?>
<?php require_once 'includes/db_connection.php'; ?>
<?php require_once 'includes/b_functions.php'; ?>
<?php require_once 'includes/cms_constants.php'; ?>
<?php db_connect();?>
<?php

if (isset ( $_GET ['subj'] )) {
    $sel_subject = get_subject_by_id ( $_GET ['subj'] );
    $sel_page = "NULL";
} elseif (isset ( $_GET ['pages'] )) {
    $sel_subject = false;
    $sel_page = get_page_by_id ( $_GET ['pages'] );
} else {
    $sel_subject = "NULL";
    $sel_page = "NULL";
}

?>

<table id="structure">
    <tr>
        <td id="navigation">
            <ul class="subjects">
                <?php
        $subject_set = get_all_subjects();
        while ($subject = mysql_fetch_array($subject_set)) {
            echo "<li";
            if ($subject["id"] == $sel_subject["id"]) { echo " class=\"selected\""; }
            echo "><a href=\"contents.php?subj=" . urlencode($subject["id"]) . 
                "\">{$subject["menu_name"]}</a></li>";
            $page_set = get_pages_for_subject($subject["id"]);
            echo "<ul class=\"pages\">";
            while ($page = mysql_fetch_array($page_set)) {
                echo "<li";
                if ($page["id"] == $sel_page["id"]) { echo " class=\"selected\""; }
                echo "><a href=\"contents.php?pages=" . urlencode($page["id"]) .
                    "\">{$page["menu_name"]}</a></li>";
            }
            echo "</ul>";
        }

        ?>

        </ul>
        </td>

        <td id="page">
        <?php if (!is_null($sel_subject)) { // subject selected ?>
            <h2><?php echo $sel_subject['menu_name']; ?></h2>
        <?php } elseif (!is_null($sel_page)) { // page selected ?>
            <h2><?php echo $sel_page['menu_name']; ?></h2>
            <div class="page-content">
                <?php echo $sel_page['content']; ?>
            </div>
        <?php } else { // nothing selected ?>
            <h2>Select a subject or page to edit</h2>
        <?php } ?> </td>
    </tr>
</table>
<?php require_once 'includes/footer.php';?>
4

1 に答える 1

0

「N」は「NULL」文字列から来ています。文字列ではなく、実際の NULL で変数を設定するつもりだったと思います。お気に入り:

$var = NULL;

とは対照的に:

$var = "NULL";

「NULL」に設定された変数に配列としてアクセスすると、「N」が返されます (文字列が配列として扱われるため)。例えば;

$var = "NULL";
echo $var[0]; // 'N'

さらに、文字列に対して NULL をテストすると、false が返されます (変数は null ではありません)。

$var = "NULL";

if($var) {
    echo "var is: " . $var;
}
else {
    echo "var is NULL!";
}

上記は「var is: NULL」を出力するはずです。

私はこれを経験から言います (PHP のコーディングを始めたときにこれを行いました)。ただし、変数は後続の条件で設定する必要があるため、問題の根本はそこで止まらない可能性があります。while ステートメントと if ステートメントを調べて、変数が適切に設定されていることを確認します。(疑わしいブロックを介して var_dump($var) または print_r($var))。

于 2013-02-07T16:15:19.653 に答える