【问题标题】:Div won't refresh in PHP using include and Javascriptdiv 不会在 PHP 中使用 include 和 Javascript 刷新
【发布时间】:2013-04-10 15:03:24
【问题描述】:

我正在尝试创建登录页面。

现在您只需在 login.php 页面上单击 Login,然后它会向 index.php 发送一个请求,该请求会显示成功登录的消息并更改变量loggedin在会话中用于查看用户是否登录,然后重定向到主页。

现在我的 导航栏 (nav.php) 检查会话变量loggedin 并相应地显示内容,即用户是否登录以及他们是否可以看到我的个人资料链接等...

问题是当登录页面 (login.php) 向 index.php 发送登录页面的请求时,它会进行如下检查:

index.php:

.row, .col { overflow: hidden; position: absolute; }
.row { left: 0; right: 0; }

...

.menu.row { height: 75px; top: 75px; background-color: #EDEDED;  }
...

<div class="menu row">
    <?php 
        include("nav.php"); ?>
</div> 

...

case 'logged_in':
    $_SESSION['loggedin'] = true;   
    print '<script type="text/javascript">'; 
    print 'alert("You have been logged in successfully and will be re-directed to your homepage...")'; 
    print '</script>';
    include('home.html');
    echo '<script type="text/javascript">$(".menu.row").load("index.php");</script>';
break;

如您所见,最后一个 echo 语句尝试更新包含 nav.php 的菜单行 div 类,以反映正在显示的会话变量 loggedin 的更改,但它仅在我单击另一个链接后才显示更改nav.php 页面。

所以基本上我在问为什么我的

echo '<script type="text/javascript">$(".menu.row").load("index.php");</script>';

不刷新包含我的 nav.php 的 div,因此允许 nav.php 执行 PHP 代码以检查变量 loggedin 并采取相应措施?

以下是部分代码:

index.php:

<?php session_start(); ?>
<!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>
        <title>CC Chat</title>
        <meta 
        http-equiv="content-type" content="text/html; charset=utf-8" 
        />
        <!-- 
        Thanks too http://stackoverflow.com/a/7851347/1133011 for the help
        on layout which acts more like frames but avoids them and using divs. As frames have 
        known draw backs see here http://stackoverflow.com/questions/4600648/frames-with-php we
        should thus rather use include in php
        !-->
        <style type="text/css" media="screen">
        /* Generic pane rules */
        body { margin: 0 }
        .row, .col { overflow: hidden; position: absolute; }
        .row { left: 0; right: 0; }
        .col { top: 0; bottom: 0; }
        .scroll-x { overflow-x: auto; }
        .scroll-y { overflow-y: auto; }

        .header.row { height: 75px; top: 0; background-color: #E5E5E5; }
        .menu.row { height: 75px; top: 75px; background-color: #EDEDED;  }
        .body.row { top: 150px; bottom: 50px; background-color: #F5F5F5; }
        .footer.row { height: 75px; bottom: 0; background-color: #EBEBEB; }
        </style>
    </head>
    <body>
        <div class="header row">
        <?php include("header.html"); ?>
        </div> 

        <div class="menu row">
        <?php 
            include("nav.php"); ?>
        </div> 

        <div class="body row scroll-y">
        <?php
            if(isset($_GET['page'])) {
                switch ($_GET['page']) {
                    case 'login':
                        include('login.php');
                    break;
                    case 'logged_in':
                        $_SESSION['loggedin'] = true;   
                        print '<script type="text/javascript">'; 
                        print 'alert("You have been logged in successfully and will be re-directed to your homepage...")'; 
                        print '</script>';
                        include('home.html');
                        echo '<script type="text/javascript">$(".menu.row").load("index.php");</script>';
                    break;
                    case 'log_out':
                        $_SESSION['loggedin'] = false;
                        include('loggedout.html');
                    break;
                    case 'profile':
                        include('profile.php');
                    break;
                    case 'contact_us':
                        include('contact.html');
                    break;
                    default:
                    include('home.html');
                    break;
                }
            } else
                include('home.html'); 
        ?>
        </div> 

        <div class="footer row">
        <?php include("footer.php"); ?>
        </div>
    </body>
</html>

nav.php:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>Navigator</title>
        <meta
        http-equiv="content-type"
        content="text/html; charset=iso-8859-1"
        />
    </head>

    <body>
            <p align="center">
                <?php 
                    if(isset($_SESSION['loggedin'])) {
                        switch ($_SESSION['loggedin']) {
                            case true:
                                echo "<a href=\"index.php?page=home\">Home</a> <a href=\"index.php?page=contact_us\">Contact Us</a> <a href=\"index.php?page=profile\">My profile</a> <a href=\"index.php?page=log_out\">Log out</a>";
                            break;
                            default:
                                echo "<a href=\"index.php?page=home\">Home</a> <a href=\"index.php?page=contact_us\">Contact Us</a> <a href=\"index.php?page=login\">Login</a>";
                            break;
                        }
                    } else {
                        echo "<a href=\"index.php?page=home\">Home</a> <a href=\"index.php?page=contact_us\">Contact Us</a> <a href=\"index.php?page=login\">Login</a>";
                    }
                ?>  
            </p>
    </body>

</html>

登录.php:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

    <head>
        <title>Login</title>
        <meta http-equiv="content-type"
        content="text/html; charset=iso-8859-1"
        />
    </head>

    <body>
        <h2 align="center">Login</h2>
        <p align="center">
            <?php 
                $var=true;//user password was correct
                if($var==true){
                    echo '<a href="index.php?page=logged_in">Login</a>';
                } else {
                    print '<script type="text/javascript">'; 
                    print 'alert("Password is incorrect.")'; 
                    print '</script>';
                }
            ?> 
        </p>
    </body>

</html>

【问题讨论】:

  • 你在 echo '&lt;script type="text/javascript"&gt;$(".menu.row").load("index.php");&lt;/script&gt;'; 中使用 jQuery,但是 jQuery 是在哪里加载的?
  • @j08691 是 JQuery 吗?击败我,我从另一个答案中得到它,所以现在找不到它来链接它,但这就是 OP 在include(..) 之后标记为在 php 中引用 div 的答案......
  • 是的,那是 jQuery,如果你不包括 jQuery,那么它就不会做任何事情。
  • 好的,但是我看到我有text/javascript" 我尝试更改为echo '&lt;script type="text/jquery"&gt;$(".menu.row").load("index.php");&lt;/script&gt;'; 但在我按下登录后仍然没有效果我仍然需要单击nav.php 上的链接才能刷新跨度>
  • jQuery 是一个 javascript 库,它不是自己的语言。

标签: php html


【解决方案1】:

好的,但我看到我有 text/javascript" 我尝试更改为 echo cript type=text/jquery">$(".menu.row").load("index.php");;但是按下登录后仍然没有效果我仍然需要单击 nav.php 上的链接才能刷新 – David Kroukamp 4 分钟前

恐怕我无法制作 cmets,所以必须使用答案。将类型更改为 text/jquery 将不起作用。在调用 jQuery 之前包括以下内容......

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

并将您的脚本类型保留为 text/javascript

您也可以下载最新的 jquery.min.js 并将其链接到您自己的服务器上,而不是链接到 googleapis.com

更新

目前您正在包含 nav.php 并设置会话变量。这就是页面加载后点击 nav.php 的原因。

case 'logged_in':
                        $_SESSION['loggedin'] = true;  

以上需要在之前设置

include('nav.php');

【讨论】:

  • 感谢这现在已经工作了一半,但现在不知何故我的页脚正在取代我的导航栏????并且代码仍然是我发布的
  • 将 echo 更改为:echo '
  • 在我点击 nav.php 之前,一切都保持不变
  • 问题是 include('nav.php') 在 $_SESSION['logged_in'] 变量设置为 true 之前被执行
  • 我该如何解决这个问题?
【解决方案2】:

在 nav.php 中试试这个:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>Navigator</title>
        <meta
        http-equiv="content-type"
        content="text/html; charset=iso-8859-1"
        />
    </head>

    <body>
            <p align="center">
                <?php 
                    if(isset($_GET) && isset($_GET['page'])) {
                        if($_GET['page'] == 'logged_in') {
                            echo "<a href=\"index.php?page=home\">Home</a> <a href=\"index.php?page=contact_us\">Contact Us</a> <a href=\"index.php?page=profile\">My profile</a> <a href=\"index.php?page=log_out\">Log out</a>";
                        } else {
                            echo "<a href=\"index.php?page=home\">Home</a> <a href=\"index.php?page=contact_us\">Contact Us</a> <a href=\"index.php?page=login\">Login</a>";
                        }
                    } else {
                        echo "<a href=\"index.php?page=home\">Home</a> <a href=\"index.php?page=contact_us\">Contact Us</a> <a href=\"index.php?page=login\">Login</a>";
                    }
                ?>  
            </p>
    </body>

</html>

Switch 语句很棘手,所以我倾向于避开它们。您最初的错误是引用变量 $_SESSION['logged_in'] 而不是 $_SESSION['page']

【讨论】:

  • 我让它在我的沙箱中工作。复制并粘贴您帖子中的所有内容。编辑了我的帖子以包含完整的代码。
  • 哦,非常好,它几乎可以工作了,但现在它让我进入并显示我已登录,但如果我点击另一个链接,它会回到好像我没有登录一样......我想这就是侧面检查页面的效果?
【解决方案3】:

JavaScript 库是某人编写的一组代码,用于为您提供某些功能。它不是自己独立的语言。所以你的type 应该仍然是text/javascript。但是您需要在页面上包含该库。您可以从http://jquery.com/download/ 下载它,也可以使用托管版本,如下所示:

<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>

如果您愿意,也可以使用 Google 的 CDN:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

更新:

nav.php 看起来像是包含整个 HTML 文档。您将其插入到另一个 HTML 文档中的 div 中。您应该修改 nav.php 以仅包含您想要进入 div 的内容(可能只是 &lt;p&gt; 标记的内容。

此外,您似乎不是在 nav.php 中启动 PHP 会话。所以它不能访问$_SESSION 变量。确保您在nav.php 中致电session_start();

【讨论】:

  • 调用$(".menu.row").load("index.php"); 将用menurow 类替换元素的内容index.php。所以听起来index.php的内容是你的页脚,或者你的所有页面,只有div的底部(页脚)显示在div中。也许您打算加载 nav.php 而不是 index.php
  • 嗯,谢谢你,我从来不知道我现在将 index.php 更改为 nav.php,因为这就是我想要刷新的内容,但没有区别,除了我的页脚不再替换 nav.php 页面
  • 看起来有一些问题。我会更新我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-15
  • 2014-03-08
  • 2020-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多