私はPHPをLynda.comのコースと一緒に学習しています。構築されているウェブサイトでは、ナビゲーションメニューはデータベースに「件名」と「ページ」を照会してから表を作成することによって作成されます。配列やヌルの変数を比較すると、PHPの "不正な文字列オフセットの警告"が表示されないようにする
これらの「件名」と「ページ」はそれぞれ、ID番号を$ _GETに送信してページを更新し、特定のコンテンツを読み込むリンクです。問題は件名配列かページ配列が常にnullになることです(一度に1つのタイプしかクリックできないため)。これは、ウェブページが常に「不正な文字列オフセット警告」をスローする原因となっています。
if (isset($_GET['subj'])) {
$sel_subject = get_subject_by_id($_GET['subj']);
$sel_page = "NULL";
} elseif (isset($_GET['page'])) {
$sel_page = get_page_by_id($_GET['page']);
$sel_subject = "NULL";
} else {
$sel_subject = "NULL";
$sel_page = "NULL";
これは.phpの先頭にあり、少なくとも1つの変数が配列ではなくNULLであることを示しています。
$subject_set = get_all_subjects();
while ($subject = mysqli_fetch_array($subject_set)) {
echo "<li";
if ($subject['id'] == $sel_subject['id']) {
echo " class =\"selected\"";
}
echo "><a href=\"content.php?subj=" . urlencode($subject['id']) .
"\">
{$subject["menu_name"]}</a></li>";
$page_set = get_pages_for_subject($subject['id']);
echo "<ul class=\"pages\">";
while ($page = mysqli_fetch_array($page_set)) {
echo "<li";
if ($page['id'] == $sel_page['id']) {
echo " class =\"selected\"";
}
echo "><a href=\"content.php?page=" . urlencode($page["id"]) . "\"> {$page["menu"]}</a> </li>";
}
echo "</ul>";
}
これは、ナビゲーションメニューを生成するコードの一部です。 ifステートメントの1つは、常にnullの変数から配列値を取得しようとします。
何か間違っていますか?これは、サイトのナビゲーションメニューを作る本質的に悪い方法ですか?私が使用しているコースは古く、おそらくPHPプログラミングによってこのメソッドは時代遅れになっています。
まずOR条件を使用し、次にどの条件が設定されているかを判断します。 if(is_array($ var)またはis_null($ var)){} else {} '? –
' if(isset($ _ GET ['subj']) ? – RamRaider