2016-09-04 5 views
0

안녕하세요, 저는 PHP로 MySQL을 배우기 시작했습니다. 내 튜토리얼 수업에서는 "표제"와 "페이지"라는 두 개의 테이블이있는 데이터베이스를 만들었습니다. 이들은 관계형 데이터베이스입니다. "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에 내가 가진 : tables

tables

지금 내 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; 
} 
?> 

간단한 쿼리를, 이제 출력해야 다음과 같은 내용 :

문제는 내가 페이지를 클릭 할 때 URL에 3 ~ 4 개의 주제 ID를 얻으려고하는데 그 대신에 내가 얻는 것입니다 :

localhost : 8888/CMS/public/manage_content 도트) php? page = % 201

"(도트)입니다. "

어디에서 왔는가? 예를 들어 첫 번째 페이지의 경우 원래 번호로 다시 설정할 수 있습니까? 자세한 정보가 필요하면 제 전체 파일을 제공하여 어디에서 찾을 수 있는지 물어보십시오. 이에서 오는

이 여담으로 당신에게

+1

'='다음에 공백을 없애려면? page =

+0

'% 20'은 공간의 URL 인코딩 값입니다''그래서 정말'? page = 1' – RamRaider

+0

Andrej Ludinovskov와 RamRaider, 작은 공간이 문제가되었습니다. 이제 http로 가고 싶습니다. : // localhost : 8888/CMS/public/manage_content (dot) php? page = 1 튜토리얼에서는 페이지가 URL 변경 만 변경하지만 페이지는 동일하게 유지되며 광산은 "찾을 수 없음"페이지로 이동합니다. 왜 그럴 생각이야? – 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

좋은 점과 Ryan Vincent에게 감사드립니다. 나는 하나의 변수에서 전체 쿼리를 가질 수있을 때 연결할 필요가 없다는 것을 기억한다. – ali

관련 문제