20. juni 2010 - 11:53
				#11
						
		 
		
			admin.php:
<?php
include("../include/session.php");
?>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>Jpmaster77's Login Script</title>
<link rel="stylesheet" href="../-css/960/reset.css" type="text/css" />
<link rel="stylesheet" href="../-css/960/960.css" type="text/css" />
<link rel="stylesheet" href="../-css/960/text.css" type="text/css" />
<link rel="stylesheet" href="../-css/style.css" type="text/css" />
</head>
<body>
<?php
/**
* displayUsers - Displays the users database table in
* a nicely formatted html table.
*/
function displayUsers(){
   global $database;
   $q = "SELECT username,userlevel,email,timestamp "
       ."FROM ".TBL_USERS." ORDER BY userlevel DESC,username";
   $result = $database->query($q);
   /* Error occurred, return given name by default */
   $num_rows = mysql_numrows($result);
   if(!$result || ($num_rows < 0)){
      echo "Error displaying info";
      return;
   }
   if($num_rows == 0){
      echo "Database table empty";
      return;
   }
   /* Display table contents */
   echo "<table id='display'>";
   echo "<tr class='title'><td colspan='2'>Username</td><td>Level</td><td colspan='2'>Email</td><td colspan='2'>Last Active</td></tr>";
   echo "<div class='clear'></div>";
   for($i=0; $i<$num_rows; $i++){
      $uname = mysql_result($result,$i,"username");
      $ulevel = mysql_result($result,$i,"userlevel");
      $email = mysql_result($result,$i,"email");
      $time = mysql_result($result,$i,"timestamp");
      echo "<tr><td colspan='2'>".$uname."</td><td>".$ulevel."</td><td colspan='2'>".$email."</td><td colspan='2'>".$time."</td></tr>";
   }
   echo "</table>";
}
/**
* displayBannedUsers - Displays the banned users
* database table in a nicely formatted html table.
*/
function displayBannedUsers(){
   global $database;
   $q = "SELECT username,timestamp "
       ."FROM ".TBL_BANNED_USERS." ORDER BY username";
   $result = $database->query($q);
   /* Error occurred, return given name by default */
   $num_rows = mysql_numrows($result);
   if(!$result || ($num_rows < 0)){
      echo "Error displaying info";
      return;
   }
   if($num_rows == 0){
      echo "<p class='grid_12'>Database table empty</p>";
      return;
   }
   /* Display table contents */
   echo "<table id='display'>";
   echo "<tr class='title'><tr colspan='2'>Username</td><td colspan='2'>Time Banned</td></tr>";
   for($i=0; $i<$num_rows; $i++){
      $uname = mysql_result($result,$i,"username");
      $time = mysql_result($result,$i,"timestamp");
      echo "<tr><td colspan='2'>".$uname."</td><td colspan='2'>".$time."</td></tr>";
   }
   echo "</table>";
}
   
/**
* User not an administrator, redirect to main page
* automatically.
*/
if(!$session->isAdmin){
   header("Location: ../main.php");
}
else{
/**
* Administrator is viewing page, so display all
* forms.
*/
?>
<html>
<title>Jpmaster77's Login Script</title>
<body>
<div id="main" class="container_12">
<h1>Admin Center</h1>
<font size="5" color="#ff0000">
<b>::::::::::::::::::::::::::::::::::::::::::::</b></font>
<font size="4">Logged in as <b><?php echo $session->username; ?></b></font><br><br>
Back to [<a href="../main.php">Main Page</a>]<br><br>
<?php
if($form->num_errors > 0){
   echo "<font size=\"4\" color=\"#ff0000\">"
       ."!*** Error with request, please fix</font><br><br>";
}
/**
* Display Users Table
*/
?>
<h3>Users Table Contents:</h3>
<?php
displayUsers();
?>
<hr>
<?php
/**
* Update User Level
*/
?>
<div class="update">
<h3>Update User Level</h3>
<?php echo $form->error("upduser"); ?>
<form action="adminprocess.php" method="POST">
<p class="grid_4">Username: <input type="text" name="upduser" maxlength="30" value="<?php echo $form->value("upduser"); ?>"></p>
<p class="grid_2">Level:
<select name="updlevel">
<option value="1">1</option>
<option value="5">5</option>
<option value="9">9</option>
</select>
</p>
<input type="hidden" name="subupdlevel" value="1">
<input type="submit" value="Update Level">
</form>
</div>
<hr>
<?php
/**
* Delete User
*/
?>
<div class="update">
<h3>Delete User</h3>
<?php echo $form->error("deluser"); ?>
<form action="adminprocess.php" method="POST">
<p class="grid_4">Username: <input type="text" name="deluser" maxlength="30" value="<?php echo $form->value("deluser"); ?>"></p>
<input type="hidden" name="subdeluser" value="1">
<input type="submit" value="Delete User">
</form>
</div>
<hr>
<?php
/**
* Delete Inactive Users
*/
?>
<div class="update">
<h3>Delete Inactive Users</h3>
This will delete all users (not administrators), who have not logged in to the site<br>
within a certain time period. You specify the days spent inactive.<br><br>
<form action="adminprocess.php" method="POST">
<p class="grid_2">Days: <select name="inactdays">
<option value="3">3</option>
<option value="7">7</option>
<option value="14">14</option>
<option value="30">30</option>
<option value="100">100</option>
<option value="365">365</option>
</select>
</p>
<input type="hidden" name="subdelinact" value="1">
<input type="submit" value="Delete All Inactive">
</form>
</div>
<hr>
<?php
/**
* Ban User
*/
?>
<div class="update">
<h3>Ban User</h3><?php echo $form->error("banuser"); ?>
<form action="adminprocess.php" method="POST">
<p class="grid_4">Username: <input type="text" name="banuser" maxlength="30" value="<?php echo $form->value("banuser"); ?>"></p>
<input type="hidden" name="subbanuser" value="1">
<input type="submit" value="Ban User">
</form>
</div>
<hr>
<?php
/**
* Display Banned Users Table
*/
?>
<h3>Banned Users Table Contents:</h3>
<?php
displayBannedUsers();
?>
<hr>
<?php
/**
* Delete Banned User
*/
?>
<div class="update">
<h3>Delete Banned User</h3><?php echo $form->error("delbanuser"); ?>
<form action="adminprocess.php" method="POST">
<p class="grid_4">Username: <input type="text" name="delbanuser" maxlength="30" value="<?php echo $form->value("delbanuser"); ?>"></p>
<input type="hidden" name="subdelbanned" value="1">
<input type="submit" value="Delete Banned User">
</form>
</div>
<hr>
Back to [<a href="../main.php">Main Page</a>]<br><br>
</div>
</body>
</html>
<?php
}
?>
session.php:
<?php
/**
* Session.php
*
* The Session class is meant to simplify the task of keeping
* track of logged in users and also guests.
*
* Written by: Jpmaster77 a.k.a. The Grandmaster of C++ (GMC)
* Last Updated: August 2, 2009 by Ivan Novak
*/
include("database.php");
include("mailer.php");
include("form.php");
class Session
{
   var $username; //Username given on sign-up
   var $userid; //Random value generated on current login
   var $userlevel; //The level to which the user pertains
   var $time; //Time user was last active (page loaded)
   var $logged_in; //True if user is logged in, false otherwise
   var $userinfo = array(); //The array holding all user info
   var $url; //The page url current being viewed
   var $referrer; //Last recorded site page viewed
   /**
* Note: referrer should really only be considered the actual
* page referrer in process.php, any other time it may be
* inaccurate.
*/
   /* Class constructor */
   function Session(){
      $this->time = time();
      $this->startSession();
   }
   /**
* startSession - Performs all the actions necessary to
* initialize this session object. Tries to determine if the
* the user has logged in already, and sets the variables
* accordingly. Also takes advantage of this page load to
* update the active visitors tables.
*/
   function startSession(){
      global $database; //The database connection
      session_start(); //Tell PHP to start the session
      /* Determine if user is logged in */
      $this->logged_in = $this->checkLogin();
      /**
* Set guest value to users not logged in, and update
* active guests table accordingly.
*/
      if(!$this->logged_in){
         $this->username = $_SESSION['username'] = GUEST_NAME;
         $this->userlevel = GUEST_LEVEL;
         $database->addActiveGuest($_SERVER['REMOTE_ADDR'], $this->time);
      }
      /* Update users last active timestamp */
      else{
         $database->addActiveUser($this->username, $this->time);
      }
      
      /* Remove inactive visitors from database */
      $database->removeInactiveUsers();
      $database->removeInactiveGuests();
      
      /* Set referrer page */
      if(isset($_SESSION['url'])){
         $this->referrer = $_SESSION['url'];
      }else{
         $this->referrer = "/";
      }
      /* Set current url */
      $this->url = $_SESSION['url'] = $_SERVER['PHP_SELF'];
   }
   /**
* checkLogin - Checks if the user has already previously
* logged in, and a session with the user has already been
* established. Also checks to see if user has been remembered.
* If so, the database is queried to make sure of the user's
* authenticity. Returns true if the user has logged in.
*/
   function checkLogin(){
      global $database; //The database connection
      /* Check if user has been remembered */
      if(isset($_COOKIE['cookname']) && isset($_COOKIE['cookid'])){
         $this->username = $_SESSION['username'] = $_COOKIE['cookname'];
         $this->userid = $_SESSION['userid'] = $_COOKIE['cookid'];
      }
      /* Username and userid have been set and not guest */
      if(isset($_SESSION['username']) && isset($_SESSION['userid']) &&
         $_SESSION['username'] != GUEST_NAME){
         /* Confirm that username and userid are valid */
         if($database->confirmUserID($_SESSION['username'], $_SESSION['userid']) != 0){
            /* Variables are incorrect, user not logged in */
            unset($_SESSION['username']);
            unset($_SESSION['userid']);
            return false;
         }
         /* User is logged in, set class variables */
         $this->userinfo = $database->getUserInfo($_SESSION['username']);
         $this->username = $this->userinfo['username'];
         $this->userid = $this->userinfo['userid'];
         $this->userlevel = $this->userinfo['userlevel'];
         return true;
      }
      /* User not logged in */
      else{
         return false;
      }
   }
   /**
* login - The user has submitted his username and password
* through the login form, this function checks the authenticity
* of that information in the database and creates the session.
* Effectively logging in the user if all goes well.
*/
   function login($subuser, $subpass, $subremember){
      global $database, $form; //The database and form object
      /* Username error checking */
      $field = "user"; //Use field name for username
$q = "SELECT valid FROM ".TBL_USERS." WHERE username='$subuser'";
$valid = $database->query($q);
$valid = mysql_fetch_array($valid);
      if(!$subuser || strlen($subuser = trim($subuser)) == 0){
         $form->setError($field, "* Username not entered");
      }
      else{
         /* Check if username is not alphanumeric */
         if(!eregi("^([0-9a-z])*$", $subuser)){
            $form->setError($field, "* Username not alphanumeric");
         }
      }
      /* Password error checking */
      $field = "pass"; //Use field name for password
      if(!$subpass){
         $form->setError($field, "* Password not entered");
      }
      
      /* Return if form errors exist */
      if($form->num_errors > 0){
         return false;
      }
      /* Checks that username is in database and password is correct */
      $subuser = stripslashes($subuser);
      $result = $database->confirmUserPass($subuser, md5($subpass));
      /* Check error codes */
      if($result == 1){
         $field = "user";
         $form->setError($field, "* Username not found");
      }
      else if($result == 2){
         $field = "pass";
         $form->setError($field, "* Invalid password");
      }
      
      /* Return if form errors exist */
      if($form->num_errors > 0){
         return false;
      }
      
      if(EMAIL_WELCOME){
       if($valid['valid'] == 0){
       $form->setError($field, "* User's account has not yet been confirmed.");
       }
      }
                  
      /* Return if form errors exist */
      if($form->num_errors > 0){
         return false;
      }
      
      /* Username and password correct, register session variables */
      $this->userinfo = $database->getUserInfo($subuser);
      $this->username = $_SESSION['username'] = $this->userinfo['username'];
      $this->userid = $_SESSION['userid'] = $this->generateRandID();
      $this->userlevel = $this->userinfo['userlevel'];
      
      /* Insert userid into database and update active users table */
      $database->updateUserField($this->username, "userid", $this->userid);
      $database->addActiveUser($this->username, $this->time);
      $database->removeActiveGuest($_SERVER['REMOTE_ADDR']);
      /**
* This is the cool part: the user has requested that we remember that
* he's logged in, so we set two cookies. One to hold his username,
* and one to hold his random value userid. It expires by the time
* specified in constants.php. Now, next time he comes to our site, we will
* log him in automatically, but only if he didn't log out before he left.
*/
      if($subremember){
         setcookie("cookname", $this->username, time()+COOKIE_EXPIRE, COOKIE_PATH);
         setcookie("cookid", $this->userid, time()+COOKIE_EXPIRE, COOKIE_PATH);
      }
      /* Login completed successfully */
      return true;
   }
   /**
* logout - Gets called when the user wants to be logged out of the
* website. It deletes any cookies that were stored on the users
* computer as a result of him wanting to be remembered, and also
* unsets session variables and demotes his user level to guest.
*/
   function logout(){
      global $database; //The database connection
      /**
* Delete cookies - the time must be in the past,
* so just negate what you added when creating the
* cookie.
*/
      if(isset($_COOKIE['cookname']) && isset($_COOKIE['cookid'])){
         setcookie("cookname", "", time()-COOKIE_EXPIRE, COOKIE_PATH);
         setcookie("cookid", "", time()-COOKIE_EXPIRE, COOKIE_PATH);
      }
      /* Unset PHP session variables */
      unset($_SESSION['username']);
      unset($_SESSION['userid']);
      /* Reflect fact that user has logged out */
      $this->logged_in = false;
      
      /**
* Remove from active users table and add to
* active guests tables.
*/
      $database->removeActiveUser($this->username);
      $database->addActiveGuest($_SERVER['REMOTE_ADDR'], $this->time);
      
      /* Set user level to guest */
      $this->username = GUEST_NAME;
      $this->userlevel = GUEST_LEVEL;
   }
   /**
* register - Gets called when the user has just submitted the
* registration form. Determines if there were any errors with
* the entry fields, if so, it records the errors and returns
* 1. If no errors were found, it registers the new user and
* returns 0. Returns 2 if registration failed.
*/
   function register($subuser, $subpass, $subemail, $subname){
      global $database, $form, $mailer; //The database, form and mailer object
      
      /* Username error checking */
      $field = "user"; //Use field name for username
      if(!$subuser || strlen($subuser = trim($subuser)) == 0){
         $form->setError($field, "* Username not entered");
      }
      else{
         /* Spruce up username, check length */
         $subuser = stripslashes($subuser);
         if(strlen($subuser) < 5){
            $form->setError($field, "* Username below 5 characters");
         }
         else if(strlen($subuser) > 30){
            $form->setError($field, "* Username above 30 characters");
         }
         /* Check if username is not alphanumeric */
         else if(!eregi("^([0-9a-z])+$", $subuser)){
            $form->setError($field, "* Username not alphanumeric");
         }
         /* Check if username is reserved */
         else if(strcasecmp($subuser, GUEST_NAME) == 0){
            $form->setError($field, "* Username reserved word");
         }
         /* Check if username is already in use */
         else if($database->usernameTaken($subuser)){
            $form->setError($field, "* Username already in use");
         }
         /* Check if username is banned */
         else if($database->usernameBanned($subuser)){
            $form->setError($field, "* Username banned");
         }
      }
      /* Password error checking */
      $field = "pass"; //Use field name for password
      if(!$subpass){
         $form->setError($field, "* Password not entered");
      }
      else{
         /* Spruce up password and check length*/
         $subpass = stripslashes($subpass);
         if(strlen($subpass) < 4){
            $form->setError($field, "* Password too short");
         }
         /* Check if password is not alphanumeric */
         else if(!eregi("^([0-9a-z])+$", ($subpass = trim($subpass)))){
            $form->setError($field, "* Password not alphanumeric");
         }
         /**
* Note: I trimmed the password only after I checked the length
* because if you fill the password field up with spaces
* it looks like a lot more characters than 4, so it looks
* kind of stupid to report "password too short".
*/
      }
      
      /* Email error checking */
      $field = "email"; //Use field name for email
      if(!$subemail || strlen($subemail = trim($subemail)) == 0){
         $form->setError($field, "* Email not entered");
      }
      else{
         /* Check if valid email address */
         $regex = "^[_+a-z0-9-]+(\.[_+a-z0-9-]+)*"
                 ."@[a-z0-9-]+(\.[a-z0-9-]{1,})*"
                 ."\.([a-z]{2,}){1}$";
         if(!eregi($regex,$subemail)){
            $form->setError($field, "* Email invalid");
         }
         /* Check if email is already in use */
         if($database->emailTaken($subemail)){
            $form->setError($field, "* Email already in use");
         }
         $subemail = stripslashes($subemail);
      }
      
      /* Name error checking */
$field = "name";
if(!$subname || strlen($subname = trim($subname)) == 0){
$form->setError($field, "* Name not entered");
} else {
$subname = stripslashes($subname);
}
      
      $randid = $this->generateRandID();
      
      /* Errors exist, have user correct them */
      if($form->num_errors > 0){
         return 1; //Errors with form
      }
      /* No errors, add the new account to the */
      else{
         if($database->addNewUser($subuser, md5($subpass), $subemail, $randid, $subname)){
            if(EMAIL_WELCOME){
               $mailer->sendWelcome($subuser,$subemail,$subpass,$randid);
            }
            return 0; //New user added succesfully
         }else{
            return 2; //Registration attempt failed
         }
      }
   }
   
   /**
* editAccount - Attempts to edit the user's account information
* including the password, which it first makes sure is correct
* if entered, if so and the new password is in the right
* format, the change is made. All other fields are changed
* automatically.
*/
   function editAccount($subcurpass, $subnewpass, $subemail, $subname){
      global $database, $form; //The database and form object
      /* New password entered */
      if($subnewpass){
         /* Current Password error checking */
         $field = "curpass"; //Use field name for current password
         if(!$subcurpass){
            $form->setError($field, "* Current Password not entered");
         }
         else{
            /* Check if password too short or is not alphanumeric */
            $subcurpass = stripslashes($subcurpass);
            if(strlen($subcurpass) < 4 ||
               !eregi("^([0-9a-z])+$", ($subcurpass = trim($subcurpass)))){
               $form->setError($field, "* Current Password incorrect");
            }
            /* Password entered is incorrect */
            if($database->confirmUserPass($this->username,md5($subcurpass)) != 0){
               $form->setError($field, "* Current Password incorrect");
            }
         }
         
         /* New Password error checking */
         $field = "newpass"; //Use field name for new password
         /* Spruce up password and check length*/
         $subpass = stripslashes($subnewpass);
         if(strlen($subnewpass) < 4){
            $form->setError($field, "* New Password too short");
         }
         /* Check if password is not alphanumeric */
         else if(!eregi("^([0-9a-z])+$", ($subnewpass = trim($subnewpass)))){
            $form->setError($field, "* New Password not alphanumeric");
         }
      }
      /* Change password attempted */
      else if($subcurpass){
         /* New Password error reporting */
         $field = "newpass"; //Use field name for new password
         $form->setError($field, "* New Password not entered");
      }
      
      /* Email error checking */
      $field = "email"; //Use field name for email
      if($subemail && strlen($subemail = trim($subemail)) > 0){
         /* Check if valid email address */
         $regex = "^[_+a-z0-9-]+(\.[_+a-z0-9-]+)*"
                 ."@[a-z0-9-]+(\.[a-z0-9-]{1,})*"
                 ."\.([a-z]{2,}){1}$";
         if(!eregi($regex,$subemail)){
            $form->setError($field, "* Email invalid");
         }
         $subemail = stripslashes($subemail);
      }
      
      /* Name error checking */
$field = "name";
if(!$subname || strlen($subname = trim($subname)) == 0){
$form->setError($field, "* Name not entered");
} else {
$subname = stripslashes($subname);
}
      
      /* Errors exist, have user correct them */
      if($form->num_errors > 0){
         return false; //Errors with form
      }
      
      /* Update password since there were no errors */
      if($subcurpass && $subnewpass){
         $database->updateUserField($this->username,"password",md5($subnewpass));
      }
      
      /* Change Email */
      if($subemail){
         $database->updateUserField($this->username,"email",$subemail);
      }
      
      /* Change Name */
      if($subname){
         $database->updateUserField($this->username,"name",$subname);
      }
      
      /* Success! */
      return true;
   }
   
   /**
* isAdmin - Returns true if currently logged in user is
* an administrator, false otherwise.
*/
function isAdmin{
      return ($this->userlevel == ADMIN_LEVEL &&
              $this->username  == ADMIN_NAME)? TRUE : FALSE;
}
   }
   
   /**
* isAuthor - Returns true if currently logged in user is
* an author or an administrator, false otherwise.
*/
   function isAuthor(){
      return ($this->userlevel == AUTHOR_LEVEL ||
              $this->userlevel == ADMIN_LEVEL);
   }
   
   /**
* generateRandID - Generates a string made up of randomized
* letters (lower and upper case) and digits and returns
* the md5 hash of it to be used as a userid.
*/
   function generateRandID(){
      return md5($this->generateRandStr(16));
   }
   
   /**
* generateRandStr - Generates a string made up of randomized
* letters (lower and upper case) and digits, the length
* is a specified parameter.
*/
   function generateRandStr($length){
      $randstr = "";
      for($i=0; $i<$length; $i++){
         $randnum = mt_rand(0,61);
         if($randnum < 10){
            $randstr .= chr($randnum+48);
         }else if($randnum < 36){
            $randstr .= chr($randnum+55);
         }else{
            $randstr .= chr($randnum+61);
         }
      }
      return $randstr;
   }
};
/**
* Initialize session object - This must be initialized before
* the form object because the form uses session variables,
* which cannot be accessed unless the session has started.
*/
$session = new Session;
/* Initialize form object */
$form = new Form;
?>