Vid det här laget hade vi tänkt att separera ut administratorn ur member tablen..vi har en annan tabell som heter admin där lösen och användare heter, skriver man då in rätt lösen och användare komemr man till administrations sidan, annars om man loggar in som användare komemr man till respektive konto.
Inloggningen (index.php)
<?php
session_start(); // Alltid överst på sidan
//ob_start();
include "conn.php"; // Databasanslutningen
// Inloggning
if (isset($_POST['submit'])){
$_POST = db_escape($_POST);
$sql = "SELECT id FROM members
WHERE user='{$_POST['user']}'
AND pass='{$_POST['passwd']}'";
$result = mysql_query($sql);
// Hittades inte användarnamn och lösenord
// skicka till formulär med felmeddelande
if (mysql_num_rows($result) == 0){
header("Location: index.php?badlogin=");
exit;
}
//---------------------------------------------------------------
// elseif {$_POST = db_escape($_POST);
//$sql = "SELECT id FROM admin
// WHERE user='{$_POST['user']}'
// AND pass='{$_POST['passwd']}'";
// $result = mysql_query($sql);
// Sätt sessionen med unikt index
// $_SESSION['sess_id'] = mysql_result($result, 0, 'id');
// $_SESSION['sess_user'] = $_POST['user'];
// header("Location: admin.php");
// exit;
//---------------------------------------------------------------
//}
// Sätt sessionen med unikt index
$_SESSION['sess_id'] = mysql_result($result, 0, 'id');
$_SESSION['sess_user'] = $_POST['user'];
header("Location: konto.php");
exit;
}
// Utloggning
if (isset($_GET['logout'])){
session_unset();
session_destroy();
header("Location: index.php");
exit;
}//ob_end_flush();
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=iso-8859-1">
<title>Index</title>
</head>
<body>
<?php
// Om inte inloggad visa formulär, annars logga ut-länk
if (!isset($_SESSION['sess_user'])){
echo "<h3>Logga in</h3>\n";
// Visa felmeddelande vid felaktig inloggning
if (isset($_GET['badlogin'])){
echo "Fel användarnamn eller lösenord!<br>\n";
echo "Försök igen!\n";
}
?>
<form action="index.php" method="post">
Användarnamn:<br>
<input type="text" name="user"><br>
Lösenord:<br>
<input type="password" name="passwd"><br>
<input type="submit" name="submit" value="Logga in">
</form>
<?php
} else {
echo "<a href=\"index.php?logout=\">Logga ut</a>\n";
}
?>
</body>
</html>
konto.php(fylls med respektives information beroende på användare)
<?php
ob_start();
session_start();
// Kolla om inloggad = sessionen satt
if (!isset($_SESSION['sess_user'])){
header("Location: index.php");
exit;
}
if (isset($_GET['logout'])){
session_unset();
session_destroy();
header("Location: index.php");
exit;
}
?>
<?php
include "conn.php"; // Databasanslutningen
// Performing SQL query sh
$query = "SELECT * FROM $mem_table WHERE id = ".$_SESSION['sess_id']."";
$result = mysql_query($query) or die('Query failed: ' . mysql_error());
// Printing results in HTML
echo "<p>Den inloggade är<p>";
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
echo "\t<tr>\n";
foreach ($line as $col_value) {
echo "\t\t<td>$col_value</td>\n";
}
echo "\t</tr>\n";
}
echo "</table>\n";
// Free resultset
mysql_free_result($result);
ob_end_flush();
?>
<?php
echo "<br><a href=\"index.php?logout=\">Logga ut</a>\n<br><br>";
?>
//<a href="admin.php">Tillbaka </a><br><br>
conn.php
<?php
// Byt ut mot dina inloggningsuppgifter och databas
$mysql_server = "localhost";
$mysql_user = "root";
$mysql_password = "ppmibEy@";
$mysql_database = "members";
$mem_table = "members";
$conn = mysql_connect($mysql_server, $mysql_user, $mysql_password);
mysql_select_db($mysql_database, $conn);
// En funktion att användas när magic_quotes_gpc inte är satt. För att förhindra SQL-injections, eller i lidrigare fall MySQl-fel.
function db_escape ($post)
{
if (is_string($post)) {
if (get_magic_quotes_gpc()) {
$post = stripslashes($post);
}
return mysql_real_escape_string($post);
}
foreach ($post as $key => $val) {
$post[$key] = db_escape($val);
}
return $post;
}
/*
Se till att det inte finns några dolda tecken, typ radbyte
eller mellanslag, efter den avslutande PHP-taggen !!!
*/
?>
som ni ser så har jag markerat bort det jag försökt med i index.php...när jag gör på det sättet får jag sql fel, function fel, header fel..och den försöker dessutom skicka mig till konto.php, även fast jag loggar in som admin.
tanken är alltså att om admin loggar in, ska han komma till admin.php och om en användare loggar in ska han Endast komma till konto.php och inte kunna gå till adminsidorna...
Jag skulle ha både medlemmar och administratörer i samma tabell, bara lägga till ett fält till members med ett värde som avgör vilket man tillhör.
När man loggar in så skulle jag sätta en extra session med värdet som avgör vad man tillhör.
hmm ok, men när jag listar medlemmarna på sidan där vi tar bort användare så kommer admin med där..då får jag lägga tillbaka en funktion vi hade där som avbröt om man försökte ta bort admin id't...men det du skriver låter bra..hur gör jag det? :D
jo, men hur gör jag det andra du beskriver?..användarna får ju inte kunna bara skriva admin.php o sen komma in där...admin loggar in=admin.php, användare loggar in=konto.php...användare skriver http://blabla/blabla/admin.php= du måste vara inloggad som administratör... om du förstår hur jag menar. Hur gör jag det kodmässigt?
$sql = "SELECT id, userlevel FROM members
WHERE user='{$_POST['user']}'
AND pass='{$_POST['passwd']}'";
$result = mysql_query($sql);
Sen har du en if-sats där du kollar vad userlevel har för värde. Om värdet är för admin så skickar du vidare till admin.php annars till konto.php
/red
glömde skriva allt ;)
i admin.php, kolla så man har rätt userlevel
// Kolla om inloggad = sessionen satt
if (!isset($_SESSION['sess_userlevel']) || $_SESSION['sess_userlevel'] != "admin") {
header("Location: index.php");
// eller
// echo "Du har inte behörighet till den här sidan";
exit;
}
tro det eller ej, men jag förstår precis hur du menar, men jag har problem med att baka in det i koden. Först så måste jag ju ha ett nytt fält i members tablen, user_level fältet, och där admin står, sätter jag det till ett värde...när man loggar in och userlevel har ett värde,sätts en session med user_level värdet, sen skickas man till admin.php, på admin.php kollar man så att user_level värdet är det samma som står i databasen...
jag har väl förstått rätt?? men när jag sitter nu o testar snurrar det bara i huvudet :birp
Skapa tabellen userlevel (ange gärna user som defaultvärde)
Ändra select satsen i index.php så du hämtar ut värdet på userlevel från databasen.
Sätt en session med värdet på userlevel i index.php
Ändra koden i alla sidor som endast admin ska ha tillgång till med koden jag bifogade.
okej, så här har jag gjort nu, hakar upp mig på den sista saken du beskriver..kan du illustrera med admin.php koden jag bifogat? i databasen ligger nu ett userlevel fält med default 'user', bara admin har en userlevel (15), resten har inget. Det som då återstår är själva kontrollen av sessionen om det är admin eller användare och beroende utav det, konto.php eller admin.php....
index.php
<?php
session_start(); // Alltid överst på sidan
//ob_start();
include "conn.php"; // Databasanslutningen
// Inloggning
if (isset($_POST['submit'])){
$_POST = db_escape($_POST);
$sql = "SELECT userlevel FROM members
WHERE user='{$_POST['user']}'
AND pass='{$_POST['passwd']}'";
$result = mysql_query($sql);
// Hittades inte användarnamn och lösenord
// skicka till formulär med felmeddelande
if (mysql_num_rows($result) == 0){
header("Location: index.php?badlogin=");
exit;
}
// Sätt sessionen med unikt index
$_SESSION['sess_id'] = mysql_result($result, 0, 'userlevel');
$_SESSION['sess_user'] = $_POST['user'];
header("Location: admin.php");
exit;
}
// Utloggning
if (isset($_GET['logout'])){
session_unset();
session_destroy();
header("Location: index.php");
exit;
}//ob_end_flush();
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=iso-8859-1">
<title>Index</title>
</head>
<body>
<?php
// Om inte inloggad visa formulär, annars logga ut-länk
if (!isset($_SESSION['sess_user'])){
echo "<h3>Logga in</h3>\n";
// Visa felmeddelande vid felaktig inloggning
if (isset($_GET['badlogin'])){
echo "Fel användarnamn eller lösenord!<br>\n";
echo "Försök igen!\n";
}
?>
<form action="index.php" method="post">
Användarnamn:<br>
<input type="text" name="user"><br>
Lösenord:<br>
<input type="password" name="passwd"><br>
<input type="submit" name="submit" value="Logga in">
</form>
<?php
} else {
echo "<a href=\"index.php?logout=\">Logga ut</a>\n";
}
?>
</body>
</html>
EDIT**
Glömde admin koden :D
<?php
session_start(); // Alltid överst på sidan
// Kolla om inloggad = sessionen satt
if (!isset($_SESSION['sess_user'])){
header("Location: index.php");
exit;
if (isset($_GET['logout'])){
session_unset();
session_destroy();
header("Location: index.php");
exit;
}
}
?>
<html>
<head>
<!--
.style4{
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 9px;
}
.style6{
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 9px; font-weight:bold;
}
-->
</style>
</head>
<body>
<span class="style6">Administrations funktioner</span><br>
<span class="style4"><a href="welcome.php">Lägg till en användare</a><br>
<a href="remove.php">Ta bort en användare</a><br>
<a href="konto.php">Konto</a>
</span><br><br>
</body>
</html>
<?php
echo "<a href=\"index.php?logout=\">Logga ut</a>\n";
<?php
session_start(); // Alltid överst på sidan
// Kolla om inloggad = sessionen satt
if (!isset($_SESSION['sess_userlevel']) || $_SESSION['sess_userlevel'] != "admin") {
header("Location: index.php");
// eller
// echo "Du har inte behörighet till den här sidan";
exit;
}
// tog bort logout eftersom du har den i index.php
?>
<html>
<head>
<!--
.style4{
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 9px;
}
.style6{
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 9px; font-weight:bold;
}
-->
</style>
</head>
<body>
<span class="style6">Administrations funktioner</span><br>
<span class="style4"><a href="welcome.php">Lägg till en användare</a><br>
<a href="remove.php">Ta bort en användare</a><br>
<a href="konto.php">Konto</a>
</span><br><br>
</body>
</html>
<?php
echo "<a href=\"index.php?logout=\">Logga ut</a>\n";
hmm, det funkar inte riktigt :( jag va tvungen till att sätta tillbaka ob flush grejjet för att inte få function och header fel..samt så skickar den alltid in den inloggade till konto.php..och oavsett vem jag loggar in som så har alla tillgång till administrations sidorna.
jag måste påpka det också att jag uppskattar verkligen den snabba hjälpen jag får utav dig! verkligen jättesnällt!! Detta projektet betyder en hel del för oss..inte penga mässigt, men en erfarenhet som är värt mkt!
Att alla skickas till konto.php kan bero på att man inte kan läsa $_SESSION['sess_userlevel'] från direkt efter att den är satt. Var faktiskt osäker på att det skulle funka. :)
Men du borde inte komma in på admin.php
Testa att skriva ut $_SESSION['sess_userlevel'] i konto.php för att se vad den har fått för värde när du loggar in på olika konton.
380 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e