Login Script funktoniert nicht richtig

alex130

Erfahrenes Mitglied
HI
Ich habe ein Problem mit meinem Login Script, immer wenn ich mich einlogge, komme ich auf die selbe Seite und die Felder sind wieder leer.
Also habe ich es mit error_reportin(E_ALL); versucht und jetzt kommt folgendes:
PHP:
Notice: Undefined property: mysql in /var/www/web14/html/login2/script/class.inc.php on line 14

Notice: Undefined property: mysql_db in /var/www/web14/html/login2/script/class.inc.php on line 17

Notice: Undefined index: nick in /var/www/web14/html/login2/login.php on line 21

Und hier die class.inc.php
PHP:
<?php

// script starts here //
	if (!defined ('_true_login_script')) die ('d00fer l33t haxX0r!');
	
	class Login
	{
		
		function Login ()
		{ $this->GLogin = true; }
		
		function connect ()
		{
			if (!$this->mysql)
				$this->mysql = mysql_connect (_mysql_host,_mysql_user,_mysql_pass);
			
			if (!$this->mysql_db)
				$this->mysql_db = mysql_select_db (_mysql_db);
			
			return $this->mysql_db;
		}
		
		function close ()
		{
			if ($this->mysql)
				mysql_close ($this->mysql);
		}
		
		function startsession ()
		{
			session_start();
		}
		
		function checkadmin ($name,$pass)
		{
			if ($name != '' && $pass != '')
			{
				$result = mysql_query ('SELECT * FROM `'._mysql_table.'` WHERE md5name = \''.md5(strtolower($name)).'\';');
				if (mysql_affected_rows () > 0)
				{
					if (md5($pass) != mysql_result ($result,0,'pass'))
					{
						$return['state'] = false;
						$return['error'] .= "Falsches Passwort\n";
					}
					else
					{
						if (mysql_result ($result,0,'active') != 1)
						{
							$return['state'] = false;
							$return['error'] .= "Account nicht aktiviert\n";
						}
						else
						{
							if (mysql_result ($result,0,'blocked') == 1)
							{
								$return['state'] = false;
								$return['error'] .= "Account wurde gesperrt\n";
							}
							else
							{
								if (mysql_result ($result,0,'admin') != 1)
								{
									$return['state'] = false;
									$return['error'] .= "Kein Administrator\n";
								}
								else
									$return['state'] = true;
							}
						}
					}	
				}
				else
				{
						$return['state'] = false;
						$return['error'] .= "Benutzer existiert nicht\n";
				}
			}
			
			return $return;
		}

function checkuser ($name,$pass)
		{
			if ($name != '' && $pass != '')
			{
				$result = mysql_query ('SELECT * FROM `'._mysql_table.'` WHERE md5name = \''.md5(strtolower($name)).'\';');
				if (mysql_affected_rows () > 0)
				{
					if (md5($pass) != mysql_result ($result,0,'pass'))
					{
						$return['state'] = false;
						$return['error'] .= "Falsches Passwort\n";
					}
					else
					{
						if (mysql_result ($result,0,'active') != 1)
						{
							$return['state'] = false;
							$return['error'] .= "Account nicht aktiviert\n";
						}
						else
						{
							if (mysql_result ($result,0,'blocked') == 1)
							{
								$return['state'] = false;
								$return['error'] .= "Account wurde gesperrt\n";
							}
							else
								$return['state'] = true;
						}
					}	
				}
				else
				{
						$return['state'] = false;
						$return['error'] .= "Benutzer existiert nicht\n";
				}
			}
			
			return $return;
		}
		
		
		function register ($name,$pass,$pass2,$email,$rules)
		{
			if ($name == '' || $pass == '' || $email == '' || !ereg("^.+@.+\\..+$",$email) || $pass2 == '')
			{
				$return['state'] = false;
				$return['error'] .= "Bitte Benutzername, Passwort &amp; Emailadresse angeben\n";
			}
			else
			{
				if ($rules != 'yes')
				{
					$return['state'] = false;
					$return['error'] .= "Bitte die Regeln akzeptieren\n";
				}
				else
				{
					if ($pass != $pass2)
					{
						$return['state'] = false;
						$return['error'] .= "Passwörter müssen übereinstimmen\n";
					}
					else
					{
						$query = mysql_query ('SELECT * FROM `'._mysql_table.'` WHERE md5name = \''.md5(strtolower($name)).'\';');
						if (mysql_affected_rows() > 0)
						{
							$return['state'] = false;
							$return['error'] .= "Username existiert bereits\n";
						}
						else
						{
							$activatestring = md5(rand(0,100000));
							$query = mysql_query ('INSERT INTO `'._mysql_table.'`
							                      (`id`,`name`,`md5name`,`pass`,`email`,`active`,`blocked`,`admin`,`lastlogin`,`lastip`)
							             VALUES   (\'\',\''.addslashes (substr($name,0,255)).'\',\''.md5(strtolower($name)).'\',
							                       \''.md5($pass).'\',\''.$email.'\',\''.$activatestring.'\',\'0\',\'0\',\''.time().'\',\''.$_SERVER['REMOTE_ADDR'].'\');');
							
							$link = _offical_path_to_register_file;
							$link .= '?activate='.$activatestring;
							$link .= '&id=';
							$link .= mysql_insert_id();
							
							mail ($email, 'Account Activation', str_replace('#link#',$link,join(file('script/templates/email.txt'))));
							
							$return['state'] = true;
						}
					}
				}
			}
			return $return;
		}
		
		function activate ($id,$code)
		{
			mysql_query ('UPDATE `'._mysql_table.'` SET active = \'1\' WHERE active = \''.addslashes ($code).'\' AND id = \''.addslashes ($id).'\';');
			
			$result = mysql_query ('SELECT * FROM `'._mysql_table.'` WHERE id = \''.addslashes ($id).'\';');
			
			if (mysql_result ($result,0,'active') == '1')
				$r['state'] = true;
			else
				$r['state'] = false;
			
			return $r;
		}
		
	}
	
?>

Und hier noch die Login.php
PHP:
<?php
ob_start();
?>

<?php
error_reporting(E_ALL);	
	
	// script starts here //
	define ('_true_login_script',true); #allow including files
	
	#includen der config und der loginklasse
	include ('script/class.inc.php');
	include ('script/config.inc.php');
	
	$xlogin = new Login();
	$xlogin->connect();
	$xlogin->startsession();
	
	if ($_SESSION['login'] !== true)
	{
		if ($_POST['nick'] && $_POST['pass'])
		{
			$is_user = $xlogin->checkuser ($_POST['nick'],$_POST['pass']);
			if ($is_user['state'])
			{
				$_SESSION['login'] = true;
				$_SESSION['nick'] = $_POST['nick'];
				$_SESSION['pass'] = $_POST['pass'];
				
				mysql_query (
				             'UPDATE `'._mysql_table.'` SET lastlogin = \''.time().'\',
				              lastip = \''.$_SERVER['REMOTE_ADDR'].'\'
				              WHERE md5name = \''.md5(strtolower($_POST['nick'])).'\';'
				            );
			}
			else include ('script/templates/faileduser.php');
		}
		else include ('script/templates/userlogin.php');
	}
	if ($_SESSION['login'] === true)
	{
		header ("Location: "._goto_after_login);
		$xlogin->close();
		exit();
	}
	
	$xlogin->close();
	

	ob_end_flush(); ?>
 
Zuletzt bearbeitet:
Die ersten beiden fehler kommen daher, dass deine Login-Kasse diese Klassenvariablen nicht kennt. Mach das mal so
PHP:
<?php

// script starts here //
    if (!defined ('_true_login_script')) die ('d00fer l33t haxX0r!');
    
    class Login
    {
        var $mysql; 
        var $mysql_db;

        function Login ()
        { $this->GLogin = true; }

#...usw

Der 3. Fehler besagt, dass es den Key "nick" in dem Globalen Array "$_POST" nicht gibt. Überprüfe mal, ob das Feld für den Nickname wirklich "nick" heißt. Du kannst auch einfach per
PHP:
print_r($_POST);
prüfen, was für Sachen geschickt wurden
 
Zu den Fehlermeldungen 1 und 2: Klassenvariablen müssen explizit deklariert werden.

Zur Fehlermeldung 3: Wenn die Existenz einer Variable oder eines Array-Elements nicht gewährleistet werden kann da diese beispielsweise von außen beeinflussbar ist, sollte zuerst immer ihre Existenz geprüft werden. Dafür gibt es die isset()-Funktion.
 
Hi
Ich hab das so gemacht wie fanste es gesagt hat und Fehler 1 und 2 sind weg, aber der 3 geht nicht weg :(
In der db gibt es zwar kein Feld, dass nick heißt, aber dazu is diese Zeile:
WHERE md5name = \''.md5(strtolower($_POST['nick'])).'\';'

und zu Gumbo,
das mit dem isset() hab ich schon:
if (isset ($_POST['nick']) && isset ($_GET['pass']))
 
Das isset hast du nicht ;) Du hast das alles OHNE isset().

Zudem meinte ich, dass du schauen sollst, ob das Textfeld in der HTML Datei so heißt
 
Hi
Ich hab jetzt alles von ['nick'] in ['name'] geändert und nun funktoniert es.
THX

//edit:
Jetzt hab ich noch eine Frage und zwar, wie kann ich das machen, dass ich den Usern einen "Rang" zuteilen kann?
also eine db spalte für rang machen, das is klar, aber wie mach ich das dann, dass ich beim Seite "schützen" angeben kann, welche leute die Seite ansehen dürfen?
Thx
 
Zuletzt bearbeitet:
So ich hab das jetzt geändert und zwar, hab ich eine Spalte in der db dazu gemacht, die rang heißt
und hier die index.php
PHP:
<?php
$pfp = './protect.php';
include ($pfp);
$neededrang = 2;
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Unbenanntes Dokument</title>
</head>

<body>
TEST
</body>
</html>

So und hier die class.inc.php
PHP:
<?php

	// script starts here //
	if (!defined ('_true_login_script')) die ('d00fer l33t haxX0r!');
	
	class Login
	{
 
 var $mysql;
 var $mysql_db;
		
		function Login ()
		{ $this->GLogin = true; }
		
		function connect ()
		{
			if (!$this->mysql)
				$this->mysql = mysql_connect (_mysql_host,_mysql_user,_mysql_pass);
			
			if (!$this->mysql_db)
				$this->mysql_db = mysql_select_db (_mysql_db);
			
			return $this->mysql_db;
		}
		
		function close ()
		{
			if ($this->mysql)
				mysql_close ($this->mysql);
		}
		
		function startsession ()
		{
			session_start();
		}
		
		function checkadmin ($name,$pass)
		{
			if ($name != '' && $pass != '')
			{
				$result = mysql_query ('SELECT * FROM `'._mysql_table.'` WHERE md5name = \''.md5(strtolower($name)).'\';');
				if (mysql_affected_rows () > 0)
				{
					if (md5($pass) != mysql_result ($result,0,'pass'))
					{
						$return['state'] = false;
						$return['error'] .= "Falsches Passwort\n";
					}
					else
					{
						if (mysql_result ($result,0,'active') != 1)
						{
							$return['state'] = false;
							$return['error'] .= "Account nicht aktiviert\n";
						}
						else
						{
							if (mysql_result ($result,0,'blocked') == 1)
							{
								$return['state'] = false;
								$return['error'] .= "Account wurde gesperrt\n";
							}
							else
							{
								if (mysql_result ($result,0,'admin') != 1)
								{
									$return['state'] = false;
									$return['error'] .= "Kein Administrator\n";
								}
								else
									$return['state'] = true;
							}
						}
					}	
				}
				else
				{
						$return['state'] = false;
						$return['error'] .= "Benutzer existiert nicht\n";
				}
			}
			
			return $return;
		}
		
		
		
		
		
		
		
		          function checkuser ($name,$pass) 
          { 
               if ($name != '' && $pass != '') 
               { 
                    $result = mysql_query ('SELECT * FROM `'._mysql_table.'` WHERE md5name = \''.md5(strtolower($name)).'\';');  
                    if (mysql_affected_rows () > 0) 
                    { 
                         if (md5($pass) != mysql_result ($result,0,'pass')) 
                         { 
                              $return['state'] = false; 
                              $return['error'] .= "Falsches Passwort\n"; 
                         } 
                         else 
                         { 
                              if (mysql_result ($result,0,'active') != 1) 
                              { 
                                   $return['state'] = false; 
                                   $return['error'] .= "Account nicht aktiviert\n"; 
                              } 
                              else 
                              { 
                                   if (mysql_result ($result,0,'blocked') == 1) 
                                   { 
                                        $return['state'] = false; 
                                        $return['error'] .= "Account wurde gesperrt\n"; 
                                   } 
                                   else 
                                   { 
                                        global $neededrang; 
                                        if ($neededrang < mysql_result ($result,0,'rang'))  
                                        {  
                                             $return['state'] = false;  
                                             $return['error'] .= "Account hat nicht die nötigen rechte\n";  
                                        }  
                                        else  
                                        {  
                                             $return['state'] = true; 
                                        } 
                                   } 
                              } 
                         }      
                    } 
                    else 
                    { 
                              $return['state'] = false; 
                              $return['error'] .= "Benutzer existiert nicht\n"; 
                    } 
               } 
                
               return $return; 
          }
		
		
		function register ($name,$pass,$pass2,$email,$rules)
		{
			if ($name == '' || $pass == '' || $email == '' || !ereg("^.+@.+\\..+$",$email) || $pass2 == '')
			{
				$return['state'] = false;
				$return['error'] .= "Bitte Benutzername, Passwort &amp; Emailadresse angeben\n";
			}
			else
			{
				if ($rules != 'yes')
				{
					$return['state'] = false;
					$return['error'] .= "Bitte die Regeln akzeptieren\n";
				}
				else
				{
					if ($pass != $pass2)
					{
						$return['state'] = false;
						$return['error'] .= "Passwörter müssen übereinstimmen\n";
					}
					else
					{
						$query = mysql_query ('SELECT * FROM `'._mysql_table.'` WHERE md5name = \''.md5(strtolower($name)).'\';');
						if (mysql_affected_rows() > 0)
						{
							$return['state'] = false;
							$return['error'] .= "Username existiert bereits\n";
						}
						else
						{
							$activatestring = md5(rand(0,100000));
							$query = mysql_query ('INSERT INTO `'._mysql_table.'`
							                      (`id`,`name`,`md5name`,`pass`,`email`,`active`,`blocked`,`admin`,`lastlogin`,`lastip`)
							             VALUES   (\'\',\''.addslashes (substr($name,0,255)).'\',\''.md5(strtolower($name)).'\',
							                       \''.md5($pass).'\',\''.$email.'\',\''.$activatestring.'\',\'0\',\'0\',\''.time().'\',\''.$_SERVER['REMOTE_ADDR'].'\');');
							
							$link = _offical_path_to_register_file;
							$link .= '?activate='.$activatestring;
							$link .= '&id=';
							$link .= mysql_insert_id();
							
							mail ($email, 'Account Activation', str_replace('#link#',$link,join(file('script/templates/email.txt'))));
							
							$return['state'] = true;
						}
					}
				}
			}
			return $return;
		}
		
		function activate ($id,$code)
		{
			mysql_query ('UPDATE `'._mysql_table.'` SET active = \'1\' WHERE active = \''.addslashes ($code).'\' AND id = \''.addslashes ($id).'\';');
			
			$result = mysql_query ('SELECT * FROM `'._mysql_table.'` WHERE id = \''.addslashes ($id).'\';');
			
			if (mysql_result ($result,0,'active') == '1')
				$r['state'] = true;
			else
				$r['state'] = false;
			
			return $r;
		}
		
	}
	
?>
Dort habe ich das hinzugefügt:
PHP:
 global $neededrang; 
                                        if ($neededrang < mysql_result ($result,0,'rang'))  
                                        {  
                                             $return['state'] = false;  
                                             $return['error'] .= "Account hat nicht die nötigen rechte\n";  
                                        }  
                                        else  
                                        {  
                                             $return['state'] = true; 
                                        }
Aber es kommt immer, nicht die nötigen Rechte...
Kann mir da bitte jemand helfen?
Thx
 
Zuletzt bearbeitet:
Zurück