06. januar 2006 - 14:13Der er
5 kommentarer og 1 løsning
Validering af user i MySQL + group_id tilhørsforhold.
Hej Experter (igen-igen),
Jeg har alligevel et par spørgsmål til den kode jeg har fået bikset sammen ved at klippe/klistre lidt. :o)
1. Koden virker som sådan, og jeg kan validere op mod DB'en. Det undrer mig dog at der ikke vises fejlbeskeden "Sorry, wrong username / password" ved forkert username/password kombination. Jeg vil meget gerne have hjælp til at lave denne kode mere fornuftig, evt sådan at det stiller sig over loginformen, som man ofte ser det.
2. Som i kan se i database strukturen nederst, er der lagt op til et group_id tilhørsforhold. Jeg kan ikke finde ud af hvordan jeg skal få dette koblet ind i min nuværende kode - jeg er på bar bund. Lidt kode ville være til stor hjælp! :o)
Pft. /Greg
<------------------------ index.php start...
<html> <head></head> <body>
<?php session_start(); $errorMessage = ''; if (isset($_POST['txtUsername']) && isset($_POST['txtPassword'])) { include './include/opendb.php';
// check if the username and password combination exist in database $sql = "SELECT username FROM users WHERE username = '$username' AND password = PASSWORD('$password')";
$result = mysql_query($sql) or die('Query failed. ' . mysql_error());
if (mysql_num_rows($result) == 1) { // the user id and password match, set the session $_SESSION['db_is_logged_in'] = true;
// after login we move to the list page header('Location: list.php'); exit; } else { $errorMessage = 'Sorry, wrong username / password'; }
2) Kommer an på hvad du vil bruge det til.. du kan enten lave en ekstra tabel, hvor du definerer grupperne og deres ID og efterfølgende sammenligner med den "users" tabel.
Eller (som jeg personligt ville foretrække) du kan bare give brugerne et ID i den nuværende tabel og include en fx functions.php hvor du laver en funktion til at matche ID's med brugerlevels/grupper.
Fx.:
function GetGroup($group_id) { switch ($tool) { case 0: return "Ingen adgang!"; break; case 1: return "Bruger"; break; case 2: return "Superbruger"; break; } case 3: return "Administrator"; break; } }
2. Jeg har nok ikke forklaret mig tydeligt nok, så jeg prøver lige igen. Min user database struktur er vist herunder:
users | CREATE TABLE `users` ( `display_name` varchar(50) NOT NULL default '', `password` varchar(50) NOT NULL default '', `username` varchar(50) NOT NULL default '', `group_id` int(11) NOT NULL default '0', `user_id` int(11) NOT NULL auto_increment, PRIMARY KEY (`user_id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1
Som du kan se, er der et group_id felt. Validering/login af bruger fungerer fint nok på min index.php side, og på efterfølgende sider tjekker jeg om brugeren er logget ind med nedenstående session validering:
Det virker også fint. Det jeg gerne vil frem til er at tilføje et yderligere parameter i session checket, således at der kræves exempelvis gruppe 1, eller måske gruppe 1,2 og 3 (eller 2 og 4, eller ), adgang for at kunne læse en side.
Admin gruppen (1) skal selvfølgelig kunne se alt på alle sider, men for øvrige grupper vil jeg gerne frit kunne definere om siden må vises. Er der et adgangsproblem skal der helst stå en lidt sigende meddelelse, såsom 'Your access profile does not permit you to enter this page'.
Håber det giver mere mening nu.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.