Logo - MyWebsolution.de
User gesamt  :  2459841
User online  :  3
KubaSeoTräume, PHP Forum, PHP Community and more ... MyWebsolution.de!
   
   
 
Registrieren Login User F.A.Q Suche Home

eingeloggt bleiben

MyWebsolution.de Foren » Workshops » Problem bei Loginskript

Seite: <  1 2 3 4 5 6 7  > Posts pro Seite: 5 10 20
Autor Thread
20.02.2007 20:48 Uhr
Flitze
Administrator
registriert 17.10.2006
wohnt in Eschwege
Beiträge 332
naja, das ist ein bisschen schwer, weil wir deine Seiten ja nicht kennen :P

Grundsätzlich gibts es ein "da gehts, da nicht" eigentlich nicht... D.h. in der Datei, wo es nicht geht, muss irgendwas passieren (vllt keine Session gestartet, Session hatte nen timeout, kA..)


Profil ansehen Mail senden
20.02.2007 20:57 Uhr
mdean
Forenposter
 
registriert 03.01.2007
wohnt in Schweiz
Beiträge 90
Ich kann mir dass selbst nicht erklären... Wüsste nicht wo der Fehler sein würde... Aber ich geb euch jetzt nicht den ganzen Quellcode zum durchlesen, mach einfach ne kopie von den seiten bei denen es geht, und ändere sie dann entsprechend wieder ab.
Profil ansehen
24.12.2007 12:10 Uhr
Braini
User
 
registriert 24.12.2007
wohnt in
Beiträge 4
Hallo zusammen,
dieser Thread ist vielleicht schon etwas älter, aber ich habe ihn gerade erst gesehen.
Erst einmal ein großes Lob an Flitze für seine Mühen.
Jetzt habe ich auch folgendes Problem beim Login.
Es funktioniert soweit alles, nur binde ich das Script per include auf eine Seite ein, in der vorher schon HTML ausgegeben wird.
Das Problem habe ich nur, wenn "eingelogged bleiben" aktiviert ist, dann erscheint folgende Fehlermeldung:
"Warning: Cannot modify header information - headers already sent by (output started at..."
Es wird wahrscheinlich an dem setcookie liegen, ich habe allerdings keine Lösung des Problems parat ;(
Wie binde ich nun mein Loginscript in ein schon existierendes Layout ein, so dass alles funktioniert?
Ich hoffe, es kann mir jemand helfen.
Viele Grüße und ein frohes Fest
Braini
Profil ansehen
24.12.2007 14:08 Uhr
Flitze
Administrator
registriert 17.10.2006
wohnt in Eschwege
Beiträge 332
Halle Braini,
danke für dein Lob, hört man immer wieder gern :)

Zu deinem Problem:
Ich denke mal, du benutzt so etwas wie eine zentrale "index.php" und bindest dann deine Unterseiten über "index.php?seite=news" oder so ein. Korrigier mich, wenn ich falsch liege ;). In diesem Fall müsstest du den login ganz oben - d.h. vor jeder HTML-Ausgabe - in dieser index.php inkludieren. Bei mir sieht das so aus:

Inhalt einer index.php

PHP:
<?php
    error_reporting
(E_ALL);

    
// Session starten
    
ini_set('session.use_trans_sid'1);
    
session_start();

// Unterscripte inkludieren
include "inc/constants.php";
include 
"inc/mysql/mysql_connect.php";
include 
"inc/functions.php";
include 
"inc/user_statistik.php";
// Login-Script inkludieren
include "inc/login.php";

// Start der HTML-Ausgabe
    
echo "<!DOCTYPE HTML PUBLIC\"-//W3C//DTD HTML 4.01//EN\"\n";
    echo 
"         \"http://www.w3.org/TR/html4/strict.dtd\">\n";
    echo 
"<html>\n";
    echo 
"<head>\n";
    
//...
?>


Die Datei login.php im Ordner inc hat folgenden Inhalt:

PHP:
<?php
    error_reporting
(E_ALL);

    
// Loginbereich
    
if(isset($_GET['section']) AND $_GET['section']=='logout'){
        
// User ausloggen
        
doLogout();
        
// $_SESSION leeren
        
$_SESSION = array();
        
// Session löschen
        
session_destroy();
    }
    if(isset(
$_POST['submit']) AND $_POST['submit']=='Einloggen'){
        
// Falls der Nickname und das Passwort übereinstimmen..
        
$sql "SELECT
                        ID
                FROM
                        User
                WHERE
                        Nickname = '"
.mysql_real_escape_string($_POST['Nickname'])."' AND
                        Passwort = '"
.MD5(mysql_real_escape_string($_POST['Passwort']))."'
               "
;
        
$result mysql_query($sql);
        
// wird die ID des Users geholt und der User damit eingeloggt
        
$row mysql_fetch_assoc($result);
        if (
mysql_num_rows($result)==1)
            
doLogin($row['ID'], isset($_POST['Autologin']));
    }
?>


Der Login selbst ist ein Formular, das auf jeder Unterseite in der linken Navigationsspalte angezeigt wird (siehe www.sg-wehretal.de). Wenn ein User jetzt Nickname und Passwort ausfüllt und auf Einloggen klickt, dann wird der Code aus der login.php, der in der index.php inkludiert wird, ausgeführt.

Ich hoffe, das hilft dir weiter, ansonsten müsstest du vllt mal die Struktur deine Skripte (was wo wie inkludiert) näher erläutern ;)

Gruß und frohes Fest
Flitze


Profil ansehen Mail senden
25.12.2007 10:47 Uhr
Braini
User
 
registriert 24.12.2007
wohnt in
Beiträge 4
Hallo Flitze,
da muss ich dich korrigieren, von der index.php verweist der Link auf die login.php (gleiches Aussehen-anderer Inhalt)

Hier mal meine Dateien:

login.php

PHP:
<?php
session_start
();
include 
"_includes/config.php";
include 
"_includes/function_dologin.php";
?>
<html>
<head>
<title>SportSofort</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>...
<td valign="top" width="634" bgcolor="#fafafa" style="padding-top:10px; padding-bottom:6px; padding-left:5px">
<?php

if(isset($_POST['submit']) AND $_POST['submit']=='Einloggen'){
        
// Falls der Nickname und das Passwort übereinstimmen..
        
$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üft, ob 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ück zum <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=\"register.php\">registriert</a>?\n";
        echo 
"</form>\n";
}
?> 
      </td> ...
</body>...


Hier nun meine function_dologin.php

PHP:

<?php 
    
// 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(100100000),5,10);
            
$part_two substr(time()-rand(100100000),-5);
            
$Login_ID md5($part_one.$part_two);
            
// Code im Cookie speichern, 10 Jahre dürfte genügen
            
setcookie("Autologin"$Login_IDtime()+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'];
    }   
?> 


Nun noch die Fehlermeldung:

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\sportsofort\_includes\function_dologin.php:5 3) in C:\xampp\htdocs\sportsofort\_includes\function_dologin.php on line 25

Ich hoffe, du kannst damit etwas anfangen.
Die php wird innnerhalb des <td> eingebunden, damit sie zum Design passt.
Es gibt auch nur ein Loginformular.

Schon mal Danke im voraus.
Grüße
Braini
Profil ansehen
Seite: <  1 2 3 4 5 6 7  > no reply
Powered by Pascal Landau © 2006 MyWebsolution.de
Designed by Pascal Landau © 2006 MyWebsolution.de
 
 
 
 
Home Email Impressum Disclaimer Statistik