Beste,
Ik ben met php5 begonnen en nu begrijp ik alles van databases en zo, maar als ik de tut volg die hier op de site staat doet het script niet wat ik wil:
Als je naar http://www.onlinetutorials.be gaat en probeert in te loggen
(user: test / pass: test) zal je zien dat als je op login klikt de form opnieuw geladen wordt en er helemaal niets gebeurt.
Ook als je probeert te refreshen krijg je in FF een alert dat je de post-gegevens opnieuw verzend...
De code:
<?
class login {
var $ingelogd;
/*login functie*/
function login() {
$this->ingelogd = false; //default uitgelogd
session_start(); //start een sessie
if(isset($_POST['loguit'])) $this->loguit();
elseif(isset($_SESSION['count'])&&isset($_SESSION['user_ID'])&&isset($_SESSION['username'])) {
$_SESSION['count']++; //als sessie al bestaat, tel aantal pagina's +1
$this->ingelogd = true; //ingelogd
}
elseif(isset($_COOKIE['user_ID'])&&isset($_COOKIE['pass_hash'])) {
$sql = "id = ".(int)$_COOKIE['user_ID']." AND password = '".addslashes($_COOKIE['pass_hash'])."'";
$controle = $this->controleer_paswoord($sql);
$this->ingelogd = $controle;
}
if(isset($_POST['username'])&&isset($_POST['password'])&&!$this->ingelogd) { //geen elseif, wordt dan sobieso uitgevoerd, ook als je last hebt met verkeerde info in cookies en via form wilt inloggen
$sql = "username = '".addslashes($_POST['username'])."' AND password = '".md5(addslashes($_POST['password']))."'";
$controle = $this->controleer_paswoord($sql);
$this->ingelogd = $controle;
}
if($this->ingelogd) {
setcookie ("user_ID",$_SESSION['user_ID'],time() + 3600*24*30,'/','http://www.onlinetutorials.be');
setcookie ("pass_hash",md5($_POST['password']),time() + 3600*24*30,'/','http://www.onlinetutorials.be');
}
}
/*controleert het wachtwoord*/
function controleer_paswoord($sql2) {
require('db_connect.php'); //script voor databaseconnect ( mysql_connect en mysql_select_db)
$sql = "SELECT username,user_ID FROM user WHERE ".$sql2; //nu volledige query
$result = mysql_query($sql) or die (mysql_error());
if($row = mysql_fetch_object($result)) {
$_SESSION['count']=1;
$_SESSION['user_ID']=$row->user_ID;
$_SESSION['username']=$row->username;
return true; //ingelogd
}
else return false; //niet ingelogd
}//end function
function is_ingelogd() {
return $this->ingelogd;
}//end function
function get_output() {
if($this->is_ingelogd) return 'U bent ingelogd!';
else include ('includes/login/login_form.php');
}//end function
function loguit() {
session_unset();
session_destroy();
setcookie ("user_ID", "", time() - 3600,"/", "jouw_domein.be");
setcookie ("pass_hash", "", time() - 3600,"/", "jouw_domein.be");
$this->ingelogd = false;
} //end function
}//end class
$bezoeker = new login();
?>
$sql="id = ".(int)$_COOKIE['user_ID']." AND password = '".addslashes($_COOKIE['pass_hash'])."'";
$controle=$this->controleer_paswoord($sql);
$this->ingelogd=$controle;
}
if(isset($_POST['username'])&&isset($_POST['password'])&&!$this->ingelogd){//geen elseif, wordt dan sobieso uitgevoerd, ook als je last hebt met verkeerde info in cookies en via form wilt inloggen
$sql="username = '".addslashes($_POST['username'])."' AND password = '".md5(addslashes($_POST['password']))."'";
dat komt omdat je niets aanroept.... je maakt wel de variabele aan voor de classe, maar ik zie nergens (indoen het php5 is) een __construct. en anders kun je helemaal onderaan, onder
<?
class login {
var $ingelogd;
/*login functie*/
function login() {
$this->ingelogd = false; //default uitgelogd
session_start(); //start een sessie
if(isset($_POST['loguit'])) $this->loguit();
elseif(isset($_SESSION['count'])&&isset($_SESSION['user_ID'])&&isset($_SESSION['username'])) {
$_SESSION['count']++; //als sessie al bestaat, tel aantal pagina's +1
$this->ingelogd = true; //ingelogd
}
elseif(isset($_COOKIE['user_ID'])&&isset($_COOKIE['pass_hash'])) {
$sql = "id = ".(int)$_COOKIE['user_ID']." AND password = '".addslashes($_COOKIE['pass_hash'])."'";
$controle = $this->controleer_paswoord($sql);
$this->ingelogd = $controle;
}
if(isset($_POST['username'])&&isset($_POST['password'])&&!$this->ingelogd) { //geen elseif, wordt dan sobieso uitgevoerd, ook als je last hebt met verkeerde info in cookies en via form wilt inloggen
$sql = "username = '".addslashes($_POST['username'])."' AND password = '".md5(addslashes($_POST['password']))."'";
$controle = $this->controleer_paswoord($sql);
$this->ingelogd = $controle;
}
if($this->ingelogd) {
setcookie ("user_ID",$_SESSION['user_ID'],time() + 3600*24*30,'/','http://www.onlinetutorials.be');
setcookie ("pass_hash",md5($_POST['password']),time() + 3600*24*30,'/','http://www.onlinetutorials.be');
}
}
/*controleert het wachtwoord*/
function controleer_paswoord($sql2) {
require('db_connect.php'); //script voor databaseconnect ( mysql_connect en mysql_select_db)
$sql = "SELECT username,user_ID FROM user WHERE ".$sql2; //nu volledige query
$result = mysql_query($sql) or die (mysql_error());
if($row = mysql_fetch_object($result)) {
$_SESSION['count']=1;
$_SESSION['user_ID']=$row->user_ID;
$_SESSION['username']=$row->username;
return true; //ingelogd
}
else return false; //niet ingelogd
}//end function
function is_ingelogd() {
return $this->ingelogd;
}//end function
function get_output() {
if($this->is_ingelogd) return 'U bent ingelogd!';
else include ('includes/login/login_form.php');
}//end function
function loguit() {
session_unset();
session_destroy();
setcookie ("user_ID", "", time() - 3600,"/", "jouw_domein.be");
setcookie ("pass_hash", "", time() - 3600,"/", "jouw_domein.be");
$this->ingelogd = false;
} //end function
}//end class
$bezoeker = new login();
$bezoeker->login();
?>
$sql="id = ".(int)$_COOKIE['user_ID']." AND password = '".addslashes($_COOKIE['pass_hash'])."'";
$controle=$this->controleer_paswoord($sql);
$this->ingelogd=$controle;
}
if(isset($_POST['username'])&&isset($_POST['password'])&&!$this->ingelogd){//geen elseif, wordt dan sobieso uitgevoerd, ook als je last hebt met verkeerde info in cookies en via form wilt inloggen
$sql="username = '".addslashes($_POST['username'])."' AND password = '".md5(addslashes($_POST['password']))."'";
@ultimatum...
ik zeg ook nergens dat dat verplicht is? leer lezen. ik zeg dat als je die niet hebt, de andere functies niet automatisch worden geladen (wat je in de constructor kan doen...
moet je dan in een soort script die functies gebruiken? met if en else?
want als ik nu die
$bezoeker->login() doe komt er helemaal geen output, maar als ik
$bezoeker->get_output() doe krijg ik wel het formpje te zien (spijtig genoeg met nog altijd het resultaat dat de pagina gewoon refreshed na het 'inloggen' en dat die form dan gewoon terugkomt
Als je bezoeker->login() inlaadt, laadt je gewoon de __CONSTRUCT opnieuw in, omdat de class en de functie dezelfde naam hebben. Tevens vind ik je class erg onlogisch vorm gegeven.
Als je het ergens gedownload hebt, staat daar geen uitleg bij dan..? Want ik zou het ook niet durven zeggen... Vind het maar een vage class eerlijk gezegd.
dat $bezoeker->login() hoef je niet te doen, want de login functie wordt al aangeroepen omdat het een constructor is. (de functie met dezelfde naam als de class is de constructor)..
kheb al iets anders die meer up-to-date is en die nog werkt ook ;) reinhout.onlinetutorials.be
Het is een voorlopige login
username: test
password: test
edit: Het probleem is dat nu werkend krijgen in mn site...
als je naar http://www.onlinetutorials.be gaat kan je met bovenstaande gegevens inloggen, maar dan wordt je geredict naar een andere pagina, weg van het eigenlijke front-systeem