Forums

PHP

This topic is locked

undefined method/function

Posted 17 Oct 2006 22:53:21
1
has voted
17 Oct 2006 22:53:21 augusto rodriguez posted:
hi!!! i'm new in this forum and in php/mysql also and i need a little help i'm programing my own login system for my web page i got it runnign for a period of time but when i added new fields i stoped to work i'm almost sure it didn't stop to work because of the new fields as a matter of fact i dont know why it doesn't stoped to work.
the error i get when i post my username and password is: Fatal error: Call to undefined method Session::login() in C:\Archivos de programa\xampp\htdocs\process.php on line 62.
this is line 62:

<pre id=code><font face=courier size=2 id=code> $retval = $session-&gt;login($_POST['user'], $_POST['pass'], isset($_POST['remember'])); </font id=code></pre id=code>

surfing the web i found that it may an issue relatted with the php.ini file and the session path but it is ok. i double checked the { } and there are ok. i post part of my code here so everybody can help me out cause i'm quite deperate, LOL

prosess.php

<pre id=code><font face=courier size=2 id=code>&lt;?
/**
* Process.php
*
* The Process class is meant to simplify the task of processing
* user submitted forms, redirecting the user to the correct
* pages if errors are found, or if form is successful, either
* way. Also handles the logout procedure.
*


*/
include("session.php";

class Process
{
/* Class constructor */
function Process(){
global $session;
/* User submitted login form */
if(isset($_POST['sublogin'])){
$this-&gt;procLogin();
}
/* User submitted registration form */
else if(isset($_POST['subjoin'])){
$this-&gt;procRegister();
}
/* User submitted forgot password form */
else if(isset($_POST['subforgot'])){
$this-&gt;procForgotPass();
}
/* User submitted edit account form */
else if(isset($_POST['subedit'])){
$this-&gt;procEditAccount();
}
/**
* The only other reason user should be directed here
* is if he wants to logout, which means user is
* logged in currently.
*/
else if($session-&gt;logged_in){
$this-&gt;procLogout();
}
/**
* Should not get here, which means user is viewing this page
* by mistake and therefore is redirected.
*/
else{
header("Location: main.php";
}
}

/**
* procLogin - Processes the user submitted login form, if errors
* are found, the user is redirected to correct the information,
* if not, the user is effectively logged in to the system.
*/
function procLogin(){
global $session, $form;
/* Login attempt */

$retval = $session-&gt;login($_POST['user'], $_POST['pass'], isset($_POST['remember']));

/* Login successful */
if($retval){
header("Location: ".$session-&gt;referrer);
}
/* Login failed */
else{
$_SESSION['value_array'] = $_POST;
$_SESSION['error_array'] = $form-&gt;getErrorArray();
header("Location: ".$session-&gt;referrer);
}
}

/**
* procLogout - Simply attempts to log the user out of the system
* given that there is no logout form to process.
*/
function procLogout(){
global $session;
$retval = $session-&gt;logout();
header("Location: main.php";
}

/**
* procRegister - Processes the user submitted registration form,
* if errors are found, the user is redirected to correct the
* information, if not, the user is effectively registered with
* the system and an email is (optionally) sent to the newly
* created user.
*/
function procRegister(){
global $session, $form;
/* Convert username to all lowercase (by option) */
if(ALL_LOWERCASE){
$_POST['user'] = strtolower($_POST['user']);
}
/* Registration attempt */
$retval = $session-&gt;register($_POST['user'], $_POST['pass'], $_POST['email'], $_POST['cell']);

/* Registration Successful */
if($retval == 0){
$_SESSION['reguname'] = $_POST['user'];
$_SESSION['regsuccess'] = true;
header("Location: ".$session-&gt;referrer);


}
/* Error found with form */
else if($retval == 1){
$_SESSION['value_array'] = $_POST;
$_SESSION['error_array'] = $form-&gt;getErrorArray();
header("Location: ".$session-&gt;referrer);
}
/* Registration attempt failed */
else if($retval == 2){
$_SESSION['reguname'] = $_POST['user'];
$_SESSION['regsuccess'] = false;
header("Location: ".$session-&gt;referrer);
}
}

/**
* procForgotPass - Validates the given username then if
* everything is fine, a new password is generated and
* emailed to the address the user gave on sign up.
*/
function procForgotPass(){
global $database, $session, $mailer, $form;
/* Username error checking */
$subuser = $_POST['user'];
$field = "user"; //Use field name for username
if(!$subuser || strlen($subuser = trim($subuser)) == 0){
$form-&gt;setError($field, "* Username not entered&lt;br&gt;";
}
else{
/* Make sure username is in database */
$subuser = stripslashes($subuser);
if(strlen($subuser) &lt; 5 || strlen($subuser) &gt; 30 ||
!eregi("^([0-9a-z])+$", $subuser) ||
(!$database-&gt;usernameTaken($subuser))){
$form-&gt;setError($field, "* Username does not exist&lt;br&gt;";
}
}

/* Errors exist, have user correct them */
if($form-&gt;num_errors &gt; 0){
$_SESSION['value_array'] = $_POST;
$_SESSION['error_array'] = $form-&gt;getErrorArray();
}
/* Generate new password and email it to user */
else{
/* Generate new password */
$newpass = $session-&gt;generateRandStr(8);

/* Get email of user */
$usrinf = $database-&gt;getUserInfo($subuser);
$email = $usrinf['email'];

/* Attempt to send the email with new password */
if($mailer-&gt;sendNewPass($subuser,$email,$newpass)){
/* Email sent, update database */
$database-&gt;updateUserField($subuser, "password", md5($newpass));
$_SESSION['forgotpass'] = true;
}
/* Email failure, do not change password */
else{
$_SESSION['forgotpass'] = false;
}
}

header("Location: ".$session-&gt;referrer);
}

/**
* procEditAccount - Attempts to edit the user's account
* information, including the password, which must be verified
* before a change is made.
*/
function procEditAccount(){
global $session, $form;
/* Account edit attempt */
$retval = $session-&gt;editAccount($_POST['curpass'], $_POST['newpass'], $_POST['email'], $_POST['cell']);

/* Account edit successful */
if($retval){
$_SESSION['useredit'] = true;
header("Location: ".$session-&gt;referrer);
}
/* Error found with form */
else{
$_SESSION['value_array'] = $_POST;
$_SESSION['error_array'] = $form-&gt;getErrorArray();
header("Location: ".$session-&gt;referrer);
}
}
};

/* Initialize process */
$process = new Process;

?&gt;
</font id=code></pre id=code>

session.php

<pre id=code><font face=courier size=2 id=code> &lt;?
/**
* Session.php
*
* The Session class is meant to simplify the task of keeping
* track of logged in users and also guests.
* session_save_path("/your path/www/your sessions folder";esto es para el directorio de la secion
*/
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-&gt;time = time();
$this-&gt;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-&gt;logged_in = $this-&gt;checkLogin();

/**
* Set guest value to users not logged in, and update
* active guests table accordingly.
*/
if(!$this-&gt;logged_in){
$this-&gt;username = $_SESSION['username'] = GUEST_NAME;
$this-&gt;userlevel = GUEST_LEVEL;
$database-&gt;addActiveGuest($_SERVER['REMOTE_ADDR'], $this-&gt;time);
}
/* Update users last active timestamp */
else{
$database-&gt;addActiveUser($this-&gt;username, $this-&gt;time);
}

/* Remove inactive visitors from database */
$database-&gt;removeInactiveUsers();
$database-&gt;removeInactiveGuests();

/* Set referrer page */
if(isset($_SESSION['url'])){
$this-&gt;referrer = $_SESSION['url'];
}else{
$this-&gt;referrer = "/";
}

/* Set current url */
$this-&gt;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-&gt;username = $_SESSION['username'] = $_COOKIE['cookname'];
$this-&gt;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-&gt;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-&gt;userinfo = $database-&gt;getUserInfo($_SESSION['username']);
$this-&gt;username = $this-&gt;userinfo['username'];
$this-&gt;userid = $this-&gt;userinfo['userid'];
$this-&gt;userlevel = $this-&gt;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
if(!$subuser || strlen($subuser = trim($subuser)) == 0){
$form-&gt;setError($field, "* Username not entered";
}
else{
/* Check if username is not alphanumeric */
if(!eregi("^([0-9a-z])*$", $subuser)){
$form-&gt;setError($field, "* Username not alphanumeric";
}
}

/* Password error checking */
$field = "pass"; //Use field name for password
if(!$subpass){
$form-&gt;setError($field, "* Password not entered";
}

/* Return if form errors exist */
if($form-&gt;num_errors &gt; 0){
return false;
}

/* Checks that username is in database and password is correct */
$subuser = stripslashes($subuser);
$result = $database-&gt;confirmUserPass($subuser, md5($subpass));

/* Check error codes */
if($result == 1){
$field = "user";
$form-&gt;setError($field, "* Username not found";
}
else if($result == 2){
$field = "pass";
$form-&gt;setError($field, "* Invalid password";
}

/* Return if form errors exist */
if($form-&gt;num_errors &gt; 0){
return false;
}

/* Username and password correct, register session variables */
$this-&gt;userinfo = $database-&gt;getUserInfo($subuser);
$this-&gt;username = $_SESSION['username'] = $this-&gt;userinfo['username'];
$this-&gt;userid = $_SESSION['userid'] = $this-&gt;generateRandID();
$this-&gt;userlevel = $this-&gt;userinfo['userlevel'];

/* Insert userid into database and update active users table */
$database-&gt;updateUserField($this-&gt;username, "userid", $this-&gt;userid);
$database-&gt;addActiveUser($this-&gt;username, $this-&gt;time);
$database-&gt;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-&gt;username, time()+COOKIE_EXPIRE, COOKIE_PATH);
setcookie("cookid", $this-&gt;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-&gt;logged_in = false;

/**
* Remove from active users table and add to
* active guests tables.
*/
$database-&gt;removeActiveUser($this-&gt;username);
$database-&gt;addActiveGuest($_SERVER['REMOTE_ADDR'], $this-&gt;time);

/* Set user level to guest */
$this-&gt;username = GUEST_NAME;
$this-&gt;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, $subcell){
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-&gt;setError($field, "* Username not entered";
}
else{
/* Spruce up username, check length */
$subuser = stripslashes($subuser);
if(strlen($subuser) &lt; 5){
$form-&gt;setError($field, "* Username below 5 characters";
}
else if(strlen($subuser) &gt; 30){
$form-&gt;setError($field, "* Username above 30 characters";
}
/* Check if username is not alphanumeric */
else if(!eregi("^([0-9a-z])+$", $subuser)){
$form-&gt;setError($field, "* Username not alphanumeric";
}
/* Check if username is reserved */
else if(strcasecmp($subuser, GUEST_NAME) == 0){
$form-&gt;setError($field, "* Username reserved word";
}
/* Check if username is already in use */
else if($database-&gt;usernameTaken($subuser)){
$form-&gt;setError($field, "* Username already in use";
}
/* Check if username is banned */
else if($database-&gt;usernameBanned($subuser)){
$form-&gt;setError($field, "* Username banned";
}
}

/* Password error checking */
$field = "pass"; //Use field name for password
if(!$subpass){
$form-&gt;setError($field, "* Password not entered";
}
else{
/* Spruce up password and check length*/
$subpass = stripslashes($subpass);
if(strlen($subpass) &lt; 4){
$form-&gt;setError($field, "* Password too short";
}
/* Check if password is not alphanumeric */
else if(!eregi("^([0-9a-z])+$", ($subpass = trim($subpass)))){
$form-&gt;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-&gt;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-&gt;setError($field, "* Email invalid";
}
$subemail = stripslashes($subemail);
}

/*check for cell phone*/

$field = "cell"; //Use field name for cell phone
if(!$subcell || strlen($subcell = trim($subcell)) == 0){
$form-&gt;setError($field, "* cell phone not entered";
}
else{
/* Spruce up cell phone, check length */
$subcell = stripslashes($subcell);
if(strlen($subcell) &lt; 10){
$form-&gt;setError($field, "* cell phone bellow 10 #";
}
else if(strlen($subcell) &gt; 10){
$form-&gt;setError($field, "* cell phone above 10 #";
}
/* Check if cell phone is not numeric */
else if(!eregi("^([0-9])+$", $subcell)){
$form-&gt;setError($field, "* cell phone not numeric";
}

/* Check if cell phone is already in use */
else if($database-&gt;usernameTaken($subcell)){
$form-&gt;setError($field, "* cell phone already in use";
}
/* Check if cell phone is banned */
else if($database-&gt;usernameBanned($subcell)){
$form-&gt;setError($field, "* cellphone banned";
}
}

/* Errors exist, have user correct them */
if($form-&gt;num_errors &gt; 0){
return 1; //Errors with form
}
/* No errors, add the new account to the */
else{
if($database-&gt;addNewUser($subuser, md5($subpass), $subemail, $subcell)){
if(EMAIL_WELCOME){
$mailer-&gt;sendWelcome($subuser,$subemail,$subpass);
}
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, $subcell){
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-&gt;setError($field, "* Current Password not entered";
}
else{
/* Check if password too short or is not alphanumeric */
$subcurpass = stripslashes($subcurpass);
if(strlen($subcurpass) &lt; 4 ||
!eregi("^([0-9a-z])+$", ($subcurpass = trim($subcurpass)))){
$form-&gt;setError($field, "* Current Password incorrect";
}
/* Password entered is incorrect */
if($database-&gt;confirmUserPass($this-&gt;username,md5($subcurpass)) != 0){
$form-&gt;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) &lt; 4){
$form-&gt;setError($field, "* New Password too short";
}
/* Check if password is not alphanumeric */
else if(!eregi("^([0-9a-z])+$", ($subnewpass = trim($subnewpass)))){
$form-&gt;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-&gt;setError($field, "* New Password not entered";
}

/* cellphone error checking */
$field = "cell"; //Use field name for cell
if($subcell && strlen($subcell = trim($subecell)) &gt; 0){
/* Check if valid cell phone */
$regex = "^[_+0-9-]*";

if(!eregi($regex,$subcell)){
$form-&gt;setError($field, "* cellphone invalid";
}
$subcell = stripslashes($subcell);
}

/* Email error checking */
$field = "email"; //Use field name for email
if($subemail && strlen($subemail = trim($subemail)) &gt; 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-&gt;setError($field, "* Email invalid";
}
$subemail = stripslashes($subemail);
}

/* Errors exist, have user correct them */
if($form-&gt;num_errors &gt; 0){
return false; //Errors with form
}

/* Update password since there were no errors */
if($subcurpass && $subnewpass){
$database-&gt;updateUserField($this-&gt;username,"password",md5($subnewpass));
}

/* Change Email */
if($subemail){
$database-&gt;updateUserField($this-&gt;username,"email",$subemail);
}

/* Change cell */
if($subcell){
$database-&gt;updateUserField($this-&gt;username,"cell",$subcell);

/* Success! */
return true;
}

/**
* isAdmin - Returns true if currently logged in user is
* an administrator, false otherwise.
*/
function isAdmin(){
return ($this-&gt;userlevel == ADMIN_LEVEL ||
$this-&gt;username == ADMIN_NAME);
}

/**
* 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-&gt;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&lt;$length; $i++){
$randnum = mt_rand(0,61);
if($randnum &lt; 10){
$randstr .= chr($randnum+48);
}else if($randnum &lt; 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;

?&gt;
</font id=code></pre id=code>

thnaks in advance

Reply to this topic