|
|
User gesamt
|
:
|
2428513
|
User online
|
:
|
2
|
|
KubaSeoTräume, PHP Forum, PHP Community and more ... MyWebsolution.de!
|
|
|
|
MyWebsolution.de Foren » Tutorials » Loginsystem Tutorial
Seite:
|
1
|
Posts pro Seite: 5
10
20
|
Autor
|
Thread
|
18.11.2008 09:20 Uhr
|
Loginsystem Tutorial
|
Che
|
User
|
|
registriert
|
18.11.2008
|
wohnt in
|
|
Beiträge
|
1
|
|
Alles funktioniert Tip top ausser User bearbeiten und User administrieren funktioniert nicht.
Wenn ich die Rechte ändern will kommt:
Zitat:Notice: Undefined index: Rechte in /xxxxxxx/htdocs/bla/admin/user/index.php on line 14
Warning: in_array() [function.in-array]: Wrong datatype for second argument in /xxxxxxx/htdocs/bla/admin/user/index.php on line 14
Aussgabe
Sie sind nicht berechtigt, diese Seite zu betreten.
Wenden sie sich bitte an den Administrator, falls es sich hier um ein Missverständnis handelt
Ich bin aber Admin?!
Habe ectra nochmals das script mit dem admin Acc anlegen, durchlaufen lassen
|
|
|
23.11.2008 17:19 Uhr
|
|
Flitze
|
Administrator
|
|
registriert
|
17.10.2006
|
wohnt in
|
Eschwege
|
Beiträge
|
332
|
|
Hey,
tritt der Fehler bei allen Usern auf?
|
|
|
13.12.2009 21:57 Uhr
|
|
Pebbles
|
User
|
|
registriert
|
13.12.2009
|
wohnt in
|
|
Beiträge
|
5
|
|
Hi
ich hab das Tutorial jetzt durchgelesen und die Dateien angelegt. erstmal muss ich sagen: SPITZE!!! so ein übersichtliches Tutorial hab ich schon länger gesucht. Ich versuch es jetzt zum Laufen zu bringe aber ich hab noch ein paar Probleme. Anfangen tut es mit dem Registrieren. wenn ich den Sourcecode so verwende wie im Tut und mich dann registrieren möchte bekomme ich folgende Meldung:
Zitat:INSERT INTO
User
(Nickname,
Email,
Passwort,
Show_Email,
Registrierungsdatum,
Wohnort,
Homepage,
ICQ,
AIM,
YIM,
MSN
)
VALUES
('test',
'grka@gmx.de',
'60e964f80d668eead87bcef9dc8f79a7',
'0',
CURDATE(),
'',
'',
'',
'',
'',
''
)
Field 'SessionID' doesn't have a default value Ihr Account wurde nicht erstellt
eine SessionID wird tatsächlich nicht in die DB geschrieben... fehlt das noch oder liegt der Fehler wo anders?
|
|
|
13.12.2009 22:26 Uhr
|
|
Pebbles
|
User
|
|
registriert
|
13.12.2009
|
wohnt in
|
|
Beiträge
|
5
|
|
und wenn ich mich als admin einlogge bekomme ich die Meldung:
"Sie haben keine Berechtigung, diese Seite zu betreten!" für den Adminbereich
Wenn ich als User eingeloggt bin und das Script zum Ändern des Profils aufrufe bekomme ich noch die Fehlermeldung, daß ich nicht eingeloggt sei. Woran kann das liegen?
Den aufruf session_start musste ich aus einige Dateien rausnehmen weil sonst die Meldung kam, daß keine Session gestartet werden kann da schon ein Header gesendet wurde... war das richtig?
|
|
|
13.12.2009 22:40 Uhr
|
|
Pebbles
|
User
|
|
registriert
|
13.12.2009
|
wohnt in
|
|
Beiträge
|
5
|
|
Ich hab mal alle Source dateien zusammengesucht.
configuration.php
PHP:
<?php
$MYSQL_PASS = "xxxxxxxxx";
$MYSQL_USER = "root";
$MYSQL_HOST = "localhost";
$MYSQL_DATA = "test";
$connid = @mysql_connect($MYSQL_HOST, $MYSQL_USER, $MYSQL_PASS) OR die("Error: ".mysql_error());
mysql_select_db($MYSQL_DATA) OR die("Error: ".mysql_error());
?>
Im Adminbereich
index.php // angeblich keine Rechte
PHP:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>xxxxx</title>
</head>
<body>
<?php
error_reporting(E_ALL);
include("../configuration.php");
// Pr?ob der User den Adminbereich betreten darf
if(!isset($_SESSION['Rechte']) OR !in_array('Adminbereich', $_SESSION['Rechte']))
die("Sie haben keine Berechtigung, diese Seite zu betreten!\n");
// Array f? Bereiche anlegen
$page = array();
$page['user'] = "user/index.php";
// Pr?ob die als $_GET['page'] ?bene Seite existiert
if(isset($_GET['page']) AND isset($page[$_GET['page']]))
include $page[$_GET['page']];
// Ansonsten wird das Menu angezeigt
else
echo "<a href=\"index.php?page=user\">User administrieren</a>\n";
?>
</body>
</html>
login.php // funktioniert jetzt
PHP:
<?php
session_start();
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html">
<title>xxxxx</title>
</head>
<body>
<?php
include("../configuration.php");
error_reporting(E_ALL);
// Session starten
// liefert die Rechte eines Users ..
function getRights()
{
$rights = array();
// .. indem die Rechte eines User aus der Datenbank ausgew?t werden..
if(isset($_SESSION['UserID'])){
$sql = "SELECT
Recht
FROM
User_Rechte
WHERE
UserID = '".$_SESSION['UserID']."'
";
$result = mysql_query($sql) OR die ("<pre>\n".$sql."</pre>\n".mysql_error());
$rights = array();
// .. und als array zur?eben werden
while($row = mysql_fetch_assoc($result))
$rights[] = $row['Recht'];
}
return $rights;
}
// Loggt einen User ein, ..
function doLogin($ID, $Autologin=false)
{
// .. indem die aktuelle Session ID in der Datenbank gespeichert wird
$sql = "UPDATE
User
SET
SessionID = '".mysql_real_escape_string(session_id())."',
Autologin = NULL,
IP = '".$_SERVER['REMOTE_ADDR']."',
Letzte_Aktion = '".mysql_real_escape_string(time())."',
Letzter_Login = '".mysql_real_escape_string(time())."'
WHERE
ID = '".$ID."'
";
mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
// Wenn 'eingeloggt bleiben' aktiviert wurde
if($Autologin){
// Zufallscode erzeugen
$part_one = substr(time()-rand(100, 100000),5,10);
$part_two = substr(time()-rand(100, 100000),-5);
$Login_ID = md5($part_one.$part_two);
// Code im Cookie speichern, 10 Jahre d?gen? setcookie("Autologin", $Login_ID, time()+60*60*24*365*10);
$sql = "UPDATE
User
SET
Autologin = '".$Login_ID."'
WHERE
ID = '".$ID."'
";
mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
}
// Daten des Users in der Session speichern
$sql = "SELECT
Nickname
FROM
User
WHERE
ID = '".$ID."'
";
$result = mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
$row = mysql_fetch_assoc($result);
$_SESSION['UserID'] = $ID;
$_SESSION['Nickname'] = $row['Nickname'];
// Rechte in der Session speichern
$_SESSION['Rechte'] = getRights();
}
if(isset($_POST['submit']) AND $_POST['submit']=='Einloggen'){
// Falls der Nickname und das Passwort ?nstimmen..
$sql = "SELECT
ID
FROM
User
WHERE
Nickname = '".mysql_real_escape_string(trim($_POST['Nickname']))."' AND
Passwort = '".md5(trim($_POST['Passwort']))."'
";
$result = mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
// wird die ID des Users geholt und der User damit eingeloggt
$row = mysql_fetch_assoc($result);
// Pr?b wirklich genau ein Datensatz gefunden wurde
if (mysql_num_rows($result)==1){
doLogin($row['ID'], isset($_POST['Autologin']));
echo "<h4>Willkommen ".$_SESSION['Nickname']."</h4>\n";
echo "Sie wurden erfolgreich eingeloggt.<br>\n".
"Zur <a href=\"index.php\">Startseite</a>\n";
}
else{
echo "Sie konnten nicht eingeloggt werden.<br>\n".
"Nickname oder Passwort fehlerhaft.<br>\n".
"Zur?m <a href=\"".$_SERVER['PHP_SELF']."\">Login-Formular</a>\n";
}
}
else{
echo "<form ".
" name=\"Login\" ".
" action=\"".$_SERVER['PHP_SELF']."\" ".
" method=\"post\" ".
" accept-charset=\"ISO-8859-1\">\n";
echo "Nickname :\n";
echo "<input type=\"text\" name=\"Nickname\" maxlength=\"32\">\n";
echo "<br>\n";
echo "Passwort :\n";
echo "<input type=\"password\" name=\"Passwort\">\n";
echo "<br>\n";
echo "eingeloggt bleiben :\n";
echo "<input type=\"checkbox\" name=\"Autologin\" value=\"1\">\n";
echo "<br>\n";
echo "<input type=\"submit\" name=\"submit\" value=\"Einloggen\">\n";
echo "<br>\n";
echo "<a href=\"passwort.php\">Passwort vergessen</a> oder noch nicht <a href=\"registrierung.php\">registriert</a>?\n";
echo "</form>\n";
}
?>
</body>
</html>
EditProfil.php // angeblich nicht eingeloggt
[php]
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>xxxxx</title>
</head>
<body>
<?php
error_reporting(E_ALL);
include("../configuration.php" ;
// include("../function.php" ;
if(!isset($_SESSION['UserID'])) {
echo "Sie sind nicht eingeloggt.<br>\n".
"Bitte <a href=\"login.php\">loggen</a> Sie sich zuerst ein.\n";
}
else{
// Avatar hochladen
if(isset($_POST['submit']) AND $_POST['submit'] == "Avatar hochladen" {
$errors = array();
// Uploadfehler prüfen
switch ($_FILES['pic']['error']){
case 1: $errors[] = "Bitte wählen Sie eine Datei aus, die kleiner als 20 KB ist.";
break;
case 2: $errors[] = "Bitte wählen Sie eine Datei aus, die kleiner als 20 KB ist.";
break;
case 3: $errors[] = "Die Datei wurde nur teilweise hochgeladen.";
break;
case 4: $errors[] = "Es wurde keine Datei ausgewählt.";
break;
default : break;
}
// Prüfen, ob eine Grafikdatei vorliegt
if(!@getimagesize($_FILES['pic']['tmp_name']))
$errors[] = "Ihre Datei ist keine gültige Grafikdatei.";
else {
// Mime-Typ prüfen
$erlaubte_typen = array('image/pjpeg',
'image/jpeg',
'image/gif',
'image/png'
);
if(!in_array($_FILES['pic']['type'], $erlaubte_typen))
$errors[] = "Der Mime-Typ ihrer Datei ist verboten.";
// Endung prüfen
$erlaubte_endungen = array('jpeg',
'jpg',
'gif',
'png'
);
// Endung ermitteln
$endung = strtolower(substr($_FILES['pic']['name'], strrpos($_FILES['pic']['name'], '.' +1));
if(!in_array($endung, $erlaubte_endungen))
$errors[] = "Die Dateiendung muss .jpeg .jpg .gif oder .png lauten ";
// Ausmaße prüfen
$size = getimagesize($_FILES['pic']['tmp_name']);
if ($size[0] > 150 OR $size[1] > 150)
$errors[] = "Die Datei darf maximal 150 Pixel breit und 150 Pixel hoch sein.";
}
// Dateigröße prüfen
if($_FILES['pic']['size'] > 0.2*1024*1024)
$errors[] = "Bitte wählen Sie eine Datei aus, die kleiner als 20 KB ist.";
if(count($errors)){
echo "Ihr Avatar konnte nicht gespeichert werden.<br>\n".
"<br>\n";
foreach($errors as $error)
echo $error."<br>\n";
echo "<br>\n".
"Zurück zum <a href=\"".$_SERVER['PHP_SELF']."\&qu ot;>Profil</a>\n";
}
else {
// Bild auf dem Server speichern
$uploaddir = 'avatare/';
// neuen Bildname erstellen
$Name = "IMG_".substr(microtime(),- .".".$endun g;
if (move_uploaded_file($_FILES['pic']['tmp_name'], $uploaddir.$Name)) {
$sql = "UPDATE
User
SET
Avatar = '".mysql_real_escape_string(trim($Nam
Dieser Beitrag wurde am 08.02.2010 um 23:55:15 Uhr von Pebbles zum 3. Mal editiert.
|
|
|
13.12.2009 22:51 Uhr
|
|
Pebbles
|
User
|
|
registriert
|
13.12.2009
|
wohnt in
|
|
Beiträge
|
5
|
|
beim Aufruf von logout.php bekomme ich noch die Meldung:
Notice: Undefined variable: _SESSION in D:\Websites\localuser\Default\\usermanager\Logout.php on line 29
Warning: session_destroy() [function.session-destroy]: Trying to destroy uninitialized session in D:\Websites\localuser\Default\\usermanager\Logout.php on line 39
Sie wurden erfolgreich ausgeloggt.
|
|
|
14.12.2009 13:15 Uhr
|
|
Flitze
|
Administrator
|
|
registriert
|
17.10.2006
|
wohnt in
|
Eschwege
|
Beiträge
|
332
|
|
Zitat: Den aufruf session_start musste ich aus einige Dateien rausnehmen weil sonst die Meldung kam, daß keine Session gestartet werden kann da schon ein Header gesendet wurde... war das richtig?
Naja überleg mal.. wenn du session_start() rausnimmst, wird keine Session erzeugt. Ergo es werden keine Daten in der Session gespeichert. Ergo, das Skript hat keine Möglichkeit festzustellen, ob ein User eingeloggt ist, oder nich (deshalb kannst du zb als Admin auch nicht in den Adminbereich). Du MUSST das session_start() drin lassen, um den Fehler zu beheben muss es allerdings VOR jeglicher Form von Ausgabe (also auch vor dem Doctype etc..) stehen. Dazu gibts aber bestimmt ne Milliarden antworten auf Google 
Nachtrag:
Zu Session lohnt sich auch mein Workshop zu Sessions in PHP
Dieser Beitrag wurde am 14.12.2009 um 13:19:44 Uhr von Flitze zum 1. Mal editiert.
|
|
|
23.12.2009 01:04 Uhr
|
|
Pebbles
|
User
|
|
registriert
|
13.12.2009
|
wohnt in
|
|
Beiträge
|
5
|
|
Hi
sorry das ich mich jetzt erst wieder melde, ich war leider krank. Hab jetzt das startsession überall wieder hinzugefügt und das editieren des Profils klappt jetzt Das Betreten des Adminbereichs war noch ein Problem in der DB
Aber 1 Problem hab ich immernoch, wenn ich in den Adminbereich komme und den Link zum editieren eines Users anklicke kommt:
Notice: A session had already been started - ignoring session_start() in D:\Websites\localuser\Default\admin\user\index.php on line 2
Sie haben keine Berechtigung, diese Seite zu betreten!
Ich vermute der Fehler kommt daher, daß ich in den Adminbereich über den link
admin/index.php kam und der Link "User Administrieren" geht auf admin/index.php?page=user so daß die Index.php erneut aufgerufen wird und somit auch das sessionstart. Was kann ich jetzt tun um das Problem zu lösen?
Eine Frage hab ich auch noch, wo baut man die logout.php Datei ein? Ist die nur dafür da, daß der User sich manuell ausloggen kann oder braucht man die noch irgendwo fürs autom. logout?
Dieser Beitrag wurde am 23.12.2009 um 01:19:41 Uhr von Pebbles zum 1. Mal editiert.
|
|
|
Seite:
|
1
|
|
|
Powered by
|
Pascal Landau
|
© 2006
|
MyWebsolution.de
|
Designed by
|
Pascal Landau
|
© 2006
|
MyWebsolution.de
|
|
|
|
|
|