Login Script mit Adminbereich

Also ich komm da irgendwie nicht weiter, irdendwie wir die If-Anweisung komplett übergangen macht mit der elseif anweisung weiter.
Denn ob ich mich als Admin oder als User anmelde ich komme nicht in meinen Adminbereich.

Wie kann ich denn mit SQL denn Wert für admin in der DB abgleichen, brauch ich vielleicht noch in meiner USER-Tabelle eine Spalte mit der Zugriffsberechtigung oder reicht das mit der abfrage das der Benutzername admin existiert?


PHP:
<?php 
// Session starten
session_start ();

// Datenbankverbindung aufbauen 
$connectionid = mysql_connect ("", ", ""); 
if (!mysql_select_db ("", $connectionid)) 
{ 
  die ("Keine Verbindung zur Datenbank"); 
} 

$sql = "SELECT ".
    "id, benutzername ".
  "FROM ".
    "benutzer ".
  "WHERE ".
    "(benutzername like '".$_REQUEST["name"]."') AND ".
    "(kennwort = '".md5 ($_REQUEST["pwd"])."')";
$result = mysql_query($sql) or die(mysql_error()); 

if($_SESSION['benutzername'] == 'admin')
{
  $sql = "SELECT ".
    "id, benutzername ".
  "FROM ".
    "benutzer ".
  "WHERE ".
    "(benutzername like 'admin') AND ".
    "(kennwort = '".md5 ($_REQUEST["pwd"])."')"; 
$result = mysql_query($sql) or die(mysql_error());
  header ("Location: admin.php");
}
elseif  (mysql_num_rows ($result) > 0)
{ 
  // Benutzerdaten in ein Array auslesen. 
  $data = mysql_fetch_array ($result);

  // Sessionvariablen erstellen und registrieren
  $_SESSION["user_id"] = $data["id"];
  $_SESSION["user_nickname"] = $data["benutzername"]; 

  header ("Location: index.php");
} 
else
{ 
  header ("Location: anmeldung.php?fehler=1");
} 
?>

Danke
 
Zuletzt bearbeitet:
und was spuckt meion var_dump aus den ich in meinem letzten Posting gepostet habe=? der ist genau dazu da um das herauszufinden.
 
  • Gefällt mir
Reaktionen: Joe
Nun das ist es ja es sagt das ein fehler in der Zeile 42 ist:

PHP:
elseif  (mysql_num_rows ($result) > 0)
{ 
  // Benutzerdaten in ein Array auslesen. 
  $data = mysql_fetch_array ($result);

  // Sessionvariablen erstellen und registrieren
  $_SESSION["user_id"] = $data["id"];
  $_SESSION["user_nickname"] = $data["benutzername"]; 

  header ("Location: index.php");
}

Fehler: header("location:index.php");

Das leuchtet mir nicht ganz ein.
 
Also wenn die SQL-abfrage korreckt ausgeführt ist und der "admin" + PW auch so existiert in der DB,
dann fehlt lediglich die koreckte Syntax von header location.

http://php.net/manual/de/function.header.php

PHP:
<?php
header("Location: http://www.example.com/"); /* Browser umleiten */

/* Stellen Sie sicher, dass der nachfolgende Code nicht ausgefuehrt wird, wenn
   eine Umleitung stattfindet. */
exit;
?>

Es muss also eine vollständige URL zu deiner Index Seite sein.
 
Das ist es auch nicht, ich habe bestimmt irgend einen Fehler in der if-Anweisung!

Werde trotz des header location nicht in den Adminbereich geleitet. :(
 
Zuletzt bearbeitet:
Also ich lerne ja auch erst seit einem Jahr PHP und MySQL..
Ich verstehe nicht warum du auf die DB zugrefen möchtest denn an sich müsste der Name und das Passwort bereits im Loginformular an die Session weitergegeben sein.

Dann würde eine simple Abfrage des UserNamens und Passwortes in der Session genügen um dann entsprechend weiterzuleiten Oder?

Ich meine das so:

PHP:
<?php
 // Session starten
session_start ();

if((isset($name)) AND (isset($PW)))
   {
   $name = "Admin";
   $passwort="AdminPW";
   }
header ("Location: admin.php"); 
else {
//normale Seite und oder weitere Anweisungen
}
?>

Oder nicht?
 
Brauch er auch nicht. Der Admin steht bei ihm wie alle anderen in der DB. Also muss eigentlich nur geprüft werden ob sein Name "Admin" ist. Ist zwar nicht die sauberste Art, aber so funktioniert es.

Das Passwort wird shcon bei der ersten Anfrage geprüft und somit die das $result > 0.
PHP:
// Session starten
session_start ();

// Datenbankverbindung aufbauen 
$connectionid = mysql_connect ("", "", ""); 
if (!mysql_select_db ("", $connectionid)) 
{ 
  die ("Keine Verbindung zur Datenbank"); 
} 

$sql = "SELECT ".
    "id, benutzername ".
  "FROM ".
    "benutzer ".
  "WHERE ".
    "(benutzername like '".$_REQUEST["name"]."') AND ".
    "(kennwort = '".md5 ($_REQUEST["pwd"])."')";
$result = mysql_query($sql) or die(mysql_error()); 
if  (mysql_num_rows ($result) > 0)
{ 
  // Benutzerdaten in ein Array auslesen. 
  $data = mysql_fetch_array ($result);

  // Sessionvariablen erstellen und registrieren
  $_SESSION["user_id"] = $data["id"];
  $_SESSION["user_nickname"] = $data["benutzername"]; 

  if($_SESSION["user_nickname"] == "Admin"){
	  header ("location: admin.php");
  }else{
  header ("Location: index.php");
  }
} 
else
{ 
  header ("Location: anmeldung.php?fehler=1");
}
 
  • Gefällt mir
Reaktionen: Joe
Ja jetzt funktioniert es hätte also gereicht wenn ich noch eine if-Anweisung üfr die Erstellung der Sessionvariable gebaut hätte :D

Vielen Dank.

Was wäre denn die sauberste Art für das Login Script die Methode von Joe ?
Und ist es vielleicht besser eine extra Script mit den Zugriffsdaten auf die DB zuschreiben damit das nicht im Login Script steht?


Kurze Zwischenfrage (Gehört ja auch mit zu dem Thema deshalb will ich kein neues Erstellen)

Damit nur der Admin Zugriff auf den Adminbereich hat habe ich in die Seite folgendes eingebaut.

PHP:
<?php 
include("checkuser.php");
    if ($_SESSION["user_id"] != '1') {
        header("location: admin.php");
        exit;
    } 
?>

Es Funktioniert auch, wollte bloß wissen ob das auch so korekt ist oder Ihr sagt das das Unsicher bzw. in irgend einer hinsicht Flasch ist.

Danke
 
Zuletzt bearbeitet:
Hi

es gibt meines Wissens nach noch eine etwas schnellere Methode:
PHP:
$sql = "SELECT ".
    "id, benutzername ".
  "FROM ".
    "benutzer ".
  "WHERE ".
    "(benutzername like '".$_REQUEST["name"]."')  LIMIT 0,1 ";
$result = mysql_query($sql) or die(mysql_error()); 
if  (mysql_num_rows ($result) > 0)
{ 
  // Benutzerdaten in ein Array auslesen. 
  $data = mysql_fetch_array ($result);
  if( $data["kennwort"] == md5 ($_REQUEST["pwd"]) )
  //Richtiges Passwort
}
 
Warum machst du nicht eine weitere spalte in deiner datenbank mit dem feld admin indem du eine 0 oder 1 für admin speicherst.
Dann deine sql anpassen und danach abfragen mit IF.

Aber wo hast du sowas abgeschaut:
Code:
$_SESSION["user_nickname"] = ["admin"];
Die eckigen Klammern rechts gehören da eigentlich nicht hin.
Du solltest dir mal das PHP-Manual anschauen....
 
Zurück