2010-08-11 10 views
5

Tôi muốn đặt tiêu đề trang web của mình là Ultan.me - Dù tiêu đề bài đăng là. Tôi muốn nó hiển thị tiêu đề bài viết. Các bài đăng được gửi đến cơ sở dữ liệu MySQL và hàng tiêu đề được gọi là "tiêu đề". Bất kỳ trợ giúp nào được đánh giá cao với câu hỏi nhỏ này.Đặt tiêu đề trang bằng cách sử dụng PHP

Cập nhật:

Đây là trang hiện tại nhưng không hiển thị tiêu đề. Tôi có nên mở tài liệu php và kết nối với cơ sở dữ liệu của mình ở đâu đó khác với các vị trí hiện tại không?

Bộ luật (duy nhất mảnh cần thiết là sự khởi đầu):

<html> 
<head> 

<meta name="keywords" content="Mac user Ultan Casey TheCompuGeeks UltanKC"> 
<title>Ultan.me - <?echo $title;?></title> 

<link rel="stylesheet" href="css/styles.css" type="text/css" /> 
<script type="text/javascript" 
src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js"></script> 
<script type="text/javascript" 
src="js/jquery.labelify.js"></script> 
<script type="text/javascript"> 
$(document).ready(function(){ 
    $(":text").labelify(); 
}); 
</script> 
<style> 
a {text-decoration:none} 

</style> 
</head> 
<body> 
<div id="main"> 

<!-- Menu Start --> 
<div id="menu"> 
<ul> 
<li><a href="index.php">home</a></li> 
<li><a href="index.php">about me</a></li> 
<li><a href="index.php">archives</a></li> 
<li><a href="index.php">contact</a></li> 
<li><a href="index.php">gallery</a></li> 

</ul> 
</div> 
<!-- Menu End --> 

<img src="images/banner.png" /> 
<div id="content"> 
<div id="posts"> 
<?php 
mysql_connect ('localhost', 'root', 'root') ; 
mysql_select_db ('ultankc'); 

if (!isset($_GET['id']) || !is_numeric($_GET['id'])) { 
    die("Invalid ID specified."); 
} 

$id = (int)$_GET['id']; 
$sql = "SELECT * FROM php_blog WHERE id='$id' LIMIT 1"; 

$result = mysql_query($sql) or print ("Can't select entry from table php_blog.<br />" . $sql . "<br />" . mysql_error()); 

while($row = mysql_fetch_array($result)) { 

    $date = date("l F d Y", $row['timestamp']); 

    $title = stripslashes($row['title']); 
    $entry = stripslashes($row['entry']); 
    $get_categories = mysql_query("SELECT * FROM php_blog_categories WHERE `category_id` = $row[category]"); 
    $category = mysql_fetch_array($get_categories); 


    ?> 
<p><?php echo "<p id='post-title'><strong><a href=\"post.php?id=". $id . "\">" . $title . "</a></strong></p>"; ?><br /><br /> 
<div id="entry"><?php echo $entry; ?> 
</div><br /><br /> 
<p id="date">Posted in <a href="category.php?category=<?php echo $row['category']; ?>"><?php echo $category['category_name']; ?></a> on <?php echo $date; ?></p> 
</p> 
<h2 id="share-title">Share This Post</h2> 
<div id="social-share"> 
<li id="link-right"><a href="http://twitter.com/home?status= 
I just read <?php echo $title; ?> at http://ultan.me/post.php?id=<?php echo $id; ?>"><center>Twitter</center></a></li> 
<li id="link-left"><a href="http://digg.com/submit?url=http://ultan.me/post.php?id=<?php echo $id; ?>"><center>Digg</center></a></li> 
<br> 
<li id="link-right"><a href="http://www.facebook.com/sharer.php?u=http://ultan.me/post.php?id=<?php echo $id; ?>&t=<?php echo $title; ?>"><center>Facebook</center></a></li> 
<li id="link-left"><a href="http://www.google.com/buzz/post?url=http://ultan.me/post.php?id=<?php echo $id; ?> 
"><center>Google Buzz</center></a></li> 
<div class="clr"></div> 
</div> 
<h2 id="comments-title">Comments</h2> 
<div id="comment-list"> 
    <?php 

} 
$commenttimestamp = strtotime("now"); 

$sql = "SELECT * FROM php_blog_comments WHERE entry='$id' ORDER BY timestamp"; 
$result = mysql_query ($sql) or print ("Can't select comments from table php_blog_comments.<br />" . $sql . "<br />" . mysql_error()); 
while($row = mysql_fetch_array($result)) { 
    $timestamp = date("l F d Y", $row['timestamp']); 
     printf("<div class='comment-ind'><p id='comments'><a id='username' href=\"%s\">%s</a> %s</p>", stripslashes($row['url']), stripslashes($row['name']), $timestamp); 
    print("<p class='comments'>" . stripslashes($row['comment']) . "</p><div class='clr'><br></div></div>"); 

    } 
?> 
<div class="clr"></div> 
<form id="commentform" method="post" action="process.php"> 

<p><input type="hidden" name="entry" id="entry" value="<?php echo $id; ?>" /> 

<input type="hidden" name="timestamp" id="timestamp" value="<?php echo $commenttimestamp; ?>"> 

<input type="text" name="name" id="name" title="Name (required)" /><br /> 

<input type="text" name="email" id="email" title="Mail (will not be published) (required)" /><br /> 

<input type="text" name="url" id="url" title="Website" value="http://" /><br /> 

<br /> 
<textarea title="Your Comment Goes Here" name="comment" id="comment"></textarea></p> 

<p><input type="submit" name="submit_comment" id="submit_comment" value="Add Comment" /></p> 

</form> 
</div> 
<div id="pages"> 

<?php 
$total_results = mysql_fetch_array(mysql_query("SELECT COUNT(*) AS num FROM php_blog")); 
$total_pages = ceil($total_results['num']/$blog_postnumber); 
if ($page > 1) { 
    $prev = ($page - 1); 
    echo "<a href=\"?page=$prev\">&lt;&lt; Newer</a> "; 
} 
for($i = 1; $i <= $total_pages; $i++) { 
    if ($page == $i) { 
     echo "$i "; 
    } 
    else { 
     echo "<a href=\"?page=$i\">$i</a> "; 
    } 
} 
if ($page < $total_pages) { 
    $next = ($page + 1); 
    echo "<a href=\"?page=$next\">Older &gt;&gt;</a>"; 
} 

?> 
</div> 
</div> 
</div> 
<!-- Sidebar Start --> 
<div class="sidebar"> 

<!-- Item 1 --> 
<div id="side-item"> 
<h2> 
<a href="http://www.dailybooth.com/UltanCasey"> 
<img src="images/db-icon.jpg">Dailybooth 
</a></h2> 
<div id="side-item-content"> 
<center> 
<img src="http://dailybooth.com/UltanCasey/latest/medium.jpg" /> 
</center> 
</div> 

</div> 

<!-- Item 2 --> 

<div id="side-item"> 
<h2><img src="images/connect.jpg" />Connect</h2> 
</div> 
<div id="side-item-content"> 
<div class="tweet-title"><p><a href="http://www.twitter.com/UltanKc">Latest Tweet:</a></p></div> 
<div id="tweet"> 
<?php 

function getTwitterStatus($userid){ 
$url = "http://twitter.com/statuses/user_timeline/$userid.xml?count=1"; 

function auto_link_twitter ($text) 
{ 
    // properly formatted URLs 
    $urls = "/(((http[s]?:\/\/)|(www\.))?(([a-z][-a-z0-9]+\.)?[a-z][-a-z0-9]+\.[a-z]+(\.[a-z]{2,2})?)\/?[a-z0-9._\/~#&=;%+?-]+[a-z0-9\/#=?]{1,1})/is"; 
    $text = preg_replace($urls, " <a href='$1'>$1</a>", $text); 

    // URLs without protocols 
    $text = preg_replace("/href=\"www/", "href=\"http://www", $text); 

    // Twitter usernames 
    $twitter = "/@([A-Za-z0-9_]+)/is"; 
    $text = preg_replace ($twitter, " <a href='http://twitter.com/$1'>@$1</a>", $text); 

    // Twitter hashtags 
    $hashtag = "/#([A-Aa-z0-9_-]+)/is"; 
    $text = preg_replace ($hashtag, " <a href='http://hashtags.org/$1'>#$1</a>", $text); 
    return $text; 
} 

$xml = simplexml_load_file($url) or die("could not connect"); 

     foreach($xml->status as $status){ 
     $text = $status->text; 
     } 
     echo auto_link_twitter ($text); 
} 


getTwitterStatus("UltanKC"); 

?> 
</div> 
<br> 
<ul> 
<li id="social"><a href="#">YouTube</a></li> 
<li id="social"><a href="#">Twitter</a></li> 
<li id="social"><a href="#">LastFM</a></li> 
<li id="social"><a href="#">Email</a></li> 
</ul> 

</div> 
<!-- Item 2 End--> 
<div id="side-item"> 
<h2><img src="images/archive.jpg" />Archives</h2> 
</div> 
<div id="archive-side"> 
<?php 
mysql_connect ('localhost', 'root', 'root') ; 
mysql_select_db ('ultankc'); 

$result = mysql_query("SELECT FROM_UNIXTIME(timestamp, '%Y') AS get_year, COUNT(*) AS entries FROM php_blog GROUP BY get_year"); 

while ($row = mysql_fetch_array($result)) { 
    $get_year = $row['get_year']; 
    $entries = $row['entries']; 

    echo "<li id='tag'><a href=\"archives.php?year=" . $get_year . "\">Entries from " . $get_year . " (" . $entries . ")<br /></a></li>"; 
} 

$result1 = mysql_query("SELECT * FROM php_blog_categories ORDER BY category_name ASC"); 

while($row = mysql_fetch_array($result1)) { 

    $result2 = mysql_query("SELECT COUNT(`id`) AS entries FROM php_blog WHERE category = $row[category_id]"); 
    $num_entries = mysql_fetch_array($result2); 

    echo '<li id="tag"><a href="category.php?category=' . $row['category_id'] . '">' . $row['category_name'] . ' (' . $num_entries['entries'] . ')</a></li>'; 

} 
?> 
</div> 

</div> 

<div class="clr" /> 
</div> 
<!-- Sidebar End --> 
<div id="footer"> 
<p> &copy; Ultan Casey 2010</p> 
<p style="margin-top: -18px; float:right"><a href="index.php">Home</a> | <a href="about.php">About Me</a> | <a href="mailto:[email protected]">Email Me</a></p> 
</div> 
</div> 
</div> 
</body> 
</html> 
?> 
+3

1 cho trolling. – Frankie

Trả lời

2

Move việc thu hồi dữ liệu ở phía trên cùng của kịch bản, và sau khi sử dụng mà:

<title>Ultan.me - <?php echo htmlspecialchars($title, ENT_QUOTES, 'UTF-8'); ?></title> 
+0

Bạn quên "Ultan.me" –

+0

Khi tôi thử rằng khu vực sau "Ultan.me -" trống.Tôi đã không mở PHP ngay từ đầu của tài liệu. Tôi có nên không? –

+0

@klez: vậy? anh ta sẽ tự nghĩ ra điều này. – zerkms

7

Bạn phân tích lĩnh vực này từ cơ sở dữ liệu như bình thường.

Sau đó, giả sử bạn đặt nó trong một biến gọi là $title, bạn chỉ

<html> 
<head> 
<title>Ultan.me - <?php echo htmlspecialchars($title);?></title> 
</head> 

EDIT:

Tôi thấy vấn đề của bạn. Bạn phải đặt $title TRƯỚC KHI sử dụng nó. Tức là, bạn nên truy vấn cơ sở dữ liệu trước <title>...

+0

Khi tôi thử rằng khu vực sau "Ultan.me -" trống. Tôi đã không mở PHP ngay từ đầu của tài liệu. Tôi có nên không? –

+6

thẻ ngắn là thực hành kỳ lạ – zerkms

+0

Những gì zerkms đang cố gắng nói, là bạn nên sử dụng Thay vì

1

Sự cố là $title đang được tham chiếu trên dòng 5 trước khi được gán trên dòng 58. Sắp xếp lại mã của bạn không dễ dàng, vì dữ liệu vừa được truy xuất vừa xuất cùng lúc. Chỉ cần kiểm tra, làm cách nào để kiểm tra, làm cách nào để kiểm tra, làm cách nào để kiểm tra, làm cách nào để thử nghiệm, làm cách nào để kiểm tra, làm cách nào để thử nghiệm, làm cách nào để thử nghiệm, làm cách nào để thử nghiệm, làm cách nào để thử nghiệm, làm cách nào để thử nghiệm, làm cách nào để thử nghiệm, làm cách nào để thử nghiệm, làm cách nào để thử nghiệm, làm cách nào để thử nghiệm, làm cách nào để thử nghiệm một hàng, bạn không cần phải sử dụng vòng lặp while, nhưng tôi để nó lại với hy vọng nó sẽ giúp bạn dễ dàng liên hệ với bạn hơn. mã hiện tại. Tất cả những gì tôi đã làm là xóa kết quả đầu ra thực tế khỏi quá trình truy xuất dữ liệu của bạn và thêm các biến cho danh mục và tên danh mục mà sau đó được gọi là thông thường sau này. Ngoài ra, tôi chưa thử nghiệm điều này. :)

1

Nó sẽ được khó khăn để sắp xếp lại mã của bạn để làm cho công việc này, nhưng tôi sẽ cố gắng :)

Vì vậy, đặt này ở phía trên cùng của mã của bạn:

<?php require_once('mysql.php'); ?> 

Các hàng đầu của tập tin sẽ giống như thế:

<?php require_once('mysql.php'); ?> 
<html> 
    <head> 

    <meta name="keywords" content="Mac user Ultan Casey TheCompuGeeks UltanKC"> 
    <title>Ultan.me - <?php echo htmlspecialchars($title); ?> </title> 

Sau đó, tạo một tập tin gọi mysql.php trong cùng thư mục mà tập tin có chứa mã bạn trích dẫn là trong

.

Đặt đây là mysql.php:

<?php 
mysql_connect ('localhost', 'root', 'root'); 
mysql_select_db ('ultankc'); 

if (!isset($_GET['id']) || !is_numeric($_GET['id'])) { 
    die("Invalid ID specified."); 
} 

$id = (int)$_GET['id']; 
$sql = "SELECT * FROM php_blog WHERE id='$id' LIMIT 1"; 

$result = mysql_query($sql) or print ("Can't select entry from table php_blog.<br />" .  $sql . "<br />" . mysql_error()); 

$res = mysql_fetch_assoc($result); 

$date = date("l F d Y", $res['timestamp']); 
$title = $res['title']; 
$entry = $res['entry']; 
$get_categories = mysql_query("SELECT * FROM php_blog_categories WHERE `category_id` = $res['category']"); 
$category = mysql_fetch_array($get_categories); 

?> 

Vâng, hy vọng rằng đã giúp :)

21

Dưới đây là phương pháp tôi sử dụng (đối với những điều tương tự, không chỉ là tiêu đề):

<? 
ob_start(); // Buffer output 
?> 
<!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" xml:lang="en"> 

<head> 
<title><!--TITLE--></title> 
</head> 

<body> 
<? 
$pageTitle = 'Title of Page'; // Call this in your pages' files to define the page title 
?> 
</body> 
</html> 
<? 
$pageContents = ob_get_contents(); // Get all the page's HTML into a string 
ob_end_clean(); // Wipe the buffer 

// Replace <!--TITLE--> with $pageTitle variable contents, and print the HTML 
echo str_replace ('<!--TITLE-->', $pageTitle, $pageContents); 
?> 

PHP thường hoạt động được thực hiện bất kỳ bit mã và in tất cả các đầu ra trực tiếp cho trình duyệt.Nếu bạn nói "echo 'Some text here.';", chuỗi đó sẽ được gửi trình duyệt và được dọn sạch khỏi bộ nhớ.

Việc xuất bộ đệm đầu ra là nói "In tất cả đầu ra vào bộ đệm. Hãy giữ nó. Không gửi bất kỳ thứ gì đến trình duyệt cho đến khi tôi yêu cầu bạn." Vì vậy, điều này làm nó đệm tất cả các trang HTML của bạn vào bộ đệm, sau đó vào cuối, sau thẻ, nó sử dụng ob_get_contents() để lấy nội dung của bộ đệm (thường là tất cả HTML của trang của bạn mã nguồn đã được gửi tới trình duyệt) và đặt nó vào một chuỗi.

ob_end_clean() làm trống bộ đệm và giải phóng bộ nhớ. Chúng ta không cần mã nguồn nữa vì chúng ta vừa lưu nó trong $ pageContents.

Sau đó, cuối cùng, tôi tìm kiếm đơn giản & thay thế mã nguồn của trang của bạn ($ pageContents) cho bất kỳ phiên bản '' nào và thay thế chúng thành bất kỳ biến $ pageTitle nào được đặt thành. Tất nhiên, sau đó nó sẽ thay thế <title><!--TITLE--></title> bằng Tiêu đề của Trang của bạn. Sau đó, tôi lặp lại $ pageContents, giống như trình duyệt sẽ có.

Nó có hiệu quả giữ trên đầu ra để bạn có thể thao tác nó trước khi gửi nó đến trình duyệt.

Hy vọng rằng các nhận xét của tôi đủ rõ ràng. Tra cứu ob_start() trong hướng dẫn sử dụng php (http://php.net/ob_start) nếu bạn muốn biết chính xác cách thức hoạt động (và bạn nên) :)

+1

Vì bạn đang trải qua tất cả những rắc rối này dù sao, tại sao không chỉ đơn giản là sử dụng một động cơ templating, chẳng hạn như Smarty? – Brad

+0

Làm việc như một sự quyến rũ. Cảm ơn –

2

Bạn cần đặt giá trị $title trước khi lặp lại.

Ngoài ra, bạn thực sự cần khử trùng bất kỳ dữ liệu trước khi sử dụng nó trong các truy vấn vì đây là một nguy cơ bảo mật

0
<?php echo APP_TITLE?> - <?php echo $page_title;?> 

này nên làm việc tốt cho bạn

1

Tôi biết đây là một bài cũ nhưng đã đọc điều này tôi nghĩ rằng giải pháp này đơn giản hơn nhiều (mặc dù về mặt kỹ thuật nó giải quyết được vấn đề với Javascript không phải PHP).

<html> 
    <head> 
    <title>Ultan.me - Unset</title> 
    <script type="text/javascript"> 
     function setTitle(text) { 
      document.title = text; 
     } 
    </script> 
    <!-- other head info --> 
    </head> 

    <?php 
    // Make the call to the DB to get the title text. See OP post for example 
    $title_text = "Ultan.me - DB Title"; 

    // Use body onload to set the title of the page 
    print "<body onload=\"setTitle('$title_text')\" >"; 

    // Rest of your code here 
    print "<p>Either use php to print stuff</p>"; 
    ?> 
    <p>or just drop in and out of php</p> 
    <?php 

    // close the html page 
    print "</body></html>"; 
    ?> 
2

header.php có thẻ tiêu đề thiết lập để <title>%TITLE%</title>; các "%" là quan trọng vì hầu như không loại bất cứ ai% TITLE% do đó, u có thể sử dụng cho str_replace() sau đó. Sau đó, bạn sử dụng bộ đệm đầu ra như vậy

<?php 
ob_start(); 
include("header.php"); 
$buffer=ob_get_contents(); 
ob_end_clean(); 
$buffer=str_replace("%TITLE%","NEW TITLE",$buffer); 
echo $buffer; 
?> 

Để tham khảo nhiều hơn, nhấp PHP - how to change title of the page AFTER including header.php?

1

gì về việc sử dụng một cái gì đó như:

<?php 
    $page_title = "Your page tile"; 
    include("navigation.php");    // if required 
    echo("<title>$page_title</title>"); 
?> 
0

tạo php trang mới và thêm mã này:

<?php 
 
function ch_title($title){ 
 
    $output = ob_get_contents(); 
 
    if (ob_get_length() > 0) { ob_end_clean(); } 
 
    $patterns = array("/<title>(.*?)<\/title>/"); 
 
    $replacements = array("<title>$title</title>"); 
 
    $output = preg_replace($patterns, $replacements,$output); 
 
    echo $output; 
 
} 
 
?>

trong <head> add mã: <?php require 'page.php' ?> và trên mỗi trang web mà bạn gọi hàm ch_title('my title');