• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Admin/Mitgliederstatus prüfen

farchris

Mitglied
Hallo,
ich kann User registrieren. Dort wähle ich aus: "Mitglied" (1) oder "Admin" (2). Wenn man sich nun als ein Mitglied einloggt, möchte ich, dass "Mitglied" angezeigt wird. Als Admin dann natürlich "Administrator". Aber bei mir wird immer "Nichts von beiden" angezeigt. In der Datenbank stehen die jeweiligen Zahlen. Das Feld ist vom Datentyp "INT".

Code:
<?php
session_start();
$name = $_SESSION['username'];

include("../db_connect.php");
$mysqlabfrage = "SELECT status FROM login WHERE id ='". $name ."'";
$abfrage = mysql_query($mysqlabfrage);
$status[0] = mysql_fetch_array($abfrage);

if ($status[0] == "1")
{
echo "Mitglied";
}
else if ($status[0] == "2")
{
echo "Administrator";
}
else
{
echo "Nichts von beiden.";
}

Danke!
 
Habe es geändert. Aber ich glaube es liegt an etwas anderem:
Der Session-Name wird überprüft.

$mysqlabfrage = "SELECT status FROM login WHERE id ='".$name."'";

Es wird also das Feld "status" aus der Tabelle "login" überprüft. Dabei soll die id = Session-Name sein. Aber der Session-Name ist ja z.B. Chris. Dann kann es ja garnicht gehen. Aber wenn ich sage "WHERE name=..." dann klappt es auch nicht.
 
Ich gebe zu, ich habe eben einfach darauf verzichtet, darauf hinzuweisen, dass es seltsam ist, einen Namen als ID (üblicherweise numerischer Primärschlüssel einer Tabelle) zu haben.

Um dazu was zu sagen, müsste man deine Tabellenstruktur sehen.

Es ist übrigens höchstwahrscheinlich auch nicht sinnvoll, den Usernamen in der Session zu speichern. Eine ID sollte reichen. Alles andere kommt dann aus der Datenbank.
 
Hallo, hier ist meine Datenbankstruktur:

Code:
-- 
-- Tabellenstruktur für Tabelle `login`
-- 

CREATE TABLE `login` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `name` varchar(20) NOT NULL,
  `pw` varchar(32) NOT NULL,
  `status` int(1) NOT NULL,
  PRIMARY KEY  (`id`),
  UNIQUE KEY `name_2` (`name`),
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;

-- 
-- Daten für Tabelle `login`
-- 

INSERT INTO `login` (`id`, `name`, `pw`, `status`) VALUES (1, 'Chris', '6b34fe24ac2ff8103f6fce1f0da2ef57', 1);

Ich habe nach dem Login: $_SESSION['username'] = $name; und lese dann wo gewünscht einfach den Benutzernamen über die Session aus.

Danke.
 
Joa, grundsätzlich sollte das mit "WHERE name" schon hinhauen.

Debuggen:

PHP:
$mysqlabfrage = "SELECT status FROM login WHERE `name` ='". $name ."'";

echo '<p>' . $mysqlabfrage . '</p>';

$abfrage = mysql_query($mysqlabfrage);
$status = mysql_fetch_array($abfrage);

print_r($status);
 
Hallo,
es funktioniert.
Allerdings nur mit "mysql_fetch_array". Ich hatte "mysql_fetch_assoc".
Und "$status[0]" muss auch sein.

Danke für deine Hilfe!
 
Zuletzt bearbeitet:
"mysql_fetch_array — Liefert einen Datensatz als assoziatives Array, als numerisches Array oder beides"

"mysql_fetch_assoc — Liefert einen Datensatz als assoziatives Array"

Numerisches Array: $row[0] = '1'
Assoziatives Array: $row['status'] = '1'

Ich kann mir unter 'status' mehr vorstellen als unter 0.
 
Wenn wir davon ausgehen, dass der Benutzername bei Anmeldung irgendwie validiert wurde, ist das erstmal sicher. Die Inhalte von $_SESSION werden serverseitig gespeichert, da gibt's nichts zu manipulieren. (Schaden kann es natürlich auch nichts, trotzdem mal zu escapen, das stimmt.)

Ansonsten wie gesagt:

mermshaus schrieb:
Es ist übrigens höchstwahrscheinlich auch nicht sinnvoll, den Usernamen in der Session zu speichern. Eine ID sollte reichen. Alles andere kommt dann aus der Datenbank.
 
Zurück
Oben