webForumDet fria alternativet

Separera admin från användare

PHP

29 svar · 911 visningar · startad av Tulork

Medlem sedan aug. 2004903 inlägg
Frågan#1

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...

Medlem sedan juni 20006 031 inlägg
#2

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.

Medlem sedan aug. 2004903 inlägg
#3

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

Medlem sedan aug. 2004903 inlägg
#4

om det var otydligt så menade jag att funktionen som omöjligjorde borttagningen utav admin ur tabellen har jag redan

Medlem sedan juni 20006 031 inlägg
#5

på sidan du raderar ifrån är det ju bara att kolla vad dom är admin eller inte

Medlem sedan aug. 2004903 inlägg
#6

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?

Medlem sedan juni 20006 031 inlägg
#7

När du kollar namn o lösen så har du

$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;
}
Medlem sedan aug. 2004903 inlägg
#8

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

Medlem sedan juni 20006 031 inlägg
#9

Du verkar förstå.

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.

Medlem sedan aug. 2004903 inlägg
#10

låter bra, ska testa snart..ska bara lista ut ett sätt att lägga till user_level i tablen members i databasen utan att göra om hela tablen..

Medlem sedan juni 20006 031 inlägg
#11

Har du inte phpmyadmin eller någon annat för att hantera mySQL?
Bara att lägga till fältet i så fall ju.

Medlem sedan aug. 2004903 inlägg
#12

orka phpMyadmin :) det är ett bra probram, men jag kör vnc dirrekt mot test servern o har mysql igång i en terminal..vad gör jag för fel här?

add [column] user_level varchar(10) default''[AFTER name];

Medlem sedan juni 20006 031 inlägg
#13

Du måste använda ALTER TABLE för att ändra i en tabell, men jag har aldrig gjort det i mySQL.

Men det borde vara nåt sånt här

alter table members add column userlevel varchar(10) Default 'user';

men du måste ha alter rättighet till databasen, men det kanske du har?

Medlem sedan aug. 2004903 inlägg
#14

aa...iom att det är vår egen server vi jobbar mot så ;)

Medlem sedan aug. 2004903 inlägg
#15

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";
Medlem sedan juni 20006 031 inlägg
#16

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, 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, 'id');
  $_SESSION['sess_user'] = $_POST['user'];
  $_SESSION['sess_userlevel'] = mysql_result($result, 0, 'userlevel');

  if($_SESSION['sess_userlevel'] == "admin") {
    header("Location: admin.php");
    exit;
  }
  else
  {
    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>
Medlem sedan juni 20006 031 inlägg
#17

admin.php

<?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";
Medlem sedan aug. 2004903 inlägg
#18

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.

Medlem sedan aug. 2004903 inlägg
#19

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!

Medlem sedan juni 20006 031 inlägg
#20

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.

263 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)