2014-03-25 30 views
-1

目前正通過這本書:初學PHP:Html在函數中顯示代碼?

http://commons.oreilly.com/wiki/index.php/PHP_Cookbook/Forms

的例子如下:

<?php 
     if (isset($_POST['stage']) && ('process' == $_POST['stage'])) { 
      process_form(); 
     } else { 
      print_form(); 
     } 

     function print_form() { 
      echo <<<END 
       <form action="$_SERVER[PHP_SELF]" method="post"> 
       What is your first name? 
       <input type="text" name="first_name"> 
       <input type="hidden" name="stage" value="process"> 
       <input type="submit" value="Say Hello"> 
       </form> 
     END; 
     } 

     function process_form() { 
      echo 'Hello ' . $_POST['first_name'] . '!'; 
     } 
    ?> 

但是...當加載頁面吧,形式和按鈕顯示,但它也打印後的所有代碼

因此...加載的頁面正確顯示錶格,但隨後顯示文本:

END; } 

      function process_form() { 
       echo 'Hello ' . $_POST['first_name'] . '!'; 
      } 
     ?> 
+3

「結束」需要在行首,而不是縮進 - 它不會識別它,如果它縮進... –

+1

我建議**不**使用HEREDOC語法。有幾種情況可以提供幫助,但通常在這些情況下,您正在爲內容或模板加載文件。另外,這不是一本很好的書。通過將任意數據輸入到HTML的上下文中而無需轉義,您已經打開了自己的XSS攻擊。 **總是**使用'htmlspecialchars()'。 (除非你不輸出HTML ...) – Brad

+0

@Brad是的,你說得對,使用模板更受歡迎。在代碼中直接使用POST或GET數據也是不好的做法,可能是某個地方提到的食譜(所有用戶輸入都被污染了)。但至少我們已經得到了他的問題回答;) –

回答

1

例子:

$content = <<<EOL 
     contentcontentcontentcontentcontentcontentcontentcontentcontent 
EOL; // will end it 

    $content = <<<EOL 
     contentcontentcontentcontentcontentcontentcontentcontentcontent 
    EOL; // will NOT end it 

所以它需要在開始

0

EOF將關閉只有在其結束標籤它在一個沒有線之前,標籤/其它字符。

<?php 
    if (isset($_POST['stage']) && ('process' == $_POST['stage'])) { 
     process_form(); 
    } else { 
     print_form(); 
    } 

    function print_form() { 
     echo <<<END 
      <form action="$_SERVER[PHP_SELF]" method="post"> 
      What is your first name? 
      <input type="text" name="first_name"> 
      <input type="hidden" name="stage" value="process"> 
      <input type="submit" value="Say Hello"> 
      </form> 
END; // NOTE THIS, NO TABS BEFORE 
    } 

    function process_form() { 
     echo 'Hello ' . $_POST['first_name'] . '!'; 
    } 
?> 

如果我是你,雖然,我會做這樣的:

 echo '<form action="$_SERVER[PHP_SELF]" method="post"> 
     What is your first name? 
     <input type="text" name="first_name"> 
     <input type="hidden" name="stage" value="process"> 
     <input type="submit" value="Say Hello"> 
     </form>'; 

更整潔,更易於閱讀。如果你需要把所有的代碼放在另一個循環中怎麼辦?你需要在每一行縮進,並且確保在END之前不要放入製表符/空格;線。

如果另一個使用編輯器添加自動縮進的開發人員編輯了代碼會怎麼樣? :-)

+0

我會爲此選擇HEREDOC ...並且如果另一個開發者'擁有這樣的IDE,他應該檢查他的設置。 ..;)沒有自尊心的IDE會這樣做......這很難,「食譜」給出了不好的例子......這就像是錯誤配料的正確配方......;) –