2011-11-29 28 views
8

Trong PHP, tôi đang sử dụng câu lệnh if để xác định xem người dùng có đăng nhập hay không và tùy thuộc vào kết quả, hiển thị menu chính (nếu đã đăng nhập) hoặc thông báo "bạn cần đăng nhập" nếu không. Tôi làm điều này như sau:Xuất HTML bằng tiếng vọng được coi là thực hành không tốt trong PHP?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> 
    <link rel="stylesheet" href="style.css" type="text/css" /> 
    <title>Home</title> 
</head> 
<body> 
    <div id="header"> 
     <a href="index.php"><img src="wtcdblogo.png" alt="WTC DB logo" /></a> 
    </div> 
    <?php 
     if($_SESSION['loggedIn'] == 1) { 
      echo "<div id='main'>MAIN MENU stuff goes here</div>"; 
     } else { 
      echo "<div id='main'>Please login...</div>"; 
     } 
    ?> 
</body> 
</html> 

Như bạn thấy, đoạn code để hiển thị hoặc menu chính hoặc "xin vui lòng đăng nhập" thông điệp được sản xuất bởi một echo. Đây có phải là thực hành không tốt, có lẽ có một cách tốt hơn?

Nhân tiện, tôi đã cắt bớt hầu hết HTML từ echo giây trong đoạn mã của tôi ở trên. Menu chính được tạo thành từ một danh sách, nhưng tôi không bận tâm vì nó không liên quan đến câu hỏi, tôi đoán vậy.

Trả lời

24

Tôi coi đó là hành vi không tốt. Không chắc chắn về những gì người khác nghĩ. Đối với một điều, có vẻ khủng khiếp trong soạn thảo văn bản với cú pháp tô, sau đó bạn phải lo lắng về dây thoát vv

Đây là cách tôi làm điều đó:

<div> 
     <? if ($_SESSION['loggedIn'] === 1): ?> 
     <div id="main">Main Menu stuff goes here</div> 
     <? else: ?> 
     <div id="main">Please log in...</div> 
     <? endif ?> 
    </div> 

Bạn có thể nhảy ra khỏi PHP và sử dụng thẳng HTML. Có ưu và nhược điểm để làm theo cách này. Tôi thích nó tốt hơn so với việc lặp lại nội dung. Các tùy chọn khác sẽ là hiển thị các khung nhìn mới vào các vùng đó dựa trên các kết quả của câu lệnh if. Rất nhiều khả năng, nhưng ở trên chỉ là một cách để làm cho một chút sạch hơn và (tôi nghĩ) tốt hơn.

+0

Chết tiệt đánh tôi! –

+0

Cảm ơn, điều này trông giống như một cách sạch sẽ tốt đẹp để làm việc. Tôi đã có các trang khác mà echo HTML và nó được khá lộn xộn và thẻ để đọc ở lần. – james246

+0

* khó đọc;) – james246

5

Tại sao không viết nó như thế này?

<?php if($_SESSION['loggedIn'] == 1): ?> 
    <div id='main'>MAIN MENU stuff goes here</div> 
<?php else: ?> 
    <div id='main'>Please login...</div> 
<?php endif; ?> 

Sử dụng mã số alternative control structures tách biệt mã của bạn thêm một chút nữa.

3
<?php if (condition) { ?> 
    <div> 
     some stuff 
    </div> 
<?php } ?> 

Vẻ đẹp của PHP là bạn có thể làm điều này.

+0

Không thực sự cụ thể về PHP .. –

6

Không có gì sai với echo cho html, khi được sử dụng ở mức vừa phải. Chỉ cần không sử dụng nó cho các khối nhiều dòng dài. Bạn sẽ luôn luôn kết thúc với một số cấu trúc xấu xí đòi hỏi phải thoát và điều gì đó, mà làm cho mọi thứ thậm chí xấu hơn để đọc.

Nếu html bạn xuất ra là "tĩnh" (không có biến để chèn), sau đó xem xét vi phạm OUT của chế độ php (?>) và chỉ đơn giản là đổ html như là. Nếu bạn cần chèn biến, sau đó xem xét sử dụng HEREDOC, hoạt động giống như chuỗi được trích dẫn kép, nhưng không có dấu ngoặc kép.

0

Một số người coi đó là hành vi xấu, điều đó đúng với bất cứ điều gì. Tôi không thích dùng tiếng vọng. Nếu bạn làm theo cách này thì rõ ràng hơn đối với các biên tập viên như Dreamweaver những gì bạn muốn và nhận được tất cả các lợi ích tự động hoàn thành.

<?php 
if ($loggedin) 
{ 
?> 
Thank you for being logged in. <hr> 
<?php 
} 
else 
{ 
?> 
Please <a href='login.php'>login</a> 
<?php 
} 
?> 
+0

+1 để đề cập đến tự động hoàn tất. Tôi đã sửa đổi bài viết của bạn một chút để làm rõ mọi thứ một chút. –

1

Không có 'thực hành tốt nhất' thực sự, mặc dù một số sẽ cho rằng họ thích cái này hay cái kia. Lý tưởng nhất là nếu bạn tách HTML khỏi PHP, bạn đang cô lập phần phụ trợ của ứng dụng của bạn từ giao diện người dùng, do đó làm cho việc đọc, sửa đổi và duy trì dễ dàng hơn.

Đối với mã của bạn, tôi có thể sửa đổi nó để nó ngắn gọn hơn (tùy thuộc vào ý của bạn là gì ..."Tôi muốn xem xét lại chỉnh sửa này):

<div id="main"> 
    <?= ($_SESSION['loggedIn'] == 1) ? 'MAIN MENU stuff goes here' : 'Please login...'; ?> 
</div> 
2

Nếu dự án của bạn được đến một kích thước hợp lý, có cơ bản không có cách nào xung quanh một tách sạch các yếu tố presentational và logic chương trình, chỉ vì lợi ích của bảo trì và khả năng mở rộng. Vì vậy, những gì bạn đang làm trong mã hiện tại của bạn không thực sự quan trọng; về lâu dài, bạn nên xem xét cách tiếp cận thiết kế rõ ràng ngay từ đầu.

Có nhiều giải pháp hiện có, thường liên quan đến một số loại mẫu bố cục được tải bởi mã.

Các vấn đề liên quan