2012-06-10 127 views
0

PHP腳本是從上到下讀取的嗎?像HTML?因爲在這個代碼PHP腳本是從頂部到底部讀取的嗎?

<?php require_once("./includes/connection.php")?> 
<?php require_once("./includes/functions.inc.php"); ?> 
<?php 

    if(isset($_GET['subj'])) 
    { 
     $sel_subj = get_subject_by_id($_GET['subj']); 
     $sel_page = NULL; 

    }else if(isset($_GET['page'])) 
    { 
     $sel_subj = NULL; 
     $sel_page = get_page_by_id($_GET['page']); 
    }else 
    { 
     $sel_subj = NULL; 
     $sel_page = NULL; 
    } 


?> 
<?php include("includes/header.inc.php"); ?> 
<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_subj['id']) {echo " class =\"selected\"";} 
         echo "><a href=\"content.php?subj=" . urlencode($subject["id"]) . 
         "\">{$subject["menu_name"]}</a></li>"; 

         echo "<ul class = 'pages'>"; 

         $page_set = get_pages_for_subject($subject['id']); 

         while($page = mysql_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_name"]}</a></li>"; 
         } 
         echo "</ul>"; 
        } 
       ?> 
       </ul> 
     </td> 
     <td id="page"> 
       <?php if(isset($sel_subj)){?> 
        <h2><?php echo "{$sel_subj['menu_name']}";?></h2> 
       <?php } ?> 
       <?php if(isset($sel_page)){?> 
        <h2><?php echo "{$sel_page['menu_name']}"?> </h2> 
       <?php }?> 
     </td> 
    </tr> 
</table> 
<?php require("includes/footer.inc.php"); ?> 

明確這部分

if(isset($_GET['subj'])) 
     { 
      $sel_subj = get_subject_by_id($_GET['subj']); 
      $sel_page = NULL; 

     }else if(isset($_GET['page'])) 
     { 
      $sel_subj = NULL; 
      $sel_page = get_page_by_id($_GET['page']); 
     }else 
     { 
      $sel_subj = NULL; 
      $sel_page = NULL; 
     } 

這是如何的if-else正在如果是在頁面的頂部稱爲塊?

+1

是的,他們是。你看到其他事情發生了嗎? – Greg

+0

您是否瞭解每次加載新頁面時都會重新處理PHP「從上到下」?也就是說,在每個頁面點擊時,根據URL上的內容,這三個「if」條件中的一個就會被滿足。 – Matthew

+0

我只是想知道$ _GET變量如何獲取其值,即使該頁面的url中不包含任何「subj」。如果用戶點擊任何菜單,subj將被賦予值。 – user962206

回答

2

它從頭到尾一次運行每頁顯示。在初始視圖中,假設該URL沒有參數,則將不會設置$_GET['subj']$_GET['page']

如果點擊指向同一頁面的鏈接,則整個PHP文件將被重新處理。如果該鏈接在URL中包含subjpage作爲查詢變量,則相應的if塊將被執行並且頁面將相應地改變。

將PHP服務器想象爲動態創建一些發送到Web瀏覽器的HTML文件。一旦發送完畢,服務器就完成了,PHP代碼就「不見了」。運行更多PHP代碼的唯一方法是請求一個新頁面,此過程從此開始。

(即使AJAX遵循同樣的原則,雖然一般,那麼你正在處理的部分數據請求,而不是完整的頁面訪問量。)

+0

我可以查看一個頁面一百次,甚至是離線,所以PHP不會執行。某些程序輸出的視圖與程序本身的運行之間沒有1:1的關係。在技​​術上是錯誤的,因爲緩存程序輸出是很常見的。 – hakre

+2

是的。我也應該提到,如果有人正在監視你的肩膀,那麼PHP代碼不會執行兩次。同樣,如果監視器處於關閉狀態,並且沒有人在請求發出時查看HTML,那麼PHP代碼仍然會運行。 – Matthew

2

是的,腳本從上到下運行。我不明白你爲什麼認爲if-else block有什麼不同?在執行並輸出頁面的其餘部分之前,運行這些if子句以設置變量$sel_subj$sel_page

+0

$ _GET如何獲得它的價值?因爲$ _GET ['subj']應該是null?頁面運行時,url中沒有「subj」的值。除非我點擊任何菜單。 – user962206

+0

Right,$ _GET ['subj']沒有任何價值。這就是爲什麼他們使用if(isset($ _ GET ['subj']))'來查看它是否存在。 –

0

PHP腳本從上到下執行。你的問題到底是什麼?

+0

這樣的簡短回答可能是最好的評論,對此可以給出更多的回答。 – halfer

相關問題