Profil | Mitglieder | Registrieren | Start | Suche


PHP-Support.de » Programmierung » PHP & MySQL » if(!isset (login tut)    » Hallo Gast [Login | Registrieren]

Neues Thema | Antworten   

Autor Beitrag
snork
Mitglied
Guter User


Dabei seit: 27.11.2008
Herkunft: keine Angabe
Posts: 427
     if(!isset (login tut) Zitat | Bearbeiten

mich interessiert diese zeile:

 PHP 
1:
2:
3:
if(!isset($_SESSION['userid'])) {
    die('Bitte zuerst <a href="login.php">einloggen</a>');
}



hier wird doch abgefragt ob eine session besteht wenn ja sieht man den geheimen bereich wenn nein wird der link zum login angezeigt oder?

kann ich dann hinter

 PHP 
1:
if(!isset($_SESSION['userid'])

 PHP 
1:
2:

AND ($_SESSION['rang'] = 2)


und dann den rang in einer session speichern so

$rang = $_SESSION['rang'];

machen also das man die seite nur sieht wenn man rang 2 hat die db tabelle rang existiert.


oder muss ich das anderster angehen?


08.01.2016, 15:28 Profil | PM | E-Mail  
snork
Mitglied
Guter User


Dabei seit: 27.11.2008
Herkunft: keine Angabe
Posts: 427
      Zitat | Bearbeiten

oder muss ich das eher so wie in dem utu angehen?

 PHP 
1:
2:
3:
if(!isset($name) AND empty($rang)) {
   $rang = "2";
}






08.01.2016, 16:17 Profil | PM | E-Mail  
asdf
Mitglied
Guter User


Dabei seit: 26.10.2009
Herkunft: keine Angabe
Posts: 442
      Zitat | Bearbeiten

Das sollte schon funktionieren...


 PHP 
1:
2:
3:
4:
<?php 
if(!isset($_SESSION['userid']) AND ($_SESSION['rang'] != 2)){
die(
"link zum login");}
echo 
"du bist eingelogt und hast rang 2";?>



Ist so jedoch nicht so schön, denn wenn die session userid nicht besteht wird es die session rang auch nicht geben(man wird ja nicht eingelogt sein) und wenn keine session besteht sollte man nicht unbeding abfragen ob session = etwas ist. Deswegen !isset().


08.01.2016, 18:48 Profil | PM | E-Mail  
snork
Mitglied
Guter User


Dabei seit: 27.11.2008
Herkunft: keine Angabe
Posts: 427
      Zitat | Bearbeiten

also ich komme auch auf die seite wenn in der db rang 1 ist. es soll aber so sein das man nur auf die seite kommen wenn man eingelogt ist und rang 2 hat


08.01.2016, 18:57 Profil | PM | E-Mail  
FalkenaugeMihawk
Mitglied
Perfekter User


Dabei seit: 05.06.2010
Herkunft: Schweiz
Posts: 2619
      Zitat | Bearbeiten

Naja, hast du in $_SESSION den DB wert rang abgespeichert? Kannst ihn dir ja mal ausgeben lassen (z.B. mit var_dump()).


08.01.2016, 22:43 Profil | PM | E-Mail  
snork
Mitglied
Guter User


Dabei seit: 27.11.2008
Herkunft: keine Angabe
Posts: 427
      Zitat | Bearbeiten

hab de code so aber es funzt nicht

 PHP 
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
if(!isset($_SESSION['userid']) AND ($_SESSION['rang'] != 2)){ 

   
    die('<meta http-equiv="refresh" content="0; URL=index.php">');
}


$statement = $pdo->prepare("SELECT * FROM users WHERE id = :userid");
$statement->execute(array('userid' => $_SESSION['userid'], 'rang' => $_SESSION['rang']));   
$user= $statement->fetch();

$userid = $_SESSION['userid'];
$rang = $_SESSION['rang'];





Post wurde schon 1x editiert, das letzte mal am 09.01.2016 um 12:18 von snork
09.01.2016, 09:43 Profil | PM | E-Mail  
DingsDaBums
Mitglied
Exzellenter User


Dabei seit: 12.09.2010
Herkunft: keine Angabe
Posts: 2490
      Zitat | Bearbeiten

Zitat:
Orginal von snork
hab de code so aber es funzt nicht

 PHP 
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
if(!isset($_SESSION['userid']) AND ($_SESSION['rang'] != 2)){ 

   
    die('<meta http-equiv="refresh" content="0; URL=index.php">');
}


$statement = $pdo->prepare("SELECT * FROM users WHERE id = :userid");
$statement->execute(array('userid' => $_SESSION['userid'], 'rang' => $_SESSION['rang']));   
$user= $statement->fetch();

$userid = $_SESSION['userid'];
$rang = $_SESSION['rang'];



Mal abgesehen davon, dass du der execute-Methode keinen "rang" übergeben musst, da in der Datenbankabfrage kein :rang existiert: Wieso willst du die Daten abrufen, wenn sie zum einen laut deinem Code bereits in der Session stehen, die du dann unter der Datenbankabfrage auch entsprechend aus der Session und nicht aus dem Ergebnis der Abfrage liest?

Ich würde nur die userid in der Session Speichern und entsprechend als erstes mit !isset($_SESSION['userid']) prüfen, ob der Nutzer eingeloggt ist.
Anschließend würde ich die Daten des Nutzers aus der Datenbank laden und dann den Rang vergleichen.
Zudem würde ich nicht per Meta-Tag weiterleiten, sondern per location-Header.

Ich kenne den Rest deines Codes nicht, aber ich würde es ca. so schreiben:
 PHP 
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
<?php
if( !isset($_SESSION['userid']) )
{
   
// Nicht eingeloggt...
   
header('location: index.php'); 
   exit;
}

// Nutzer ist eingeloggt -> Mithilfe der User-Id aus der Session die Daten des Nutzers laden
$statement $pdo->prepare("SELECT * FROM users WHERE id = :userid");
$statement->execute(array('userid' => $_SESSION['userid']));   
$user$statement->fetch();

// Rang 2? 
if( $user['rang'] != )
{
   
header('location: index.php');
   exit;
}

/*
  Hier kommt der Code hin, der ausgeführt werden soll, wenn der Nutzer eingeloggt und Rang 2 ist...
  Auf seine Daten kannst du nun über $user zugreifen. 
*/






Schau mal bei meinem Projekt vorbei. Vielleicht ist das ja was für dich MyStartPanel - Deine persönliche Startseite mit deinen Favoriten
Auf der Suche nach einem guten Vokabeltrainer? Vokabeltrainer Cramfire - Schnell und effektiv Vokabeln lernen
10.01.2016, 02:49 Profil | PM | E-Mail  
snork
Mitglied
Guter User


Dabei seit: 27.11.2008
Herkunft: keine Angabe
Posts: 427
      Zitat | Bearbeiten

danke funktioniert




Post wurde schon 3x editiert, das letzte mal am 10.01.2016 um 11:26 von snork
10.01.2016, 10:37 Profil | PM | E-Mail  
snork
Mitglied
Guter User


Dabei seit: 27.11.2008
Herkunft: keine Angabe
Posts: 427
      Zitat | Bearbeiten

ich ahbe noch eine frage dazu:
 PHP 
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
<?php
if( !isset($_SESSION['userid']) )
{
   
// Nicht eingeloggt...
   
header('location: index.php'); 
   exit;
}

// Nutzer ist eingeloggt -> Mithilfe der User-Id aus der Session die Daten des Nutzers laden
$statement $pdo->prepare("SELECT * FROM users WHERE id = :userid");
$statement->execute(array('userid' => $_SESSION['userid']));   
$user$statement->fetch();

// Rang 2? 
[php]if( $user['rang'] != )
{
   
header('location: index.php');
   exit;
}




anstatt rang 2 habe ich jetzte admin und user und moderator und ich möchte das auf die seite nur wer rang admin und rang modrator hat kommt .


 PHP 
1:
2:
3:
4:
5:
if( $user['rang'] != Moderator && Admin )
{
   header('location: index.php');
   exit;
}


kann mir das jemand genau erklären das ich es vrstehe das != steht ja für das muß der rang sein oder?


09.11.2020, 16:28 Profil | PM | E-Mail  
DingsDaBums
Mitglied
Exzellenter User


Dabei seit: 12.09.2010
Herkunft: keine Angabe
Posts: 2490
      Zitat | Bearbeiten

Das "!=" steht für ungleich. Also "1 != 2" ergibt true, aber "1 != 1" ist false.

 PHP 
1:
2:
3:
4:
5:
6:
7:
8:

// Die Bedingung muss wie folgt entsprechend angepasst werden
if( $user['rang'] != 'Moderator' && $user['rang'] != 'Admin' )
{
   // Dieser Teil wird ausgeführt, wenn die Variable $user['rang'] weder den String "Moderator" noch "Admin" enthält
   header('location: index.php');
   exit;
}



Schau mal bei meinem Projekt vorbei. Vielleicht ist das ja was für dich MyStartPanel - Deine persönliche Startseite mit deinen Favoriten
Auf der Suche nach einem guten Vokabeltrainer? Vokabeltrainer Cramfire - Schnell und effektiv Vokabeln lernen
09.11.2020, 19:07 Profil | PM | E-Mail  
snork
Mitglied
Guter User


Dabei seit: 27.11.2008
Herkunft: keine Angabe
Posts: 427
      Zitat | Bearbeiten

ok. danke für die hilfe/erklärungen funktioniert wunderbar. wer da maö bisel mit rumexperimentieren


09.11.2020, 20:47 Profil | PM | E-Mail  
DingsDaBums
Mitglied
Exzellenter User


Dabei seit: 12.09.2010
Herkunft: keine Angabe
Posts: 2490
      Zitat | Bearbeiten

Noch ein kleiner Tipp für solche Fälle:

Damit man nicht durch einen Tippfehler einen Fehler einbaut wie z.B:
 PHP 
1:
2:
3:
4:

if( $user['rang'] != 'Moderator' && $user['rang'] != 'Admiin'){ 
 // ...
}

den man leicht übersehen kann, würde ich mit Konstanten arbeiten:

 PHP 
1:
2:
3:
4:
5:
6:
7:
8:

define('RANG_MODERATOR', 'Moderator');
define('RANG_ADMIN', 'Admin');

if( $user['rang'] != RANG_MODERATOR && $user['rang'] != RANG_ADMIN){ 
  // ...
}


Was ist jetzt der große Unterschied? Es sollte jetzt normalerweise einen Hinweis von PHP geben, wenn du einen Tippfehler beim schreiben der Konstante hast, wie z.B. "RANG_ADMIIN", weil nie eine Konstante mit diesem Namen definiert wurde.

Und je nachdem was für einen Editor du benutzt, unterstützt er dich dann auch automatisch und schlägt dir "RANG_MODERATOR" und "RANG_ADMIN" vor, wenn du "RANG" eingibst.

Kann gut einige nervige Fehler vorbeugen ^^


Schau mal bei meinem Projekt vorbei. Vielleicht ist das ja was für dich MyStartPanel - Deine persönliche Startseite mit deinen Favoriten
Auf der Suche nach einem guten Vokabeltrainer? Vokabeltrainer Cramfire - Schnell und effektiv Vokabeln lernen

Post wurde schon 1x editiert, das letzte mal am 09.11.2020 um 22:43 von DingsDaBums
09.11.2020, 22:41 Profil | PM | E-Mail  
snork
Mitglied
Guter User


Dabei seit: 27.11.2008
Herkunft: keine Angabe
Posts: 427
      Zitat | Bearbeiten

danke für die ausfürhlich erklärung.

aber eigendlich wenn ich die ganze seite schützen will nur für admins und moderatoren. kann ich es ja auch die abfrage erweitern oder?

 PHP 
1:
2:
3:
4:
5:
6:
if( !isset($_SESSION['userid']) 
{
   // Nicht eingeloggt...
   header('location: index.php'); 
   exit;
}


da hintendran dann && moderator und admin b. oder?

aber das mit den konstanten wede ich mal testen .

eddit hab mir die beiträge oben nochmal angeschaut und denke mit

 PHP 
1:
2:
3:
4:
5:
6:
if( $user['rang'] != 'Moderator' && $user['rang'] != 'Admin' )
{
   // Dieser Teil wird ausgeführt, wenn die Variable $user['rang'] weder den String "Moderator" noch "Admin" enthält
   header('location: index.php');
   exit;
}





Post wurde schon 2x editiert, das letzte mal am 10.11.2020 um 16:11 von snork
10.11.2020, 14:31 Profil | PM | E-Mail  
snork
Mitglied
Guter User


Dabei seit: 27.11.2008
Herkunft: keine Angabe
Posts: 427
      Zitat | Bearbeiten

ich pack die frage einfach mal hier dazu. hat ja auchw as hiermit zutun.

so:
 PHP 
1:
2:
3:
4:
5:
6:
7:
<?php
if( !isset($_SESSION['userid']) 
{
   
// Nicht eingeloggt...
   
header('location: index.php'); 
   exit;


wir ja geschaut ob der user eingeloggt ist . im tutorial auf gibhub https://github.com/PHP-Einfach/loginscript

gibt es die https://github.com/PHP-Einfach/loginscript/blob/master/inc/functions.inc.php

wenn man diese einbindet kann man prüfen ob der user eingeloggt ist mit:
 PHP 
1:
2:
3:
//Überprüfe, dass der User eingeloggt ist
//Der Aufruf von check_user() muss in alle internen Seiten eingebaut sein
$user = check_user();


kann mir jemand den unterschied erklären oder was besser ist? weil im tutorial wird die funktions datei ja nicht erklärt leider.


11.11.2020, 13:39 Profil | PM | E-Mail  
snork
Mitglied
Guter User


Dabei seit: 27.11.2008
Herkunft: keine Angabe
Posts: 427
      Zitat | Bearbeiten

sorry für den doppelpost aber könnte mir das jemand erklären das ich das verstehe?


17.11.2020, 20:08 Profil | PM | E-Mail  
DingsDaBums
Mitglied
Exzellenter User


Dabei seit: 12.09.2010
Herkunft: keine Angabe
Posts: 2490
      Zitat | Bearbeiten

Zitat:
Orginal von snork
[...] weil im tutorial wird die funktions datei ja nicht erklärt leider.


Also ein bisschen steht ja schon in Form von Kommentaren über und in der Funktion. Ansonsten muss man sich halt den Code anschauen und die Funktionen in der PHP Dokumentation nachschlagen, um zu verstehen, was da passiert. Das ist sehr wichtig, wenn man mit fremden Code arbeitet.

Ein Unterschied ist entsprechend, dass nicht nur geprüft wird, ob ein Nutzer eingeloggt ist, sondern der Nutzer wird auch aus der Datenbank geladen und von der Funktion zurück geliefert.

Ein weiterer Unterschied ist, dass nicht nur geprüft wird, ob in der Session der Wert "userid" gesetzt ist, sondern auch ob der Wert (noch) gültig ist, als ob der Nutzer immer noch existiert oder nicht vielleicht in der Zwischenzeit gelöscht wurde oder ähnliches. Die Session ist ja komplett unabhängig von der Datenbank und anderen Dingen. Theoretisch kann da noch eine Session mit einer User ID aktiv sein, die zu einem Nutzer gehört, der gar nicht mehr existiert, weil er z.B. gelöscht wurde, um ihm den Zugriff zu entziehen.

Zudem gibt es noch einen weiteren großen Unterschied: Wenn der Nutzer laut Session noch nicht eingeloggt ist, wird ein Cookie überprüft, der gesetzt wird, wenn man angemeldet bleiben möchte, auch wenn man den Browser schließt oder den Computer neu startet (vorausgesetzt, dass dieser Cookie nicht aufgrund der Einstellungen im Browser gelöscht wird).

Wichtig zu wissen: In diesem Cookie steht dafür entsprechend nicht einfach die userid von dem Nutzer, sondern ein Token (eine Art Passwort), der nicht so leicht erraten werden kann. Sonst könnte man sich einfach einen Cookie mit der userid von einem anderen Nutzer erstellen und wäre eingeloggt, auch ohne dessen Passwort usw. zu kennen.

Ein großer Vorteil, der zusätzlich beim Nutzen dieser Funktion hinzukommt: Dadurch, dass man eine zentral gepflegte Funktion nutzt, kannst du jederzeit die Logik hinter der Prüfung, ob der Nutzer eingeloggt ist, ändern, ohne den Code an 100 Stellen anpassen zu müssen. Wenn du z.B. die ID des Nutzers nicht mehr in $_SESSION['userid'] speichern möchtest, sondern aus irgendwelchen Gründen in $_SESSION['user_id'], dann musst du das ohne eine solche zentrale Funktion an allen Stellen ändern, wo du überprüfst, ob der Nutzer eingeloggt ist. Wenn du die Funktion nutzt, musst du es nur einmal in dieser Funktion anpassen. Und das ist jetzt nur ein ganz einfaches Beispiel. Es gibt da viele Gründe, wieso sich da mal was ändern könnte.


Schau mal bei meinem Projekt vorbei. Vielleicht ist das ja was für dich MyStartPanel - Deine persönliche Startseite mit deinen Favoriten
Auf der Suche nach einem guten Vokabeltrainer? Vokabeltrainer Cramfire - Schnell und effektiv Vokabeln lernen
18.11.2020, 09:41 Profil | PM | E-Mail  
snork
Mitglied
Guter User


Dabei seit: 27.11.2008
Herkunft: keine Angabe
Posts: 427
      Zitat | Bearbeiten

danke das reicht mir schon als info.


18.11.2020, 17:26 Profil | PM | E-Mail  
Seiten (1):  1 
PHP-Support.de » Programmierung » PHP & MySQL » if(!isset (login tut)   

Neues Thema | Antworten   


Powered by Command Board 1.0 - Beta 2.0 © 2004-08 PHP-Einfach | Impressum | Datenschutz