PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   PHP Grundlagen (http://www.selfphp.de/forum/forumdisplay.php?f=12)
-   -   Weiterleitung funktioniert nur für einen User (http://www.selfphp.de/forum/showthread.php?t=26118)

mops36 12.03.2018 13:38:22

Weiterleitung funktioniert nur für einen User
 
PHP-Code:

<?php

/*** KONFIGURATION ***/

// Definiert Konstanten für das Script
define('MD5_ENCRYPT'false); // Aktiviert Verschlüsselung für Passwort. Wenn "true" gesetzt, müssen Passwörter von $usrdata md5-verschlüsselt vorliegen. Standard: false
define('SUCCESS_URL''index2.php'); // URL, zu welcher nach erfolgreichen Login umgeleitet wird.
define('START_URL''index.php');
define('LOGIN_FORM_URL''index.php'); // URL mit Anmeldeformular
// Array mit Benutzerdaten: Besteht aus Array-Elementen mit paarweisen Benutzernamen und Passwörtern
$_SESSION['status']="active";

   
$usrdata = [
'test1' => [
    
'usr' =>'test1',
    
'pwd'=>'LISA123',

],

'test2' => [
    
'usr' =>'test2',
    
'pwd'=>'JESUS1',

],
'test3' => [
    
'usr' =>'test3',
    
'pwd'=>'LISA123',

]


];




header("Content-Type: text/html; charset=utf-8"); // Melde Browser die verwendete Zeichenkodierung

// PHP-Session starten und aktuellen Stand abfragen
session_start();
sleep(2);
$_SESSION['logged_in'] = (isset($_SESSION['logged_in']) && $_SESSION['logged_in'] === true) ? true false;
$_SESSION['usr'] = (isset($_SESSION['usr'])) ? $_SESSION['usr'] : '';

$error = array();
if(!isset(
$_POST['login'])){
        
header('Location: '.LOGIN_FORM_URL);
}else{
        
$usr = (!empty($_POST['user']) && trim($_POST['user']) != '') ? $_POST['user'] : false;
        
$pwd = (!empty($_POST['password']) && trim($_POST['password']) != '') ? $_POST['password'] : false;

        if(!
$usr || !$pwd){
                if(
count($error) == 0)
                        
$error[] = "user name and password please";
                        
header('Location: '.START_URL);
        }else{
                
$pwd = (MD5_ENCRYPT === true) ? md5($pwd) : $pwd// Passwort eingabe MD5-encrypten, falls Option gesetzt ist
                
foreach($usrdata as $ud){ // Benutzer-Liste durchlaufen und je mit Formular-Eingaben vergleichen
                        
if($usr != $ud['usr'] || $pwd != $ud['pwd'] ){
                                if(
count($error) == 0)
                                        
$error[] = "username or password incorrect.";
                                        
header('Location: '.START_URL);
                        }else{
                                
$_SESSION['logged_in'] = true;
                                
$_SESSION['usr'] = $usr;
                                
header('Location: '.SUCCESS_URL);
                        }
                }
        }
}
?>
<!doctype html>
<html>
        <head>
                <meta name="content-type" content="text/html; charset=utf-8" />
                <title>Login mistake</title>
        </head>
        <body>
                <ul>
                <?php
                
foreach($error as $out){
                        
?>
                        <li><?php echo $out?></li>
                        <?php
                
}
                
?>
                </ul>
                <p><a href="<?php echo LOGIN_FORM_URL?>">Login</a></p>
        </body>
</html>


Auf der Seite für eingeloggte User frage ich dann den User aus der Session Variablen ab und zeige die passenden Daten. Leider wird jedoch immer nur der als letzter im Array definierte User eingeloggt. Bei allen Anderen zeigt es wieder die Login Seite. Wo habe ich den Denkfehler? Fehlt vielleicht nur irgendwo ein Zeichen? Ich bekomme keine Fehlermeldung beim Testen mit wamp64.

vt1816 12.03.2018 15:16:08

AW: Weiterleitung funktioniert nur für einen User
 
Hallo und willkommen hier im Forum.

Hast Du zu Deinem Code auch noch das passende Formular? Macht die Fehlersuche einfacher.

mops36 12.03.2018 22:29:48

AW: Weiterleitung funktioniert nur für einen User
 
HTML-Code:

<section>


                                <div id="login" class="animate form">

                                    <form action="login.php" method="post">
                        <p align="center"><label><input type="text" name="user" class="noBorder" size="15" /> <font color="#FFFFFF">&nbsp;&nbsp;username</font></label></p>
                        <p align="center"><label>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <input type="password" name="password" class="noBorder" size="15" /><font color="#FFFFFF">&nbsp;&nbsp;password</font></label>&nbsp;&nbsp;
                        <label><input type="submit" name="login" value="Sign in" class="noBorder" size="15" /></label></p>
                </form>


so sieht das Formular aus
nach der Weiterleitung zeige ich mit Switch die Dinge, die der eingeloggte User sehen soll.
Seltsamerweise funktioniert immer nur der letzte User und der Erste und der Zweite nicht

mops36 14.03.2018 14:22:45

AW: Weiterleitung funktioniert nur für einen User
 
Kann mir bitte Jemand helfen?
Ich bin totaler Anfänger und habe keine Ahnung was genau nicht passt.
Das script habe ich im Internet gefunden und nur die Daten von usr und pwd abgeändert
genauso auf der nächsten Seite nur die im Switch genannten user

vt1816 14.03.2018 16:00:35

AW: Weiterleitung funktioniert nur für einen User
 
Habe mir den Code nochmal zusammen angesehen.

Was mir auffällt, dass
PHP-Code:

define('START_URL''index.php');
define('LOGIN_FORM_URL''index.php'); 

beides auf die gleiche Datei verweist.
Soll das so sein?

Hier fliegst Du schon nach dem ersten Fehler raus:
PHP-Code:

if($usr != $ud['usr'] || $pwd != $ud['pwd'] ){
                       if(
count($error) == 0)
                               
$error[] = "username or password incorrect.";
                               
header('Location: '.START_URL); 

Soll das so sein?

Wozu soll er alle drei (Test-)User durchlaufen? Wenn bei ersten Versuch der User erkannt wird, ist doch alles in Ordnung. Oder?

mops36 14.03.2018 16:06:14

AW: Weiterleitung funktioniert nur für einen User
 
Ich habe das script so von einer Internetseite als "Schnipsel" heruntergeladen. Eigentlich soll es nur überprüfen, ob der richtige Name und das passende definierte Passwort zusammenpassen und dann soll es weiterleiten.
Die Indexseite ist gleichzeitig auch der Login, deshalb ist beidesmal oben die index Seite definiert.
Das interessante ist, dass es schon mal funktioniert hat, aber dann nach einem längeren nicht mehr damit Beschäftigen und Umzug auf ein neues Laptop sind Dateien durcheinandergekommen und teilweise nicht mehr vorhanden. Deshalb habe ioch es nochmals begonnen und weiß nicht was jetzt anders ist und warum es nicht mehr läuft

vt1816 14.03.2018 16:33:43

AW: Weiterleitung funktioniert nur für einen User
 
Befinden sich Deinen beiden Code Schnipsel in ein und der selben Datei?

mops36 14.03.2018 16:43:07

AW: Weiterleitung funktioniert nur für einen User
 
das Formular ist auf der Index Seite, die Überprüfung findet in der Login.php statt und bei richtigem Login wird auf die index2.php weitergeleitet.
Somit befindet sich der Code, den ich zuerst gepostet hatte komplett in der Login.php
Das Einloggen und die Weiterleitung funktionieren, jedoch leider immer nur mit dem letzten User, also test3. Wenn ich test1 an den letzten Platz im Array kopiere, dann geht die Weiterleitung auf die Seite, die test1 auch angezeigt werden soll. Das letzte Login Datenpaar wird immer ausgeführt, wenn Name und Passwort stimmen

vt1816 14.03.2018 17:23:50

AW: Weiterleitung funktioniert nur für einen User
 
Danke für die weiterführenden Informationen. Schaue ich mir nochmal an ...

mops36 14.03.2018 18:08:39

AW: Weiterleitung funktioniert nur für einen User
 
Herzlichen Dank im Voraus


Alle Zeitangaben in WEZ +2. Es ist jetzt 18:32:36 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.