【问题标题】:PHP dynamic titlePHP动态标题
【发布时间】:2013-07-23 20:19:47
【问题描述】:

我希望用户能够动态更改网站的标题。

我已经尝试了 Stackoverflow 上的所有动态网站标题问题,但没有一个能解决我的问题。

这是我的 HTML

<fieldset>
    <legend style='width:500px;'><h3>Website Title</h3></legend>
    <label><h4> Change Website Title </h4></label>
    <form action='Config.php' method='POST'>
    <input type='text' name='websitetitle' placeholder='Website Title'/> <br />
    <input type='submit' value='Update' class='btn btn-small btn-primary' name='update'>
    </form>
  </fieldset>

Config.php

   <?php
if(isset($_REQUEST['update'])) {
$title=strip_tags(stripslashes($_REQUEST['websitetitle']));
}

Global.php(标题所在的位置)

 <title><?php include 'Config.php'; echo $title; ?> </title>

提前致谢!

【问题讨论】:

  • 是否需要保存标题以备后用?
  • 你还没有说明你的问题是什么。您刚刚发布了代码。
  • 标题输出的代码在哪里?
  • 哪里失败了?从$_REQUEST['websitetitle'] 中提取的值是否成功?它是否成功发布到服务器?
  • 把标题放到$_SESSION.

标签: php dynamic web title


【解决方案1】:

看起来您的变量 websitetitle 位于 $_REQUEST 错误 ???因为我不“相信”你可以传递“提交”的值。

<fieldset>
<legend style='width:500px;'><h3>Website Title</h3></legend>
<label><h4> Change Website Title </h4></label>
<form action='Config.php' method='POST'>
<input type='text' name='websitetitle' placeholder='Website Title'/> <br />
<input type='submit' value='Update' class='btn btn-small btn-primary' name='update'>
</form>
</fieldset>

然后

<?php
if(isset($_REQUEST['websitetitle'])) {
$title=strip_tags(stripslashes($_REQUEST['websitetitle']));
}

然后

<title><?php include 'Config.php'; echo $title; ?> </title>

【讨论】:

  • 在他点击提交(命名为更新)的情况下,将有一个名为 $_REQUEST['update'] 的变量,他可以检查该变量是否存在。更合适的方法是将请求方法验证为 POST 和/或验证他想要使用的变量是否存在并具有他期望的值。
  • 此外,您的代码仍然遇到与他相同的问题。您必须在页面之间传输值并使它们保持不变。 Config.php 仅在收到$_REQUEST['websitetitle'] 并将其设置为该值时才设置标题。当您包含 Config.php 时,它基本上不会包含任何内容,因此当您尝试 echo $title; 时,您正在回显一个不存在的变量。
【解决方案2】:

上面的答案看起来不错,但我会使用 php 会话。您可以摆脱 global.php 并将 config.php 更改为

<?php 
    if (issest($_REQUEST['websitetitle'])) {
        $_SESSION['title'] = $_REQUEST['websitetitle'];
    }
?>

然后将$_SESSION['title'] 放置在您需要动态标题的位置。 此外,请务必在文档的最顶部添加session_start();

【讨论】:

    【解决方案3】:
    <?php
        // config.php
        if(isset($_POST['update'])) {
            $title=strip_tags(stripslashes($_POST['websitetitle']));
        }
    ?>
    
     <title><?php require_once('Config.php'); echo $title; ?> </title>
    
    <fieldset>
        <legend style='width:500px;'><h3>Website Title</h3></legend>
        <label><h4> Change Website Title </h4></label>
        <form method='POST'>
        <input type='text' name='websitetitle' placeholder='Website Title'/> <br />
        <input type='submit' value='Update' class='btn btn-small btn-primary' name='update'>
        </form>
      </fieldset>
    

    您所做的是在提交表单后将您的用户重定向到 config.php。 你要做的是重新加载你的实际页面,然后让包含的脚本在设置标题标签之前做它应该做的事情。

    【讨论】:

      【解决方案4】:

      您没有在任何代码中保存值以供以后重新迭代。每次您的浏览器加载新页面时,它都会忘记您没有明确告诉它保留的所有内容。

      您可以将信息写入数据库、文件、cookie 或会话。

      以会话为例:

      <?php
      
      $title = ( isset($_SESSION) && isset($_SESSION['title']) ) ? $_SESSION['title'] : 'Original, unaltered page title here';
      
      ?>
      <!DOCTYPE html>
      <html>
        <head>
          <title><?php echo $title; ?></title>
        </head>
      

      接收表单的页面:

      <?php
      
      if ( isset($_REQUEST['websitetitle']) && !empty($_REQUEST['websitetitle']) )
      {
        if ( !isset($_SESSION) ) session_start();
        $_SESSION['title'] = $_REQUEST['websitetitle'];
      }
      

      !isset($_SESSION) 条件变为session_start(); 的原因是,如果您在已经存在活动会话时调用session_start(),则会引发错误。如果您使用的是配置正确的生产系统,则此错误将隐藏在站点外的日志文件中,但仍会在那里用毫无意义的警告填充您的日志文件。可以将 PHP 配置为自动生成会话,从而使我们的调用 session_start() 也毫无意义。

      在我的示例中,除非该人提交表单,否则我不会开始会话。您不需要为爬过您的页面的每个汤姆、迪克、哈利和机器人建立一个会话。你只需要那些点击“更新”的会话。

      请记住,如果您希望网站标题永久更改和/或所有用户都更改,那么会话不是正确答案。会话是服务器和客户端之间的专有信息存储。如果我将网站标题更改为“Hello World!”然后我会看到“Hello World!”在我的会话期间,但你不会。

      【讨论】:

        猜你喜欢
        • 2021-10-12
        • 1970-01-01
        • 2011-05-02
        • 2011-05-16
        • 2018-09-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多