2016-09-04 7 views
0

こんにちは、私はちょうどPHPでMySQLを学び始めました。私のチュートリアルのレッスンでは、 "科目"と "ページ"の2つのテーブルを持つ1つのデータベースを作成しました。これらはリレーショナルデータベースです。 "subject"の主キーは、MySQLのsubject_idという変数を通してページテーブルから呼び出されます。最終的には、「サブジェクト」がカテゴリ、「ページ」がサブカテゴリであるナビゲーションメニューであるはずです。なぜページIDは無関係な番号ですか?

<div class="col-md-3 sidebar"> 
     <ul> 

      <?php $subject_set = find_all_subjects(); ?> 
      <?php while($subject = mysqli_fetch_assoc($subject_set)){ ?> 

      <li><a href="manage_content.php?subject= <?php echo urlencode($subject["id"]);?>"><?php echo $subject["menu_name"];?></a> 
      <?php $page_set = find_pages_for_subjects($subject["id"]); ?> 
       <ul>   
        <?php while($page = mysqli_fetch_assoc($page_set)){ ?> 
        <li> 
         <a href="manage_content.php?page= <?php echo urlencode($page["id"]);?>"><?php echo $page["menu_name"];?></a> 
        </li> 
        <?php } ?> 
        <?php mysqli_free_result($page_set);?> 
       </ul> 
      </li> 
      <?php } ?> 
      <?php mysqli_free_result($subject_set);?> 
     </ul> 
     </div> 

と私のfunction.phpに私が持っている:今、出力があるべき

<?php 
function confirm_query($result_set){ 
    if (!$result_set){ 
     die("DB Query Failed"); 
    } 
} 

function find_all_subjects(){ 
    global $connection; 
    $query = "select * "; 
    $query .= "from subjects "; 
    $query .= "where visible = 1 "; 
    $query .= "order by position asc"; 
    $subject_set = mysqli_query($connection, $query); 
    confirm_query($subject_set); 
    return $subject_set; 

} 

function find_pages_for_subjects($subject_id){ 
     global $connection; 
     $query = "select * "; 
     $query .= "from pages "; 
     $query .= "where visible = 1 "; 
     // an aditional line to relate pages to the subject, subject_id is what rlate two tables together 
     // dont forget space between lines 
     $query .= "AND subject_id = {$subject_id} "; 
     $query .= "order by position asc"; 
     $page_set = mysqli_query($connection, $query); 
     // the result captured can not be used twice for two different queries 
     // so result varibale should have unique names 
     confirm_query($page_set); 
     return $page_set; 
} 
?> 

単純なクエリを、私は私のPHPコードで今すぐ tables

tables

このようなもの:

問題は、おそらく3〜4のURLにある主題IDを取得するはずのページをクリックしたときですが、代わりに取得しています。

localhost:8888/CMS/public/manage_contentドット)php?page =%201

"(ドット)です。 "

どこから来たのですか?最初のページの場合は1の元の番号に戻すにはどうしたらいいですか?もっと情報が必要な場合は、私の全ファイルをどこにこのことから来る

は余談として、あなたに

+1

「=」の後のスペースを削除するには?page = <?php echo urlencode –

+0

'%20'はURLのエンコードされた値ですので'本当に '?page = 1' – RamRaider

+0

Andrej LudinovskovとRamRaiderさん、ありがとうございました。 :// localhost:8888/CMS/public/manage_content(dot)php?page = 1このチュートリアルでは、URLの変更だけがページに反映されますが、ページは変わらず、 "Not Found"ページに移動します。どういう考えがありますか? – ali

答えて

1

に感謝 - 。と(ちょっと)バインドされたパラメータを持つ準備された文の利点を無視して、私は

...読みやすいこの種のものを見つけます
function find_pages_for_subjects($subject_id){ 
     global $connection; 
     $query = " 
     SELECT * 
      FROM pages 
     WHERE visible = 1 
      AND subject_id = {$subject_id} 
     ORDER 
      BY position ASC; 
     "; 
+1

準備ができている文に簡単に変換できます。 –

+0

良い点とライアン・ヴィンセントに感謝します。私はそれを念頭に置いて、1つの変数でクエリ全体を持つことができるときに連結する必要はありません。 – ali

関連する問題