Solved

basic Auth class loginfunction

Posted on 2004-09-28
61
279 Views
Last Modified: 2008-02-01
Alright...this almost must be a simple question.

I used the original Auth example from the PEAR class manual

<?
require_once "Auth/Auth.php";

function loginFunction()
{

    echo "<form method=\"post\" action=\"" . $_SERVER['PHP_SELF'] . "?login=1\">";
    echo "<input type=\"text\" name=\"username\">";
    echo "<input type=\"password\" name=\"password\">";
    echo "<input type=\"submit\">";
    echo "</form>";
}

if ($_GET['login'] == 1) {
    $optional = true;
} else {
    $optional = false;
}

$dsn = "mysql://user:password@localhost/database";

$a = new Auth("DB", $dsn, "loginFunction", $optional);

$a->start();

echo "Everybody can see this text!<br />";

if (!isset($_GET['login'])) {
    echo "<a href=\"test.php?login=1\">Click here to log in</a>\n";
}

if ($a->getAuth()) {
    echo "One can only see this if he is logged in!";
}
?>

but I get an error: Fatal error: Undefined class name 'db' in /opt/guide/www.tijdelijk.nl/HTML/Auth/Container/DB.php on line 130

could someone tell me why this is or give me an example of an Auth class.
I want to make a loginfunction which checks on IP, sends cookies and makes a sessioncheck.
If someone can provide me with enough information to make something like that, he or she will receive 500 points !!!
0
Comment
Question by:cleany
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 35
  • 26
61 Comments
 

Author Comment

by:cleany
ID: 12167937
I`ve got a database with a table:

people with fields "personid", "personname", "email", "password" and "persontype"
0
 
LVL 5

Accepted Solution

by:
php-webdesign earned 500 total points
ID: 12167969
hey i once created a login script with MD5, cookies and sessions....

code is as follwoing:

is the post i saw you have .nl so i will post it in dutch... if that is allowed.. otherwise i will translate it

index.php

<?php
//als je al ingelogt bent en je roept de pagina aan word je dorgestuurd:
include("geheimwoord.inc");
$hash = md5($_SESSION["inlognaam"].$secretword);
if($hash == $HTTP_COOKIE_VARS["userhash"]) {
      header("Location: index2.php");

//anders geeft hij de inlog pagina weer
} else {
      echo("
        <link href=\"../css.css\" rel=\"stylesheet\" type=\"text/css\">
<form name=\"form1\" method=\"post\" action=\"login.php\">
  <table class=\"tekst\" width=\"100%\"  border=\"0\" cellspacing=\"0\" cellpadding=\"0\">
    <tr>
      <td width=\"95\">Inlognaam:</td>
      <td><input name=\"inlognaam\" type=\"text\" id=\"inlognaam\"></td>
    </tr>
    <tr>
      <td width=\"95\">Wachtwoord:</td>
      <td><input name=\"wachtwoord\" type=\"password\" id=\"wachtwoord\"></td>
    </tr>
    <tr>
      <td><div align=\"right\">
        <input type=\"submit\" name=\"Submit\" value=\"Submit\">
      </div></td>
      <td><input type=\"reset\" name=\"Submit2\" value=\"Reset\"></td>
    </tr>
  </table>
</form>
        ");
      exit();
}
?>

index2.php

<?php include("inc_logged_in.php");?>
//de rest van het document

login.php

<?php
error_reporting(E_ALL);
//start de sessie
session_start();

//als de pagina goed is aangeroepen gaan we verder
if(!empty($_POST)){

//include de databse connectie
    include("inc_connect.php");

//encrypt het net verstuurde wachtwoord met md5
    $wachtwoord = md5($_POST["wachtwoord"]);

//zet de query in een variabele
    $query = "SELECT * FROM beheer
        WHERE inlognaam = '" . $_POST["inlognaam"] ."'
        AND wachtwoord = '$wachtwoord'";

//voer de query uit, en zet het resultaat in een variabele
    $result = mysql_query($query) or die("FOUT : " . mysql_error());

//als de username en wachtwoord bestaan gaat hij verder
    if(mysql_num_rows($result) > 0){
        include("geheimwoord.inc");
        $hash = md5($inlognaam.$secretword);

//zet gebrukersnaam in een sessie
        session_register("inlognaam");

//zet de md5 hash waarde in een cookie
        Setcookie("userhash", $hash, Time()+3600);

//stuur hem door naar de beveilifde pagina
        header("Location: index2.php");

//als de login gegevens niet kloppen geef je een fout
    }else{
        exit("Foute login gegevens");
    }

//als de pagina niet vanuit de index pagina is aangeroepen ga je erheen
}else{
    header("Location: index.php");
}
?>

inc_logged_in.php

<?php
//start de sessie
session_start();

include("geheimwoord.inc");

//vul de hash waarde met de sessie waarde en het geheime woord voor vergelijking
$hash = md5($_SESSION["inlognaam"].$secretword);

//als ze gelijk zijn ben je ingelogd
if($hash == $HTTP_COOKIE_VARS["userhash"]) {
      echo("<span class=\"menu\">U bent ingelogd.</span>");

//zo niet geef een fout
} else {
      echo("<SCRIPT LANGUAGE=\"JavaScript\">
        redirTime = \"5000\";
        redirURL = \"index.php\";
        function redirTimer() { self.setTimeout(\"self.location.href = redirURL;\",redirTime); }
        </script>
        </HEAD>
        <BODY onLoad=\"redirTimer()\">
          <table width=\"100%\"  border=\"0\" cellspacing=\"0\" cellpadding=\"0\">
        <tr>
      <td class=\"tekst\">
      Sorry, de inlog cookies zijn niet meer geldig of vals, log opniew in!<br>
      u word binnen 5 seconden naar de inlog pagina gestuurd
      </td></tr></table>");
      exit();
}
?>

inc_connect.php

<?php
$username = "username";
$password = "wachtwoord";
$host = "localhost";
$dbnaam = "gebruikers";
$db = mysql_connect($host, $username, $password) or die (mysql_error());
mysql_select_db($dbnaam, $db) or die (mysql_error());
?>

geheimwoord.inc

<?php
$secretword = "geheimwoord";
?>

register.php

<?php
include("inc_connect.php");
if(!empty($_POST)){
    //Eerst controlleren of inlognaam al bestaat in de database
    $inlognaam = $_POST["inlognaam"];
    $wachtwoord = $_POST["wachtwoord"];
    $query = "SELECT * FROM beheer
             WHERE inlognaam = '$inlognaam';";
    $result = mysql_query($query) or die ("FOUT : " . mysql_error());
    if(mysql_num_rows($result) > 0){
        //inlognaam bestaat al. foutmelding
        die("Inlognaam bestaat al");
    }else{
        //wachtwoord omzetten naar md5
        $wachtwoord = md5($wachtwoord);
        //OK, query opbouwen
        $query="INSERT INTO beheer (inlognaam, wachtwoord) ";
        $query .= "VALUES ('$inlognaam', '$wachtwoord');";
        $result = mysql_query($query) or die("FOUT: " . mysql_error());
        die("aanmelden gelukt");
    }
}
?>

<form name="form1" method="post" action="<?php echo($_SERVER["PHP_SELF"]);?>">
Inlognaam: <input name="inlognaam" type="text" size="30" maxlength="40"><br>
Wachtwoord: <input name="wachtwoord" type="password" size="30" maxlength="8"><br>
<input type="submit" name="submit" value="registreren">
<input name="reset" type="reset" value="leegmaken">
</form>

hope this is what you are looking for... think you will have to edit it to your choice...
0
 

Author Comment

by:cleany
ID: 12168053
I hope so...dank je...

eigenlijk moest ik ook iets met PEAR classes doen....
dat weet je zeker niet ?


if it works the 500 points are for you, but I really need to have PEAR classes working along with this...
0
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 5

Expert Comment

by:php-webdesign
ID: 12168095
well i am sure this script works... but it isn't build with the PEAR classes sorry

never really worked with the pear class... but you can anyway use the script
0
 

Author Comment

by:cleany
ID: 12168288
hmm...echt vreemd...

"Foute login gegevens"

krijg ik als melding...net als bij die andere...
0
 

Author Comment

by:cleany
ID: 12168330
alright...what does it say if you go to http://www.addrenaline.com/~ip-03/login

and inlognaam->test and wachtwoor->test
0
 
LVL 5

Expert Comment

by:php-webdesign
ID: 12168331
indeed strange... try putting error_reporting(E_ALL); on
0
 

Author Comment

by:cleany
ID: 12168391
Parse error: parse error in /home/ip-03/public_html/login/login.php on line 4

huh ?

this is line 4: session_start();
0
 

Author Comment

by:cleany
ID: 12168399
database:

CREATE TABLE `people` (
  `id` int(11) NOT NULL auto_increment,
  `username` varchar(6) NOT NULL default '',
  `password` varchar(10) NOT NULL default '',
  PRIMARY KEY  (`id`)
) TYPE=MyISAM AUTO_INCREMENT=3 ;
0
 
LVL 5

Expert Comment

by:php-webdesign
ID: 12168430
really strange.....

don't know what that could be
0
 

Author Comment

by:cleany
ID: 12168537
ja het is niet echt de eerste keer dat zoiets me overkomt...echt gestoord word je er van...

hoe ziet je tabel eruit dan ?
0
 
LVL 5

Expert Comment

by:php-webdesign
ID: 12168574
CREATE TABLE `beheer` (
`inlognaam` varchar(50) NOT NULL default 'gebruiker',
`wachtwoord` varchar(50) NOT NULL default 'wachtwoord',
UNIQUE KEY `inlognaam` (`inlognaam`)
) TYPE=MyISAM;
0
 

Author Comment

by:cleany
ID: 12168650
geen id ?
0
 
LVL 5

Expert Comment

by:php-webdesign
ID: 12168658
oooow sorry

CREATE TABLE `people` (
`id` int(11) NOT NULL auto_increment,
`inlognaam` varchar(50) NOT NULL default 'gebruiker',
`wachtwoord` varchar(50) NOT NULL default 'wachtwoord',
UNIQUE KEY `inlognaam` (`inlognaam`)
) TYPE=MyISAM;
0
 

Author Comment

by:cleany
ID: 12168840
probably i`m doing something wrong, but I don`t know what...

this loginscript works:

<br><form method="post" action="login.php">
<table width="50%" border="5" bgcolor="#F0F7B7" bordercolor="#BBF0D4" cellpadding="0" cellspacing="0">
<tr>
<td>voer hieronder je naam en wachtwoord in:</td>
</tr>
<tr>
<td>Naam
<input type="hidden" name="Submit" value="1"></td>
<td> <input type="text" name="naam"> </td>
</tr>
<tr>
<td>Wachtwoord</td>
<td> <input type="password" name="passwd"> </td>
</tr>
<tr>
<td>&nbsp;</td>
<td> <input name="submit" type="submit" value="Login">
</td>
</tr>
<p>
<?php

If ($Submit) {
$db = mysql_connect ($dbhost, $dbname, $dbpasswd) or die ("Verbinding mislukt");
mysql_select_db($dbname, $db);
$naam = addslashes($naam);
$passwd = addslashes($passwd);
$query = "SELECT user_id, naam, passwd FROM users WHERE naam = '$naam' AND passwd = '$passwd' ORDER BY user_id ASC";
$Recordset1      = mysql_query($query);
$id = mysql_fetch_assoc($Recordset1);
$Results = mysql_num_rows($Recordset1);

if ($Results == '1') {
$Login = "1";
$Idcode = $id['user_id'];
$Nickname = $id['naam'];

session_register("Login");
session_register("Idcode");
session_register("naam");

echo "<p><tr><td>welkom <b>";
echo $Nickname;
echo "</b></td></tr><tr><td>Je bent ingelogd. Klik <a href=\"index.php\" target=\"_blank\">hier</a> om verder te gaan.</td></tr>";
echo "<tr><td>Om je wachtwoord te wijzigen ga naar <a href=\"passwd.php\">wachtwoord</a></td></tr>";
echo "</p>";
}
else {
echo "<p><BR>Je gebruikersnaam of password klopt niet.</p>";
}
}
?>
</p>
</form>

but the one above doesn`t....strange...
0
 

Author Comment

by:cleany
ID: 12168844
I mean the other way around...
0
 
LVL 5

Expert Comment

by:php-webdesign
ID: 12168869
can't follow you :s
0
 

Author Comment

by:cleany
ID: 12168989
alright...this above is also a loginscript (not save though), but this works, so I don`t understand why this one works and the other one doesn`t...
0
 
LVL 5

Expert Comment

by:php-webdesign
ID: 12169000
is your save_session_path etc set in your php.ini?

0
 

Author Comment

by:cleany
ID: 12169079
session.save_path = /tmp

maar dit is een remote adres, of maakt dat niet uit ?
0
 

Author Comment

by:cleany
ID: 12169090
there`s no remote php.ini in the sites dir`s

but the script above also uses session_start();
0
 
LVL 5

Expert Comment

by:php-webdesign
ID: 12169108
session variables are stored on the SERVER!!

so you need to apply that path to an existing path. an CHMOD it 777
0
 

Author Comment

by:cleany
ID: 12169137
Now it says...

Warning: Cannot modify header information - headers already sent by (output started at /home/ip-03/public_html/login/includes/connect.php:15) in /home/ip-03/public_html/login/login.php on line 32

Warning: Cannot modify header information - headers already sent by (output started at /home/ip-03/public_html/login/includes/connect.php:15) in /home/ip-03/public_html/login/login.php on line 35

it gets weirder all the time....
0
 
LVL 5

Expert Comment

by:php-webdesign
ID: 12169158
session_start(); needs to be at the very top of the page!
0
 

Author Comment

by:cleany
ID: 12169248
it is...
0
 
LVL 5

Expert Comment

by:php-webdesign
ID: 12169277
session_register("Login");
session_register("Idcode");
session_register("naam");

replace with

$_SESSION['login'] = $Login;

etc
0
 

Author Comment

by:cleany
ID: 12169310
alright but I`m using yours right now, because I thought that maybe the chmod was the problem...
0
 
LVL 5

Expert Comment

by:php-webdesign
ID: 12169352
that is really really really strange :s

works fine for me
0
 

Author Comment

by:cleany
ID: 12169745
ok...what is this !?

Notice: Undefined index: wachtwoord in /opt/guide/www.tijdelijk.nl/HTML/test/login.php on line 13

Notice: Undefined index: inlognaam in /opt/guide/www.tijdelijk.nl/HTML/test/login.php on line 17
Foute login gegevens
0
 
LVL 5

Expert Comment

by:php-webdesign
ID: 12169766
that is a notice... if you now put error_reporting(E_ALL); off by commenting the line... i think it will work
0
 

Author Comment

by:cleany
ID: 12169860
nee...het is hopeloos...
0
 
LVL 5

Expert Comment

by:php-webdesign
ID: 12169882
sorry, dan weet ik het ook niet meer
0
 

Author Comment

by:cleany
ID: 12169903
hij zegt gewoon dat de combinatie gebruiker/password niet klopt terwijl dat wel zo is...
0
 
LVL 5

Expert Comment

by:php-webdesign
ID: 12169930
heb je het wachtwoord er wel als MD5 in de database staan?!
0
 

Author Comment

by:cleany
ID: 12169973
hij staat er gehashed...
0
 
LVL 5

Expert Comment

by:php-webdesign
ID: 12169979
dan snap ik het niet :(
0
 
LVL 5

Expert Comment

by:php-webdesign
ID: 12169985
je kan kijken als je de waarde uit de database echoed....

en zelf met je eigen oog deze waarde vergelijken...
0
 

Author Comment

by:cleany
ID: 12187869
ik krijg deze meldingen....

Notice: Undefined variable: inlognaam in /opt/guide/www.tijdelijk.nl/HTML/login.php on line 25

Warning: Cannot modify header information - headers already sent by (output started at /opt/guide/www.tijdelijk.nl/HTML/inc_connect.php:11) in /opt/guide/www.tijdelijk.nl/HTML/login.php on line 31

Warning: Cannot modify header information - headers already sent by (output started at /opt/guide/www.tijdelijk.nl/HTML/inc_connect.php:11) in /opt/guide/www.tijdelijk.nl/HTML/login.php on line 34

kan je deze pagina zien?:
http://212.204.230.90/login.php

login.php=
<?php
error_reporting(E_ALL);
//start de sessie
session_start();

//als de pagina goed is aangeroepen gaan we verder
if(!empty($_POST)){

//include de databse connectie
    include("inc_connect.php");

//encrypt het net verstuurde wachtwoord met md5
    $wachtwoord = md5($_POST["wachtwoord"]);

//zet de query in een variabele
    $query = "SELECT * FROM beheer
        WHERE inlognaam = '" . $_POST["inlognaam"] ."'
        AND wachtwoord = '$wachtwoord'";
//voer de query uit, en zet het resultaat in een variabele
    $result = mysql_query($query) or die("FOUT : " . mysql_error());

//als de username en wachtwoord bestaan gaat hij verder
    if(mysql_num_rows($result) > 0){
        include("geheimwoord.inc");
        $hash = md5($inlognaam.$secretword);

//zet gebrukersnaam in een sessie
        session_register("inlognaam");

//zet de md5 hash waarde in een cookie
        Setcookie("userhash", $hash, Time()+3600);

//stuur hem door naar de beveilifde pagina
        header("Location: index2.php");

//als de login gegevens niet kloppen geef je een fout
    }else{
        exit("Foute login gegevens");
    }

//als de pagina niet vanuit de index pagina is aangeroepen ga je erheen
}else{
    header("Location: index.php");
}
?>

inc_connect.php=

<?php
$username = "mailm2";
$password = "(maak ik maar niet openbaar)";
$host = "localhost";
$dbnaam = "mailm2";
$db = mysql_connect($host, $username, $password) or die (mysql_error());
mysql_select_db($dbnaam, $db) or die (mysql_error());
?>
0
 
LVL 5

Expert Comment

by:php-webdesign
ID: 12187908
oke... now try removing the error_reporting(E_ALL); from login.php
0
 
LVL 5

Expert Comment

by:php-webdesign
ID: 12187919
and change         session_register("inlognaam");

into

$_SESSION['inlognaam'] = $inlognaam;

under:

//voer de query uit, en zet het resultaat in een variabele

add:

$inlognaam = $_POST['inlognaam'];
0
 

Author Comment

by:cleany
ID: 12187990
the first message is gone....the other ones are still there...strange...
0
 
LVL 5

Expert Comment

by:php-webdesign
ID: 12188005
change

//als de login gegevens niet kloppen geef je een fout
    }else{
        exit("Foute login gegevens");
    }

in:

//als de login gegevens niet kloppen geef je een fout
    }else{
echo $wachtwoord;
echo $loginnaam;
        exit("Foute login gegevens");
    }

and manually compare them with the database values
0
 

Author Comment

by:cleany
ID: 12188168
nothing happens...
0
 

Author Comment

by:cleany
ID: 12188269
even het aantal punten verhogen...
0
 
LVL 5

Expert Comment

by:php-webdesign
ID: 12188339
try to make the password field in the database bigger (max chars to 100)
0
 

Author Comment

by:cleany
ID: 12188354
I get the same errormessage...

isn`t it something with the "exit" or something ?
0
 

Author Comment

by:cleany
ID: 12188384
it`s something with the "header". It`s called  2 or 3 times or something...
0
 
LVL 5

Expert Comment

by:php-webdesign
ID: 12188428
yeah... beacause data is send before the header.. the header can't be executed

show me de complete code of the login.php that you have now
0
 

Author Comment

by:cleany
ID: 12188538
<?php
//start de sessie
session_start();

//als de pagina goed is aangeroepen gaan we verder
if(!empty($_POST)){

//include de databse connectie
    include("inc_connect.php");

//encrypt het net verstuurde wachtwoord met md5
    $wachtwoord = md5($_POST["wachtwoord"]);

//zet de query in een variabele
    $query = "SELECT * FROM beheer
        WHERE inlognaam = '" . $_POST["inlognaam"] ."'
        AND wachtwoord = '$wachtwoord'";
//voer de query uit, en zet het resultaat in een variabele
    $result = mysql_query($query) or die("FOUT : " . mysql_error());

            $inlognaam = $_POST['inlognaam'];
//als de username en wachtwoord bestaan gaat hij verder
    if(mysql_num_rows($result) > 0){
        include("geheimwoord.inc");
        $hash = md5($inlognaam.$secretword);

//zet gebrukersnaam in een sessie
$_SESSION['inlognaam'] = $inlognaam;

//zet de md5 hash waarde in een cookie
        Setcookie("userhash", $hash, Time()+3600);

//stuur hem door naar de beveilifde pagina
        header("Location: index2.php");

//als de login gegevens niet kloppen geef je een fout
    }else{
            echo $wachtwoord;
            echo $loginnaam;
        exit("Foute login gegevens");
    }
//als de pagina niet vanuit de index pagina is aangeroepen ga je erheen
}else{
    header("Location: index.php");
}
?>
0
 
LVL 5

Expert Comment

by:php-webdesign
ID: 12188554
hij zou nu goed moeten werken... maak je username en wachtwoord nog een keer aan... (oude verwijderen, nieuwe toeveogen)
0
 

Author Comment

by:cleany
ID: 12188577
heb ik gedaan....

maar toch is die fout er nog :S
0
 
LVL 5

Expert Comment

by:php-webdesign
ID: 12188585
dan snap ik er niets meer van...

je kan dit proberen:

maak ene nieuw php bestand (test.php)

<?
echo md5('jewachtwoord');
?>

vergelijk deze md5 hash met de hash in je database. als die niet gelijk is weet je dat het niet aan je login.php ligt
0
 

Author Comment

by:cleany
ID: 12188705
test.php
a9a3b41f618372309ac46ddb71ca067a

en

database:
098f6bcd4621d373cade4e832627b4f6

dit komt in weze overeen, maar is niet het zelfde
0
 

Author Comment

by:cleany
ID: 12189206
if(mysql_num_rows($result) > 0)

dit moet zijn

if(mysql_num_rows($result) > 1)
0
 

Author Comment

by:cleany
ID: 12189242
hij zegt alleen nog...

Foute login gegevens
0
 

Author Comment

by:cleany
ID: 12189588
even 50 erbij
0
 

Author Comment

by:cleany
ID: 12198607
oke...ik ben er uit...

het had iets met witregels te maken in de inc_connect.php

ik wist niet dat dat als HTML output gezien wordt....

de 500 points are yours !
0
 
LVL 5

Expert Comment

by:php-webdesign
ID: 12198614
thnx mate :) hoop dat je er veel aan hebt... en als er nog eens iets is laat het maar weten
0
 

Author Comment

by:cleany
ID: 12206841
had je ook een pagina waar je het wachtwoord kan aanpassen of niet ?
0
 
LVL 5

Expert Comment

by:php-webdesign
ID: 12208776
aanpassen niet, wel toevoegen.

Maar als je wil kanik die funtie wel schrijven
0
 

Author Comment

by:cleany
ID: 12209378
is dat veel werk ? want je moet wel rekening met de hashing houden he...
0

Featured Post

Instantly Create Instructional Tutorials

Contextual Guidance at the moment of need helps your employees adopt to new software or processes instantly. Boost knowledge retention and employee engagement step-by-step with one easy solution.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Foreword (July, 2015) Since I first wrote this article, years ago, a great many more people have begun using the internet.  They are coming online from every part of the globe, learning, reading, shopping and spending money at an ever-increasing ra…
These days socially coordinated efforts have turned into a critical requirement for enterprises.
The viewer will learn how to count occurrences of each item in an array.
The viewer will learn how to look for a specific file type in a local or remote server directory using PHP.

734 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question