I am trying to implement a relatively complete login system code for my
website, but the code is a bit dated ($HTTP_POST_VARS for example).

I am not too familiar with classes and I'm having trouble with this one.

I have an include which is the login form if the SESSION is not set, and a
mini control panel when it is.


I will post the code below because it is a bit extensive. My problem: When I
try to log in (POST username/password to same page and validate with the
class, the page simply reloads MINUS THE FORM SUBMIT BUTTON. It's very odd.
I have a working system on another website without using this class, I just
hoping to be more object-oriented with this one.

Like I said, the code is a bit lengthy, and if you are kind enough to take a
look at I can even send you the php files for the sake of readability (ie.
formatted better than here).



Anything you can help with would be greatly appreciated; I'll have my wife
bake you some cookies or something!

The basic page looks like this:

<?php
// Get the PHP file containing the DbConnector class
require_once('../includes/DbConnector.php');

// Create an instance of DbConnector
$connector = new DbConnector();

// sets $thispage and $directory
include('../includes/pagedefinition.php');

// Include functions
require_once('../includes/functions.php');

//content
include('../includes/signupform.php');
include('../includes/signup_val_inser_eml.php');
include('../includes/signinform.php');
include('../includes/header.php');
include('../includes/body.php');
?>

The page definition file looks like this:

<?php
require_once("Sentry.php");
if ($_GET['action'] == 'logout'){
 if ($sentry->logout()){
  echo '<p align=\"center\" class=\"confirm\">You have been logged
out</p><br>';
 }
}

. . . // site content-grabbing code excluded ///

// Attempted login url - use for redirect after login.
$redirect = 
"http://mwclans.com/{$_SERVER['REQUEST_URI'<http://mwclans.com/%7B$_SERVER['REQUEST_URI'>
]}";
// Defined in includes/Sentry.php
$sentry = new Sentry();
// If logging in, POST['login'] will be set - check credentials (9 is used
to specify the minimum group level that's allowed to access this resource)
if ($_POST['login'] != ''){
 
$sentry->checkLogin($_POST['username'],$_POST['password'],9,'$redirect',/user/index.php');
}
if ($minlevel < 9)
{
 if (!$sentry->checkLogin($minlevel) ){ header("Location:
/user/<http://www.mwclans.com/user/>");
die(); }
}
?>

Here is the Sentry class:

<?php
////////////////////////////////////////////////////////////////////////////////////////
// Class: sentry
// Purpose: Control access to pages
///////////////////////////////////////////////////////////////////////////////////////
class sentry {

 var $loggedin = false; // Boolean to store whether the user is logged in
 var $userdata;   //  Array to contain user's data

 function sentry(){
  session_start();
  header("Cache-control: private");
 }

 
//======================================================================================
 // Log out, destroy session
 function logout(){
  if (is_object($this->userdata))
  {
   unset($this->userdata);
   $session_name = session_name();
   return true;
  }
  else
  {
   $message = "<p align=\"center\" class=\"error\">Call to non-object by
function: logout()</p>";
  }

 }
 
//======================================================================================
 // Log in, and either redirect to goodRedirect or badRedirect depending on
success
 function checkLogin($username = '',$password = '',$role_id =
9,$goodRedirect = '',$badRedirect = ''){
  // Include database and validation classes, and create objects
  require_once('DbConnector.php');
  require_once('Validator.php');
  $validate = new Validator();
  $loginConnector = new DbConnector();

  // If user is already logged in then check credentials
  if ($_SESSION['username'] && $_SESSION['password']){
   // Validate session data
   if (!$validate->validateTextOnly($_SESSION['username'])){return false;}
   if (!$validate->validateTextOnly($_SESSION['password'])){return false;}
   $getUser = $loginConnector->query("SELECT * FROM user WHERE username =
'".$_SESSION['username']."' AND password = '".$_SESSION['password']."' AND
role_id <= ".$role_id.' AND verified = 1');
   if ($loginConnector->getNumRows($getUser) > 0){
    // Existing user ok, continue
    if ($goodRedirect != '') {
     header("Location: ".$goodRedirect."?".strip_tags(session_id())) ;
    }
    return true;
   }else{
    // Existing user not ok, logout
    $this->logout();
    return false;
   }

  // User isn't logged in, check credentials
  }else{
   // Validate input
   if (!$validate->validateTextOnly($username)){return false;}
   if (!$validate->validateTextOnly($password)){return false;}
   // Look up user in DB
   $getUser = $loginConnector->query("SELECT * FROM user WHERE username =
'$username' AND password = PASSWORD('$password') AND role_id <= $role_id AND
verified = 1");
   $this->userdata = $loginConnector->fetchArray($getUser);
   if ($loginConnector->getNumRows($getUser) > 0){
    // Login OK, store session details
    // Log in
    $_SESSION["username"] = $username;
    $_SESSION["password"] = $this->userdata['password'];
    $_SESSION["user_id"] = $this->userdata['user_id'];
    $_SESSION["role_id"] = $this->userdata['role_id'];

    if ($goodRedirect) {
     header("Location: ".$goodRedirect."?".strip_tags(session_id())) ;
    }
    return true;
   }else{
    // Login BAD
    unset($this->userdata);
    if ($badRedirect) {
     header("Location: ".$badRedirect) ;
    }
    return false;
   }
  }
 }
}
?>

And here is the login page:

<?php
$loginsettingquery = "SELECT * FROM site_settings WHERE name='login'";
$loginsettingresult = $connector->query($loginsettingquery);
$loginsettinginfo = $connector->fetchArray($loginsettingresult);
$currentpage = 
"http://mwclans.com/{$_SERVER['REQUEST_URI'<http://mwclans.com/%7B$_SERVER['REQUEST_URI'>
]}";
if (isset($_SESSION['username']) && isset($_SESSION['password'])) // display
other info, else display login form
{
 // logged-in user tools
}
else
{
if ($loginsettinginfo['value'] == 1 || $directory == "cmsadmin")
{
 $signinform = <<<END
<table width="250" align="center" border="0" cellspacing="0" cellpadding="3"
class="contentbox">
 <tr>
  <td colspan="2" bgcolor="#000000"><b>Login</b></td>
 </tr>
 <tr>
  <td align="right"><span style="cursor:default;">Username:</td>
  <td style="vertical-align:top">
  <form name="login" method="post" action="$currentpage">
  <input type="hidden" name="login" value="1">
  <input name="username" type="text" size="15" id="username" /></td>
 </tr>
 <tr valign="center">
  <td align="right"><span style="cursor:default;">Password:</td>
  <td style="vertical-align:top;">
  <input name="password" type="password" size="15" id="password" /></td>
 </tr>
 <tr>
  <td colspan="2" align="right"></td>
 </tr>
</table></form>
END;
}
else
{
 // login disabled message
}
}
?>

Reply via email to