web-dev-qa-db-fra.com

Définir le titre de la page en utilisant PHP

Je souhaite définir le titre de ma page Web sur Ultan.me - Quel que soit le titre de la publication . Je veux qu'il affiche le titre de l'article. Les articles sont soumis à une base de données MySQL et la ligne de titre s’appelle "titre". Toute aide est appréciée avec cette petite question.

Mettre à jour:

Voici la page elle-même maintenant mais elle n’affiche pas le titre. Dois-je ouvrir le document php et me connecter à ma base de données à un endroit différent de ses emplacements actuels?

Le code (la seule pièce nécessaire est le début):

<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>
?>
6
user319815

Voici la méthode que j'utilise (pour des choses similaires, pas seulement pour le titre):

<?
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 fonctionne généralement en exécutant n'importe quel morceau de code et en imprimant toutes les sorties directement sur le navigateur. Si vous dites "echo 'Some text here.';", cette chaîne sera envoyée au navigateur et sera vidée de la mémoire.

La mise en mémoire tampon de la sortie dit "Imprimez toutes les sorties dans une mémoire tampon. Tenez-vous-en. N'envoyez rien au navigateur jusqu'à ce que je vous le dise."

Ainsi, cela met en mémoire tampon le code HTML de toutes vos pages dans le tampon, puis à la fin, après la balise, il utilise ob_get_contents () pour obtenir le contenu du tampon (qui est généralement tout le code source HTML de votre page qui ont déjà été envoyés au navigateur) et les met dans une chaîne.

ob_end_clean () vide le tampon et libère de la mémoire. Nous n'avons plus besoin du code source car nous l'avons simplement stocké dans $ pageContents.

Enfin, je fais une simple recherche et remplacement sur le code source de votre page ($ pageContents) pour toutes les occurrences de '' et les remplace par la valeur définie pour la variable $ pageTitle. Bien sûr, il va alors remplacer <title><!--TITLE--></title> par le titre de votre page. Après cela, je répète les $ pageContents, exactement comme le ferait le navigateur.

Il conserve efficacement la sortie afin que vous puissiez le manipuler avant de l'envoyer au navigateur.

J'espère que mes commentaires sont assez clairs. Recherchez ob_start () dans le manuel php ( http://php.net/ob_start ) si vous voulez savoir exactement comment cela fonctionne (et vous devriez le faire) :)

23
Mayur Shah

Vous analysez le champ de la base de données comme d'habitude.

Ensuite, disons que vous le mettez dans une variable appelée $title, vous venez

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

MODIFIER:

Je vois ton problème. Vous devez définir $title AVANT de l’utiliser. C'est-à-dire que vous devriez interroger la base de données avant le <title>...

7

Déplacez la récupération de données en haut du script, puis utilisez:

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

créez une nouvelle page php et ajoutez ce code:

<?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;
}
?>

dans <head> ajouter le code: <?php require 'page.php' ?> et sur chaque page, vous appelez la fonction ch_title('my title');

2
Sterica Capatina

Qu'en est-il d'utiliser quelque chose comme:

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

header.php la balise de titre est définie sur <title>%TITLE%</title>; les "%" sont importants car presque personne ne tape% TITLE% afin que vous puissiez l'utiliser ultérieurement pour str_replace (). alors, vous utilisez un tampon de sortie comme si

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

Pour plus de référence, cliquez sur PHP - comment changer le titre de la page APRES y compris header.php?

2
Nana Partykar

Vous devez définir la valeur de $title avant de l’échanger.

En outre, vous devez vraiment nettoyer toutes les données avant de les utiliser dans les requêtes car cela constitue un risque pour la sécurité.

2
Andres Lowrie

Il sera difficile de réorganiser votre code pour que cela fonctionne, mais je vais essayer :)

Alors, mettez ceci en haut de votre code:

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

Le haut du fichier devrait ressembler à:

<?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>

Créez ensuite un fichier nommé mysql.php dans le même répertoire que le fichier contenant le code que vous avez cité.

Mettez ceci est 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);

?>

Eh bien, espérons que cela a aidé :)

1
user179169

Je sais que ceci est un vieux post, mais après avoir lu ceci, je pense que cette solution est beaucoup plus simple (même si, techniquement, elle résout le problème avec Javascript et 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>";
    ?>
1
Martin

Le problème est que $title est référencé sur la ligne 5 avant d'être attribué à la ligne 58. Réorganiser votre code n'est pas chose facile, car les données sont à la fois extraites et extraites. Juste pour tester, comment quelque chose comme cela fonctionne-t-il?

Comme vous ne récupérez qu'une seule ligne, vous n'avez pas besoin d'utiliser une boucle while, mais je l'ai laissée dans l'espoir que cela vous facilitera la tâche pour vous relier à votre code actuel. Tout ce que j'ai fait est de supprimer la sortie réelle de votre récupération de données et d'ajouter des variables pour la catégorie et le nom de la catégorie, qui seront ensuite référencées comme d'habitude. De plus, je n'ai pas testé cela. :)

1
nilved
<?php echo APP_TITLE?> - <?php echo $page_title;?> 

cela devrait marcher pour vous

0
MaidBoggle

si vous voulez utiliser le nom de fichier du script comme balise de titre

inclure la fonction dans votre projet

function setTitle($requestUri)
         {
            $explodeRequestUri = explode("/", $requestUri);
            $currentFileName = end($explodeRequestUri);
            $withoutExt = preg_replace('/\\.[^.\\s]{3,4}$/', '', $currentFileName);
            $explodeCurrentFileName = explode("-", $withoutExt);
            foreach ($explodeCurrentFileName as $curFileValue) 
            {
               $fileArrayName[] = ucfirst($curFileValue);
            }
            echo implode(" ", $fileArrayName);

         }

et dans votre html inclure le script de fonction et remplacer votre balise de titre avec cette

<title>Your Project Name -
            <?php setTitle($_SERVER['REQUEST_URI']); ?>
        </title>

cela fonctionne sur php7 et plus mais je n'ai aucune idée de php 5. * J'espère que ça aide

0
Manojkiran.A