可以';我不知道是什么;我的PHP代码有问题


Can't figure out what's wrong with my PHP code

我现在正在设置一个管理页面(admin.php)。

当页面最初被访问时,一个登录框会正确出现,用户可以点击"登录"按钮。

当他们点击"登录"按钮时,登录表单会被提交到带有以下代码的PHP页面(我现在没有任何身份验证,只是开始进行此设置):

<?php
   session_start();  
   $_SESSION['login_success'] = true;
   header('Location:http://localhost/mbc/admin');
   exit();  
?>

然后,我希望admin.php页面会显示管理表单,但重定向后页面会显示为空白。以下是admin.php页面的适用部分。你们中的任何人都能看到我在这里做错了什么,以至于在身份验证完成后,管理表单没有显示吗?

<html> 
    <head>
        <title>Welcome Home!</title>
        <link href="style.css" rel="stylesheet" type="text/css" />
        <link href="layout.css" rel="stylesheet" type="text/css" />
        <script type="text/javascript" src="jquery.min.js"></script>
        <style>
            /* Mask for background, by default is not display */
            #mask {
                display: none;
                background: #000; 
                position: fixed; left: 0; top: 0; 
                z-index: 10;
                width: 100%; height: 100%;
                opacity: 0.8;
                z-index: 999;
            }
            /* You can customize to your needs  */
            .login-popup{
                display:none;
                background: #333;
                padding: 10px;  
                border: 2px solid #ddd;
                float: left;
                font-size: 1.2em;
                position: fixed;
                top: 50%; left: 50%;
                z-index: 99999;
                box-shadow: 0px 0px 20px #999; /* CSS3 */
                -moz-box-shadow: 0px 0px 20px #999; /* Firefox */
                -webkit-box-shadow: 0px 0px 20px #999; /* Safari, Chrome */
                border-radius:3px 3px 3px 3px;
                -moz-border-radius: 3px; /* Firefox */
                -webkit-border-radius: 3px; /* Safari, Chrome */
            }
            img.btn_close { Position the close button
                float: right; 
                margin: -28px -28px 0 0;
            }
            fieldset { 
                border:none; 
            }
            form.signin .textbox label { 
                display:block; 
                padding-bottom:7px; 
            }
            form.signin .textbox span { 
                display:block;
            }
            form.signin p, form.signin span { 
                color:#999; 
                font-size:11px; 
                line-height:18px;
            } 
            form.signin .textbox input { 
                background:#666666; 
                border-bottom:1px solid #333;
                border-left:1px solid #000;
                border-right:1px solid #333;
                border-top:1px solid #000;
                color:#fff; 
                border-radius: 3px 3px 3px 3px;
                -moz-border-radius: 3px;
                -webkit-border-radius: 3px;
                font:13px Arial, Helvetica, sans-serif;
                padding:6px 6px 4px;
                width:200px;
            }
            form.signin input:-moz-placeholder { color:#bbb; text-shadow:0 0 2px #000; }
            form.signin input::-webkit-input-placeholder { color:#bbb; text-shadow:0 0 2px #000;  }
            .button { 
                background: -moz-linear-gradient(center top, #f3f3f3, #dddddd);
                background: -webkit-gradient(linear, left top, left bottom, from(#f3f3f3), to(#dddddd));
                background:  -o-linear-gradient(top, #f3f3f3, #dddddd);
                filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#f3f3f3', EndColorStr='#dddddd');
                border-color:#000; 
                border-width:1px;
                border-radius:4px 4px 4px 4px;
                -moz-border-radius: 4px;
                -webkit-border-radius: 4px;
                color:#333;
                cursor:pointer;
                display:inline-block;
                padding:6px 6px 4px;
                margin-top:10px;
                font:12px; 
                width:214px;
            }
            .button:hover { background:#ddd; }
        </style>
    </head>
    <body id="page1">
        <?php 
            session_start();
            if (isset($_SESSION['login_success'])) {
        ?>
        <!-- Some HTML content should show up here but it isn't... -->
        <?php } else { ?>
        <!-- Login Dialog -->
        <div id="login-box" class="login-popup">
            <a href="index.html">Cancel</a>
            <form method="post" class="signin" action="admin_process_login.php">
                <fieldset class="textbox">
                    <label class="username">
                        <span>Username</span>
                        <input id="username" name="username" value="" type="text" autocomplete="on" placeholder="Username">
                    </label>
                    <label class="password">
                        <span>Password</span>
                        <input id="password" name="password" value="" type="password" placeholder="Password">
                    </label>
                    <button class="login" type="submit">Sign in</button>       
                </fieldset>
            </form>
        </div>
        <script type="text/javascript">
            $(document).ready(function() {
                    //Getting the variable's value from a link 
                    var loginBox = document.getElementById('login-box');
                    //Fade in the Popup
                    $(loginBox).fadeIn(300);
                    //Set the center alignment padding + border see css style
                    var popMargTop = ($(loginBox).height() + 24) / 2; 
                    var popMargLeft = ($(loginBox).width() + 24) / 2; 
                    $(loginBox).css({ 
                        'margin-top' : -popMargTop,
                        'margin-left' : -popMargLeft
                        });
                    // Add the mask to body
                    $('body').append('<div id="mask"></div>');
                    $('#mask').fadeIn(300);
                    // When clicking on the button close or the mask layer the popup closed
                    $('button.login').live('click', function() { 
                            $('#mask , .login-popup').fadeOut(300 , function() {
                                $('#mask').remove();  
                                }); 
                            return false;
                            });
            });
        </script> 
        <?php } ?>
    </body>
</html>

编辑2012-02-25美国东部时间16:54
出于某种奇怪的原因,这一系列事件(到目前为止,我只测试了这一系列)使管理表单正确出现
*转到admin.php并单击"登录"按钮
*在浏览器中转到"测试"php页面(http://localhost/mbc/test)
测试页面代码:

<html>
   <head>
      <title>Testing</title>
   </head>
   <body>
   <?php
      session_start();
      if (isset($_SESSION['login_success'])) { ?>
      <H1>Login was a success</H1>
      <?php } else { ?>
      <H1>Login was a failure - next time it should work</H1>
      <?php
        $_SESSION['login_success'] = true;
      }
      ?>
   </body>
</html>
  • 转到管理页面(http://localhost/mbc/admin)现在管理表单显示良好

问题实际上发生在jQuery按钮点击代码中,特别是"return false"部分:

// When clicking on the button close or the mask layer the popup closed
 $('button.login').live('click', function() { 
    $('#mask , .login-popup').fadeOut(300 , function() {
       $('#mask').remove();  
    }); 
    return false;
 });

当我删除该代码时,"$_SESSION['login_success'] = true;"发生得很好,管理表单部分成功返回。

事实证明"return false"有一些令人讨厌的副作用,应该小心使用。看见http://fuelyourcoding.com/jquery-events-stop-misusing-return-false/有关正确使用"return false"的详细信息。

我现在没有权限测试它,但我认为你的问题是它应该是:

header('Location: http://localhost/mbc/admin');

参考:http://php.net/manual/en/function.header.php

这两个引用都表明,URI之前需要在":"后面加一个空格。

您的代码没有任何问题。您只是希望start_session()不起作用,而$_session['login_success']未设置。我建议您要么使用php框架,要么阅读有关会话的指南。

在这里,像这样改变,表格弹出:

  <?php
               //session_start(); // if you uncomment print_r will give you 1
               if (isset($_SESSION['login_success'])) {
                   echo '<pre>';
                   print_r($_SESSION['login_success']);
           ?>
           <!-- Some HTML content should show up here but it isn't... -->
                   empty statement</pre>