无法获得登录成功查看

时间:2015-02-13 23:44:36

标签: php

所以我已经将登录表单的写入凭据输入了,并且它应该将我重定向到显示成功登录的home.php页面,但是当我点击提交时,页面只是刷新并没有做任何事情。如果我在登录后更改login_action加载的内容它会正确,但是如果我告诉它加载home.php它什么都不做......任何帮助?

这是我的home.php代码:

<?php

session_start() ;

if( !isset($_SESSION['username']))
{
    require('login_tools.php');
    load();         
}

$page_title = 'Home';

echo"<h1>HOME</h1>
<p>You are now logged in, {$_SESSION['username']}</p>";

echo'<p><a href="goodbye.php">Logout</a></p>';

?>

和login_action.php

   <?php

if ( $_SERVER['REQUEST_METHOD'] == 'POST')
{
require ('../connect_db.php') ;
require ('login_tools.php') ;

list ($check, $data) = 
validate($dbc, $_POST['username'], $_POST['password']);

if ($check )
{
 session_start() ;

 $_SESSION['user_id'] = $data['user_id'] ;
 $_SESSION['username'] = $data['username'] ;

 load('home.php') ;
}
else {$errors = $data ;}

mysqli_close( $dbc);
}

include('login.php'); 
?>

**login.php:**


 <?php

$page_title = 'Login';

if ( isset( $errors ) && !empty( $errors))
{
echo'<p id="err_msg">Oops! There was a problem:<br>';
foreach ( $errors as $msg )
{
    echo " - $msg<br>";
}
echo 'Please try again or <a href="register.php">Register</a></p>';
}
?>
<h1>Login</h1>
<form action="login_action.php" method="POST">
<p>
Username: <input type="text" name="username">
</p><p>
Password: <input type="password" name="password">
</p><p>
<input type="submit" value="Login" >
</p>
</form>

3 个答案:

答案 0 :(得分:0)

根据你的代码,它应该刷新。实际上,它不是一个刷新,它是login.php的无限加载,它包含在login_action.php的末尾

您应该使用header重定向,而不是包含如下:

    <?php
    $host  = $_SERVER['HTTP_HOST'];
    $uri   = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');

    if ( $_SERVER['REQUEST_METHOD'] == 'POST')
    {
    require ('../connect_db.php') ;
    require ('login_tools.php') ;

    list ($check, $data) = 
    validate($dbc, $_POST['username'], $_POST['password']);

    if ($check )
    {
     session_start() ;

     $_SESSION['user_id'] = $data['user_id'] ;
     $_SESSION['username'] = $data['username'] ;

     $extra = 'home.php';
    header("Location: http://$host$uri/$extra");
exit;
    }
    else {
    $errors = $data ;
    $_SESSION['Errors'] = $errors;
    $extra = 'login.php';
    header("Location: http://$host$uri/$extra");
    exit;
    }

    mysqli_close( $dbc);
    }


    ?>

在login.php中

$page_title = 'Login';

    if ( isset( $_SESSION['Errors'] ) && !empty( $_SESSION['Errors'])){
    $errors = $_SESSION['Errors'];
    //continue your code...
    // at the end of the code:
    unset($_SESSION['Errors']);

答案 1 :(得分:0)

根据你的回复,我猜会话没有任何东西可以装回家。它来自:

 $_SESSION['user_id'] = $data['user_id'] ;
 $_SESSION['username'] = $data['username'] ;

这使得发送会话时验证无效。

尝试将$数据更改为变量,如下所示:

 $_SESSION['user_id'] = $user_id ;
 $_SESSION['username'] = $username ;

要显示消息,您可以使用元刷新来确定它确实发送了登录数据。 如果这不起作用,那么从连接中获取数据肯定有问题。

答案 2 :(得分:0)

<?php # LOGIN HELPER FUNCTIONS.

# Function to load specified or default URL.
function load( $page = 'login.php' )
{
  # Begin URL with protocol, domain, and current directory.
  $url = 'http://' . $_SERVER[ 'HTTP_HOST' ] . dirname( $_SERVER[ 'PHP_SELF' ] ) ;

  # Remove trailing slashes then append page name to URL.
  $url = rtrim( $url, '/\\' ) ;
  $url .= '/' . $page ;

  # Execute redirect then quit. 
  header( "Location: $url" ) ; 
  exit() ;
}

# Function to check email address and password. 
function validate( $dbc, $email = '', $pwd = '')
{
  # Initialize errors array.
  $errors = array() ; 

  # Check email field.
  if ( empty( $email ) ) 
  { $errors[] = 'Enter your email address.' ; } 
  else  { $e = mysqli_real_escape_string( $dbc, trim( $email ) ) ; }

  # Check password field.
  if ( empty( $pwd ) ) 
  { $errors[] = 'Enter your password.' ; } 
  else { $p = mysqli_real_escape_string( $dbc, trim( $pwd ) ) ; }

  # On success retrieve user_id, first_name, and last name from 'users' database.
  if ( empty( $errors ) ) 
  {
    $q = "SELECT user_id, first_name, last_name FROM users WHERE email='$e' AND pass=SHA1('$p')" ;  
    $r = mysqli_query ( $dbc, $q ) ;
    if ( @mysqli_num_rows( $r ) == 1 ) 
    {
      $row = mysqli_fetch_array ( $r, MYSQLI_ASSOC ) ;
      return array( true, $row ) ; 
    }
    # Or on failure set error message.
    else { $errors[] = 'Email address and password not found.' ; }
  }
  # On failure retrieve error message/s.
  return array( false, $errors ) ; 
}