无法弄清楚我的PHP代码有什么问题

时间:2012-02-25 21:29:27

标签: php jquery

我有一个我正在设置的管理页面(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:54EST
出于一些奇怪的原因,这个(就我迄今为止测试过的那个)系列事件使得管理表单正确出现...
*转到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),现在管理表格正常。

3 个答案:

答案 0 :(得分:0)

问题实际上是在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”的详细信息。

答案 1 :(得分:-1)

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

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

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

两个引用都表明在URI之前需要“:”之后的空格。

答案 2 :(得分:-1)

您的代码没有任何问题。你只是希望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>