【问题标题】:php won't work in head of the htmlphp 不能在 html 的头部工作
【发布时间】:2013-11-12 20:34:00
【问题描述】:

我有一个 header.php 和一个 home.php。

我正在尝试将标题和描述从 home.php 传递到 header.php。 问题出在我的 header.php 中,在 dom 中:没有看到我的 php 变量,或者 php 仅在我的 html 头部无法工作,而它在正文中工作正常。

有什么建议吗?

这是我的文件: header.php:

<?php session_start(); 
    header('Content-type: text/html; charset=utf-8');

    function sendPageInfo($title, $desc){
    if($title)
        $pageTitle= $title;
    if($desc)
        $description = $desc; 

    echo $pageTitle;
    }
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <title><?php echo $pageTitle; ?></title> //the $pageTitle won't show up!!!
    <meta charset="UTF-8">
    <meta name ="description" content=" <?php echo $description; ?> "> //$description won't show
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">

    <link rel="stylesheet" href="css/menu.css"/>
    <link rel="stylesheet" type="text/css" href="css/pages.css" />
    <link rel="shortcut icon" href="images/favicon.ico" />
    <link href="css/lightbox.css" rel="stylesheet" />

</head>
<body>
<section class="bodyWrap"> 
<?php echo $pageTitle; ?> //// PAGE TITLE DOES SHOW UP!!!!!!!!!!!
    <section class="headerNav">
        <div class="logo">

        </div>
        <nav class="tpMenu shdw">
            <ul>
                <li><a href="home.php">Home</a></li>
                <li><a class="events" href="events.php">Events</a></li>
                <li><a class="press" href="pressNotes.php">Press</a></li>
                <li><a class="media" href="eventsalbum.php">Media</a></li>
                <li><a class="about" href="about.php">Our Vision</a></li>
                <li><a class="contact" href="contact.php">Contact Us</a></li>
<!--This is where you add memeber.php if the user is signed in-->
                 <?php
                  if(!isset($_SESSION['username']))
                  {
                  echo "<li><a href=\"MemberLogin.php\"> Login</a></li>";
                  }
                  ?>
                 <?php
                  if(isset($_SESSION['username']))
                  {
                    echo "Welcome! &nbsp;";
                    echo $_SESSION['username'];
                    echo "&nbsp;&nbsp;&nbsp;&nbsp;";
                    echo "<li><a href=\"logout.php\">Log out</a></li>";
                  }
                  ?>
                  </li>
          </ul>
        </nav>
    </section>

home.php:

<?php include_once("includes/header.php");
    sendPageInfo('Troy Telugu Association Home', 'A Nonprofit organization fouced on South Indian culture in Troy, Michigan'); 
?>

<?php include_once("addHomeContentAlbum.php");?>

<?php include_once("includes/footer.php");?>

【问题讨论】:

    标签: php html


    【解决方案1】:

    函数sendPageInfo 永远不会被调用,也不会修改任何全局变量。它只创建新的函数局部变量。

    【讨论】:

    • sendPageInfo 被调用,你的回答并没有解决真正的问题
    • 真正的问题是$pageTitle$description 是永远不会设置的全局变量,即使您在访问它们之前调用了函数。
    • 您的答案仍然不正确。该函数被调用。它使用本地变量还是全局变量也没关系,因为 PHP 不能按照他尝试使用它的方式工作(他期望这里没有使用的引用或后期绑定)。更不用说,因为该函数是在 header.php 中定义的,它立即回显,这意味着在包含 header.php 之前永远不能调用该函数。
    • 函数肯定是开始调用的,因为我得到了我体内的变量。我仍然很困惑为什么它只出现在我的html的正文中而不出现在我的html的头部?
    • 它出现在正文中是因为您在函数中回显。它应该正好出现在标题之后,因为这是您调用函数的地方。
    【解决方案2】:

    直到include_once("includes/header.php") 之后,您才调用sendPageInfo()。因此,在包含标头时,$pageTitle 未定义。

    确实显示的$pageTitle 是您在sendPageInfo() 中回显的那个。

    【讨论】:

    • (另外,正如 knittl 所指出的,如果您希望它修改全局变量,则需要在 sendPageInfo() 中声明 global $pageTitle。)
    • 那么我应该把我的函数放在哪里呢?在我调用 include_one("includes/header.php"); 之前我不能说它;
    • 我会在home.php 之前将$pageTitle = 'Troy Telugu Association Home' 放在include_once("includes/header.php") 之前。
    【解决方案3】:

    PHP 变量的工作方式与您使用它们的方式不同。

    当您包含标题时,您的 html 将立即创建并根据您是否使用缓冲区来回显或缓冲。

    此时,您的 pageTitle 是未定义的,因此不会有任何回显。

    您的函数将永远无法更改页面标题,因为它在被调用时已经被回显(PHP 变量在这里无法按照您的意愿工作,尽管一些模板引擎可以完成您正在尝试做的事情有参考)。

    尝试在包含标题之前直接设置页面标题,而不是使用您的函数。

    【讨论】:

    • 但我不明白,为什么它会在本节的正文中被阅读? head 和 body 在同一个 php 文档中。
    【解决方案4】:

    其他人回答了为什么它不起作用(这些变量在函数之外不存在)。不用到处乱搞全局变量,只需在 home.php 中执行此操作:

    <?php
    $pageTitle   = 'Troy Telugu Association Home';
    $description = 'A Nonprofit organization fouced on South Indian culture in Troy, Michigan';
    include_once("includes/header.php");
    

    【讨论】:

    • 我希望它非常模块化,我不能在 home.php 中这样做。我有许多其他页面和网站需要传递不同的标题和描述。我还需要检查标题是否没有通过,分配一个默认标题。
    • 这不是模块化的。你已经在做这个 `sendPageInfo('Troy Telugu Association Home', '一个专注于密歇根州特洛伊南印度文化的非营利组织');'在 home.php 中,有什么区别?
    • 那么最好检查我的 header.php 是否存在标题或分配一个默认值?
    【解决方案5】:

    查看 incl.php:

    <?php
    function write_head($title, $descr){
       echo "<head>\n";
       echo "   <title>$title</title>\n";
       echo "   <meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\">\n";
       echo "   <meta name =\"description\" content=\"$descr\">\n";
       echo "</head>\n";
    }//write_head
    ?>
    

    和 index.php:

    <html>
    <?php
       include_once("incl.php");
       write_head('Troy Telugu Association Home', 'A Nonprofit organization fouced on South Indian culture in Troy, Michigan');
    ?>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
    <body>
    <h1>Stackoverflow is cool</h1>
    </body>
    </html>
    

    这是您尝试的简化版本,并且可以正常工作。
    您对“//// PAGE TITLE DOES SHOW UP!!!!!!!!!!!!”行的结果感到困惑。
    但我认为你错了。
    显示的标题来自以下行:
    " 回声 $pageTitle;"

    "函数 sendPageInfo($title, $desc){"

    正如其他海报所提到的,$pageTitle 仅在“sendPageInfo”中有效。您在其范围之外使用它。它不是全局可见的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-03
      • 2012-08-29
      • 1970-01-01
      • 2013-06-29
      • 1970-01-01
      • 2014-04-21
      • 2019-05-18
      相关资源
      最近更新 更多