Prob mit Register und login!!

Headymaster

Erfahrenes Mitglied
Hallo!

Also habe für meine Seite ein Registratios, sowie ein Loginscript.

Also die registration:
PHP:
<?php
if ($_GET['do'] == "register")
{
    // Mit if(isset) prüfenm, ob der "senden-Button" gedrückt wurde und dann alle Formulardaten überprüfen
    if(isset($_POST['register']))
	{
	  if(empty($_POST['login_name']) OR empty($_POST['nickname']) OR empty($_POST['password']) OR empty($_POST['password_2'])
	  OR empty($_POST['email1']) OR empty($_POST['email1_2']))
	  {
	  $fehler = "Sie haben nicht alle Felder ausgefüllt!";
	  }
	  else
	  {
	    if($_POST['password'] === $_POST['password_2'])
		{
		 // Hier nen captcha einbauen
		  if($_POST['email1'] === $_POST['email1_2'])
		  {
		    if (preg_match("^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@([a-zA-Z0-9-]+\.)+([a-zA-Z]{2,3})$^", $_POST['email1']))
			{
			// User in die Datenbank schreiben
			$user_add_task = ("INSERT INTO user 
			(login_name, nickname, password, email1, status) 
			VALUES 
			('".mysql_real_escape_string($_POST['login_name'])."',
			'".mysql_real_escape_string($_POST['nickname'])."',
			'".md5($_POST['password'])."',
			'".mysql_real_escape_string($_POST['email1'])."',
			'inactive')");
			$user_add = mysql_query($user_add_task);
			   // Wenn das schreiben der daten in die Datenbank erfolgreich war, dem User eine Mail schicken mit bestätigungscode usw.
			   if(!$user_add)
			   {
			   $fehler = mysql_error();
			   }
			   else
			   {
			   // Mail senden mit zugangsdaten und Aktivierungslink
			   $message = "Vielen Dank für die Registration!";
			   $reg_mail = mail($_POST['email1'], "Zugangsdaten", $message, "From:nilson");
			   
			        if(!$reg_mail)
			        {
					$fehler = "Zugangsdaten konnten nicht gesendet werden. Bitte kontaktieren Sie einen Admin!";
					}
					else
					{
					// Weiterleitung nach erfolgreicher Registration
					$_GET['fehler'] = 2;
					include("error/index.php");
					$fehler = showtpl("error/error_msg", array("CSS" => "inc/templates/css/css.css",
                                          "msg" => "$error_msg",
										  "redirect_url" => "index.php?id=3&do=news_show"));
					}
			   }
			}
			else
			{
			$fehler = "Die angegebene eMail-Adresse ist ungültig!";
			}
		  }
		  else
		  {
		  $fehler = "Die eMail-Adressen stimmen nicht überein!";
		  }
		}
		else
		{
		$fehler = "Die Passwörter stimmen nicht überein!";
		}
	  }
	}
$index = showtpl("user/register", array("CSS" => "inc/templates/css/css.css",
                                        "fehler" => "$fehler"));
}
?>

Login:
PHP:
<?php
if($_POST['do'] = "login")
{
 session_start();
 $loginuser = "SELECT id, login_name, password FROM user WHERE login_name='".mysql_real_escape_string($_POST['login'])."' AND 
               password='".md5($_POST['password'])."'";
 $logindo = mysql_query($loginuser);
 $loginwrite = mysql_num_rows($logindo);
 
    if($loginwrite > 0)
	{
    // Session-Variablen übergeben
    $_SESSION['user_id'] = $loginwrite['id'];
    $_SESSION['user_login'] = $loginwrite['login_name'];
    $_SESSION['user_pwd'] = $loginwrite['password'];
	session_write_close();
	$_GET['fehler'] = 3;
	include("error/index.php");
	$index = showtpl("error/error_msg", array("CSS" => "inc/templates/css/css.css",
                                              "msg" => "$error_msg",
										      "redirect_url" => "index.php?id=3&do=news_show"));
	}
	else
	{
	$_GET['fehler'] = 4;
	include("error/index.php");
	$index = showtpl("error/error_msg", array("CSS" => "inc/templates/css/css.css",
                                              "msg" => "$error_msg",
										      "redirect_url" => "index.php?id=3&do=news_show"));
	}
}
?>

Und auszug aus Script.... der überprüft, ob eine Seesion gesetzt ist, also der User eingeloggt ist oder net und dem zufolge den Login anzeigt oder das User_Menu:
PHP:
<?php
// funktion zum Überprüfen des cookies oder der Session-Variablen
function checkuser()
{
   if(isset($_SESSION['user_id']) && isset($_SESSION['user_pwd']))
   {
   $checkuserlevel = mysql_query("SELECT rights FROM user 
                                 WHERE
								 id = '".$_SESSION['user_id']."'
								 AND password = '".$_SESSION['user_pwd']."'");
   $userlevel = mysql_fetch_assoc($checkuserlevel);
   return $userlevel['level'];
   }
   else
   {
   return false;
   }
}
//.......weiterer PHP CODE
// UserNavigation auslesen oder Loginbereich laden
if (checkuser() >= "1")
{
$user_menu = showtpl("index/user", array("CSS" => "inc/templates/standard/css/css.css",
                                         "Title" => "$title",
										 "u_lobby" => "index.php?id=23",
										 "u_lobby_n" => "UserLobby",
										 "u_profil" => "index.php?id=abc",
										 "u_profil_n" => "UserProfil",
										 "u_admin" => "index.php?id=!!",
										 "u_admin_n" => "AdminPanel"));
}
else
{
$user_menu = showtpl("index/login", array ("CSS" => "inc/templates/standard/css/css.css",
                                           "lostpw" => "index.php?id=1&do=lostpw",
										   "register" => "index.php?id=1&do=register"));
}
?>


So es gibt 2 Probleme.

1. Wenn ich dden Registerlink aufrufen will.....also index.php?id=1&do=register.....dann sagt er mir dass der Login fehlgeschlagen ist obwohl ich kein Login ausgeführt ahabe sonder nur zum Registerformular will....aber ich komme net hin.....

2. wenn ich mich einlogge, dann sagt er mir zwar der Login wäre erfolgreich gewesen und leitet mich auf die hauptseite weiter....aber der switch von der Loginanzeige zur User_Menu Anzeige funktioniert nicht...sprich es wird immer noch angezeigt, dass man net eingeloggt ist, also ein Formular ist noch da über das man sich einloggen kann.


Habt ihr Fehler gefunden oder irgend ne Idee woran es liegen könnte?

Würde mich über Hilfe freuen.

MFG Niels
 
Ich bin mir nicht sicher ob php ein Problem damit hat aber ändere doch mal die ausgabe in der checkuser () Funktion "return false;" in "return 0;" und schau nach was passiert.

Grund zu meiner Anname ist das du in der if Abfrage prüfst (false >= 1). Wie gesagt ich hab keine Ahnung ob das PHP stört aber ich könnte es mir vorstellen.
 
Danke der Antwort aber das wird net der Fehler sein, denn meiner Meinung nach interpretiert PHP

false = 0
und true = 1

MFG Niels
 
Naja am Return Wert wird es schon liegen. Beispielsweise gibt ja die funktion entweder false zurück oder im Erfolgsfall das userlevel.

Nun ist die Frage was kommt beim Userlevel raus , nen int wert ? Wenn ja wäre das klasse.Wenn nein naja , ich weiss nicht was grösser wäre wenn man 2 Strings vergleicht.
Vergleicht er die länge von 2 Strings wäre ja eigentlich logisch oder des Ascii Wert ? Müsste man mal austesten.

Denn daran stosse ich mich irgendwie

if(checkuser() > "1"){
...
}

Ist denn (zum Beispiel) String "9" grösser als String "1" ?
 
Hmm mal ne ganz andere blöde Frage in dem Script das Login oder das User_Menu anzeigt rufst du am Anfang aber schon "session_start ()" auf oder?
 
PHP:
   $checkuserlevel = mysql_query("SELECT rights FROM user  
                                 WHERE 
                                 id = '".$_SESSION['user_id']."' 
                                 AND password = '".$_SESSION['user_pwd']."'"); 
   $userlevel = mysql_fetch_assoc($checkuserlevel); 
   return $userlevel['level'];

Das würde ich noch als Quelle einordnen wenn man mal so genau drüber schaut.

Du wählst die Spalte rights aus von der Tabelle user fragst dann aber nachdem der MySQL Stream in ein Array umgewandelt wurde nach der Spalte level.
Normal sollte diese in diesem Moment gar nicht existieren.
Somit sollte er false oder NULL zurückliefern.

Wobei das schon mit einer Meldung krachen gehen sollte , wie das das Element nicht existiert.

Das wäre mein Lösungsvorschlag dafür

PHP:
   $checkuserlevel = mysql_query("SELECT rights AS level FROM user  
                                 WHERE 
                                 id = '".$_SESSION['user_id']."' 
                                 AND password = '".$_SESSION['user_pwd']."'"); 
   $userlevel = mysql_fetch_assoc($checkuserlevel); 
   return $userlevel['level'];
 
Oja das hatte ich ganz übersehen^^...

Kann es vielleicht sein, dass beim Login über die /user/index.php vielleicht die Session nicht in die inc/bbcode.php übergeben wird? und deshalb der Login gar net übrgeben wird?!

MFG Niels
 
Du brauchst auf jeden Fall noch eine Routine, die dir die SessionID an den Link anhängt.
Du kannst Sie aber wahlweise auch als Cookie übergeben.

Gruß TvP
 
Am besten SessionID in Url+Cookies.
Cookies kann man deaktivieren,
SessionID in Url kann man in den Links auch mal vergessen
 

Neue Beiträge

Zurück