WeberDev.com PHP and MySQL Code

LOG IN
BEGINNER GUIDES  |  PHP CLASSES  |  CODE SEARCH  |  ARTICLES SEARCH  |  PHP FORUMS  |  PHP MANUAL  |  PHP FUNCTIONS LIST  |  WEB SITE TEMPLATES
Start typing to search for PHP and MySQL Code Snippets and Articles Search
Submit a code Example / Snippet Submit Your Code
Search Engine Optimization Monitor SEO Monitor
Web Site UpTime Monitor UpTime Monitor
WeberDev's Monthly code contest PHP Code Contest
Your Personal Examples List My Favorite Examples
Your Personal Articles List My Favorite Articles
Edit Account Info Update Your Profile
PHP Code Search
Web Development Forums
Learn MySQL Playing Trivia
PHPBB2 Templates
Web Development Index
Web Development Resources
Web Development Content
PHPClasses
PHP Editor
PHP Jobs
Vision.To Design
Ajax Tutorials
PHP Programming Help
PHP/MySQL Programming
Webmaster Resources
Webmaster Forum
XML meta language
website builder
Mobile Dev World

Go Back Add a Comment Send this example to a friend Add this Article to your personal favoritest for easy future access to your favorite Code Examples and Articles. Submit a code example Print this code example.
BACK ADD A COMMENT SEND TO A FRIEND ADD TO MY FAVORITES ADD CODE EXAMPLES PRINT
Title : SQL / PHP based Integrated Authentication
Categories : PHP, Authentication, Databases, MySQL Click here to Update Your Picture
Shashank Prabhakara
Date : May 30th 2009
Grade : 2 of 5 (graded 3 times)
Viewed : 5275
File : 4967.zip
Images : No Images for this code example.
Search : More code by Shashank Prabhakara
Action : Grade This Code Example
Tools : My Examples List

 
Like this code?
Show the author your appreciation.
Submit your own code examples 
 

Any good website needs authentions/username requirements for personalisation. In order to make the process simpler, here's an intigration of the authentication system with all the neccessary instructions.

For code, requirements and instructions check the file...

auth.inc
<?
//How this script works:
//    Username and password are checked for authenticity.
//        If success:
//            Generate a MD5 string from TIME()
//            Store that string in the database for that user
//            Set that username, password, and string as a cookie on user's machine
//        If failure:
//            Log username and IP address to a file

//During subsequent page loads:
//        Retrieve data stored in cookie
//        Match all three fields stored in cookie with database info.
//            If success:
//                Page load may continue
//            Otherwise user is presented with login form

//New user query: "insert into acl (username, password) VALUES ('theusername', encrypt('thepassword','theusername'));"
//Change password query: "update acl set password=encrypt('mypass','theusername') where username='theusername';"

// Database settings .. these must work!!
$db_hostname     = 'localhost';                        //Server where MySQL is running.
$db_user         = 'john';                        //Username to connect with.
$db_pass         = 'yourpass';                        //Password to connect with.

define( "DATABASE", "your_database" );                    //Database name where table 'acl' is located.

//Logging defines. Comment out the following two lines for no logging.
define( "BASE_DIR", "/usr/local/myappdir" );         //Your site's base directory (outside of docroot)
define( "AUTH_LOG", BASE_DIR . "/logs/auth_log" );    //Filename/subdirectory of logfile. Make sure the file
                            //  exists and is writeable by the owner of your webserver
                            //  process. Usually 'nobody'.

//define( "IMAGE", "images/ourimage.jpg" );            //Image for the title page. Comment out the line for none.
define( "TITLE", "Please Login" );                //Title for the login page.
define( "EXPIRE", 14400 );                    //Seconds until the cookie expires.

$bg_color        = '#FFFFFF';
$text_color      = '#000000';
$link_color      = '#BC80C3';
$vlink_color     = '#BC80C3';
$alink_color     = '#9d9d9d';


function
DisplayLoginForm ($err_string) {
    require(
'htmldoc.inc');

    global
$THIS_URL;

    global
$bg_color;
    global
$text_color;
    global
$link_color;
    global
$vlink_color;
    global
$alink_color;

   
$html = new htmldoc();
   
$html->printheader( $bg_color, $text_color, $link_color, $vlink_color, $alink_color, TITLE );

   
?>
        <CENTER>
        <? if (defined("IMAGE")) { ?>
        <IMG SRC="<? echo $root_url . IMAGE?>" BORDER="0">
        <? } ?>
        <BR><BR>
        <FONT SIZE=+1 COLOR="#FF0000"><? echo $err_string ?></FONT>
        <FORM NAME=login ACTION=<? echo $THIS_URL ?> METHOD=post>
        <TABLE BORDER=0>
        <TR>
        <TD><B>Username:</B></TD>
        <TD><INPUT NAME="username" TYPE="text" SIZE="10"></TD>
        </TR>
        <TR>
        <TD><B>Password:</B></TD>
        <TD><INPUT NAME="password" TYPE="password" SIZE="10"></TD>
        </TR>
        </TABLE>
        <BR>
        <INPUT TYPE="submit" VALUE="Log in">
        </FORM>

    <?
        $html
->printfooter();
    exit;

}

function
GenerateSecret ( $username, $encrypted_password ) {

   
$md5str = MD5( TIME() );
   
$cookie_val = "$username-$encrypted_password-$md5str";
   
setcookie( "php_mini_auth", $cookie_val, time()+EXPIRE);
   
$arg = "update acl set string='$md5str' where username='$username'";
   
$row = mysql_db_query( DATABASE, $arg );

}

function
AuthenticateUser ( $username, $password ) {
   
    global
$ip;
    global
$host;
    global
$referer;

   
$arg = "select password, 1 as auth from acl where username='$username' and password=encrypt('$password','$username')";
   
$row = mysql_fetch_array(mysql_db_query( DATABASE, $arg ));

    if (
$row[auth]) {
        if (
defined( "AUTH_LOG" ))
       
error_log( date("Ymd H:i:s") . " -- $ip -- Username: '$username' authenticated\n", 3, AUTH_LOG);
       
GenerateSecret( $username, $row[password] );
        }
        else {
        if (
defined( "AUTH_LOG" ))
           
error_log( date("Ymd H:i:s") . " -- $ip -- Username: '$username' authentication failure\n", 3, AUTH_LOG);
           
DisplayLoginForm( "Please log in .." );
        }
}

function
AuthenticateCookie ( $cookie, $username, $password ) {
   
   
$cookie_var = split("-", $cookie);
   
$ck_username = $cookie_var[0];
   
$ck_password = $cookie_var[1];
   
$secret = $cookie_var[2];
   
   
$arg = "select 1 as auth from acl where username='$ck_username' and password='$ck_password' and string='$secret'";
   
$row = mysql_fetch_array(mysql_db_query( DATABASE, $arg ));
   
    if (!(
$row[auth]))
       
AuthenticateUser ( $username, $password );
        else return
$ck_username;
   
}

mysql_connect($db_hostname,$db_user,$db_pass) or
   die(
"Unable to connect to the SQL server...");

$THIS_URL=getenv("SCRIPT_NAME");
$ip = getenv("REMOTE_ADDR");
$host = getenv("REMOTE_HOST");
$referer = getenv("REMOTE_REFERER");

if (
$php_mini_auth)
   
$username = AuthenticateCookie( $php_mini_auth, $username, $password );
    else
    if (
$username)
       
AuthenticateUser( $username, $password );
        else
           
DisplayLoginForm( "Please log in ..." );

$result = mysql_db_query( DATABASE,"SELECT * from acl WHERE username='$username'");
$row=mysql_fetch_row($result);

?>



htmldoc.inc
<?

class htmldoc
{

   
//Class constructor.
   
function htmldoc()
        {
                return;
        }

    function
printheader ( $bg_color, $text_color, $link_color, $vlink_color, $alink_color, $title )
    {
       
?>
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<HTML><HEAD><TITLE><?php echo $title; ?></TITLE>
</HEAD>
<BODY bgcolor="<?php echo $bg_color; ?>"
      text="<?php echo $text_color; ?>"
      link="<?php echo $link_color; ?>"
      vlink="<?php echo $vlink_color; ?>"
      alink="<?php echo $alink_color; ?>">
        <?
   
}

    function
starttimer ( $root_url )
    {
       
?>
<META http-equiv="Refresh" content="1800;URL=<?php echo $root_url; ?>/logout.php3;TARGET=_top">
        <?
   
}

    function
printfooter ()
    {
       
?>
</BODY></HTML>
        <?
   
}


}

?>



INSTALL
*************************************************
*        PHP Mini Auth            *
*************************************************




**License:
This software is freely distributable under the GNU public license, a
copy of which you should have received with this software (in a file
called COPYING).


**General Information:
    PHP Mini Auth is designed to be a "quick and easy" alternative to
something like PHPLIB. PHPLIB was too large for my needs, so I wrote this
instead. There is, however, no script to add/edit users (yet, anyway), so
you'll have to do this through the MySQL client for now.

    It uses the MySQL 'encrypt()' function to encrypt and match passwords.
It uses the user's username as a salt. Once a match is confirmed, an MD5
checksum is generated and all three identifiers are set in a cookie on the
user's machine. Expiration time on the cookie is configurable.

    This is a beatable authentication system. But it wouldn't be easy.
You'd basically have to either have access to the database or to the computer
with the cookie on it to be able to forge an authentication.

    I run this on a multi-user system, but I run it on an SSL webserver.
If you're really worried about security, USE SSL!

**Required Software:
    1.  PHP 3.0.8 or greater, with a 3.22.x or newer version of MySQL.
        PHP needs to be compiled with the --with-mysql option for
        database connectivity to work. See the PHP documentation for more
        information.
        (see http://www.mysql.com and http://www.php.net)
    1.  Apache with PHP compiled in as a module.
        (see http://www.apache.org and http://www.php.net for more info)

**Installation Instructions:
    1.  Copy auth.inc and htmldoc.inc to a directory *outside* of your html
        document tree.
    2.  If you have a MySQL database already created that you wish to have
        the ACL (access list) table created in, start the mysql client and
        connect to the database.

        Otherwise, you must create a database. See the MySQL documentation
        for information on doing this.

        Once you have the mysql client open and connected to the database
        you want to use, issue the following command:

CREATE TABLE acl (
  id int(16) DEFAULT '0' NOT NULL auto_increment,
  username varchar(16) DEFAULT '' NOT NULL,
  password varchar(16) DEFAULT '' NOT NULL,
  staffname varchar(32) DEFAULT '' NOT NULL,
  string varchar(100),
  PRIMARY KEY (id)
);

        Next, you must add a user. The command for this is:

INSERT INTO acl ( username, password ) VALUES ( 'the_username', encrypt('the_password','the_username') );
   
alternatively, if you want to use the 'staffname' field, or some other field that you add on your own:
INSERT INTO acl ( username, password, staffname ) VALUES ( 'the_username', encrypt('the_password','the_username'), 'John Soandso' );

    3.  Here's where you need to make a decision. You have two ways of making
        this script "work" with your website.

        "Every single page on this server or virtual host is private and
         must be password protected!!"

        If this is your case, add a line inside your <VirtualHost> directive
        like this, and then restart Apache:

            php3_auto_prepend_file /path/to/auth.inc

        This is very useful. It will automatically prepend the auth script
        to every php document requested through this virtual host. Everything
        is protected. This is the way I *reccomend* doing it.


        "But I only need some pages to be private!"

        Ok.. then you have to put the following line inside of every php
        document you want protected.

            <? require('/path/to/auth.inc'); ?>

    4.  Next, edit the auth.inc file and change the variables near the top of
        the script. Then do:

        chmod 755 auth.inc htmldoc.inc

        And you should be ready to rip!


Good luck!



Full membership authentication system.
Categories : Authentication, MySQL, PHP, Databases
bookmarker - PHP, PHPLIB, MySQL WWW based bookmark manager
Categories : MySQL, PHP, MySQL, Complete Programs, Databases
PHP4 AND MySQL Authentication
Categories : PHP, MySQL, Authentication, Databases
Authorize Me! An authentication script.
Categories : MySQL, Databases, Authentication, PHP
Implementing a "Members ONLY" area
Categories : PHP, MySQL, Databases, Authentication
This program allows you to upload an ODBC ressource - i.e. an MS-Access database to a MySQL server.
Categories : Databases, MySQL, Complete Programs, PHP, Databases
complete, simple, working example of a login screen/system using php functions, cookies, and a mysql database for begginers.
Categories : Authentication, Complete Programs, PHP, MySQL, Databases
I`d like to use the mysql_fetch_row function along with a "randomizer" function that would give me a random result from a mySQL table.
Categories : General SQL, MySQL, PHP, Databases
Simple database class
Categories : PHP, PHP Classes, MySQL, Databases
This is a PHP/mySQL based Photo Album I wrote because I had too much time on my hands and even more photographs online.
Categories : PHP, MySQL, Databases, HTML and PHP
Finds the median in an array of numbers - Can be used with a MySql database column read into an array
Categories : PHP, Arrays, Databases, MySQL
AJAX Data Grid System using php and mysql. A complete login system with the ability to display data in a grid using ajax. Add , update and delete the records without reloading the page.
Categories : PHP, AJAX, Databases, MySQL, Java Script
This program will take data from a user via a web based form, validate it, show it to the user for re-validation, and finally insert it into the database. Plenty of sanity checking on the fields in the form.
Categories : MySQL, HTML and PHP, PHP, Complete Programs, Databases
Message of the Day - Random Message (Needs MySQL!)
Categories : Databases, HTML and PHP, PHP, MySQL
Simple usersOnline class - keep track of how many users are online on your site
Categories : PHP, PHP Classes, Databases, MySQL
 mark wilson wrote :1875
This is a very interesting solution. I've installed and 
configured it on my site, but i just seems to reload the 
login page. I've tested my variables and all seem to 
function when used manually (i.e. conecting, selecting 
from db). Should there be a separate file to load _after_ 
authentication? My log file is also empty although it is 
findable and writable by the webserver user. 

How can i work through this to debug it?

Thanks