webForumDet fria alternativet

flera användare / inloggning

12 svar · 885 visningar · startad av snigel1

snigel1Medlem sedan juni 20048 inlägg
#1

Hej. jag är relativt dålig och nybörjare på php.
det är så att jag har gjort ett adminsystem för en tabell där man kan ta bort, lägga till och editera rader.

grejen är att jag vill att flera olika användare ska kunna använda samma script, men med vissa modifikationer, utan att behöva kopiera en kopia av admin-katalogen för varje ny användare och byta ut namnet överallt i koden. olika använder ska alltså kunna editera olika tabeller.... det går ju att skriva admin.php?user=arne och sen sätta typ "insert into tabell_$user......" men det är ju inte särskilt säkert plus att det inte komemr hänga med bland de andra php-filer som finns i katalogen.

till detta vill jag också att man ska kunna logga in.

alltså... jag loggar in med lösenord samt användarnamnet arne och kommer till admin.php

där ska alla $user i php-koden ersättas med arne, samma sak ska också hänga kvar när användaren går vidare i adminkatalogen. överallt ska $user hänga med.

någon som har nåt tips på hur man ska tackla problemet?

PeddaMedlem sedan juni 20006 032 inlägg
#2

Du kan använda sessioner (om du inte redan gör det)

När användaren loggar in sätt en session med vilken status användaren har.
T.ex status 1 ger full tillgång, och status 2 ger begränsad tillgång.
När en ny sida öppnas kollar man vilken status användaren har och nekar alternativt öppnar sidan beroende på om man har rättighet till den sidan.

Detta innebär nog en hel del ändringar i dina sidor, men det är du nog tvungen till om du ska kunna begränsa tillgången för olika användare.

Välkommen till wF. :bire

snigel1Medlem sedan juni 20048 inlägg
#3

jag hade listat ut att lösningen antagligen hade med sessions att göra.. men hur kommer jag igång med det? har precis lärt mig att hämta och skriva data ur mysql :D heeh

PeddaMedlem sedan juni 20006 032 inlägg
#4

Ok, ska försöka förklara lite enkelt.

login.php
Formulär där man fyller i namn och lösen

check.php
Kolla mot mysql att namn och lösen stämmer.
om ok, sätt session.

if (isset($_POST['submit'])){ 
  $pass = md5($_POST['passwd']); // om du kör md5 på lösenordet
  $sql = "SELECT status FROM members WHERE user='{$_POST['user']}' AND pass='$pass'"; 
  $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: login.php?badlogin="); 
    exit; 
  } 
  
  // Sätt sessionen med aktuell status
  $_SESSION['sess_status'] = mysql_result($result, 0); 
  // Sessionen är satt, skicka vidare till nästa sida
  header("Location: medlemsarea.php"); 
  exit; 
}

medlemsarea.php

<?php 
session_start(); // Alltid överst på sidan 
 
// Kolla om inloggad = sessionen satt 
// Om ingen session är satt, tillbaka till login.php
if (!isset($_SESSION['sess_status'])){ 
  header("Location: login.php"); 
  exit; 
} 

// Kolla statusen
if ($_SESSION['sess_status'] == 1) {
  echo "blablabla"; // Innehållet som är för de med status 1
} else if ($_SESSION['sess_status'] == 2) {
  echo "blablabla"; // Innehållet som är för de med status 2
}
?>

Edit/ innan session_start(); får inget finnas, inte ens ett mellanslag! Glömde poängtera detta.

snigel1Medlem sedan juni 20048 inlägg
#5

hm.tack! det där med status blev krångligt. det är inget som ska finnas i users tabellen va?

snigel1Medlem sedan juni 20048 inlägg
#6

fan då.. det blir bara vitt efter formuläret...

jag har i min tabell users följande fält

username, password, email, status
status är satt till 1 på alla..

login.html:

<form action="check.php" method="post">
<input type="text" name="username">
<input type="password" name="password">
<input type="submit" value="submit">
</form>

--------------------------------------------------------------------

check.php:

<?php

		mysql_connect ("localhost", "retype_recol", "xxxx") or die ('I cannot connect to the database because: ' . mysql_error());
	    mysql_select_db ("retype_recol");

if (isset($_POST['submit'])){
$pass = md5($_POST['passwd']); // om du kör md5 på lösenordet
$sql = "SELECT status FROM users WHERE user='{$_POST['username']}' AND password='$password'";
$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: login.php");
exit;
}

// Sätt sessionen med aktuell status
$_SESSION['sess_status'] = mysql_result($result, 0);
// Sessionen är satt, skicka vidare till nästa sida
header("Location: admin.php");
exit;
}

?>

----------------------------

admin.php:

<?php
session_start(); // Alltid överst på sidan

// Kolla om inloggad = sessionen satt
// Om ingen session är satt, tillbaka till login.php
if (!isset($_SESSION['sess_status'])){
header("Location: login.php");
exit;
}

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>retype.recordcollection.admin</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="../record.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<br><br><br>
<center>
<table cellpadding="0" cellspacing="0" boder="0" width="700">
<td>
<span class="rubrik">
<span class="option">Admin-mode!</span><br><br>
Record collection of:</span> jonas
<br><br>

<table width="100%" border="0" cellspacing="1" cellpadding="1">
<tr>
<td width="20%" class="rubrikcell""><span class="rubrik">Artist</span></td>
<td width="20%" class="rubrikcell""><span class="rubrik">Title</span></td>
<td width="10%" class="rubrikcell""><span class="rubrik">Format</span></td>
<td width="10%" class="rubrikcell""><span class="rubrik">Year</span></td>
<td width="20%" class="rubrikcell""><span class="rubrik">Label</span></td>
<td width="20%" class="rubrikcell""><span class="option">Options</span></td>
</tr>

<!-- loopar in skivor.. -->

<?php

if ($_SESSION['sess_status'] == 1) { // Innehållet som är för de med status 1

		mysql_connect ("localhost", "retype_recol", "jeuquoo") or die ('I cannot connect to the database because: ' . mysql_error());
	    mysql_select_db ("retype_recol");
			$result = mysql_query("SELECT \* FROM jonas ORDER BY artist;") or die("query failed");
			while ($r = mysql_fetch_array($result)) {
				$id = $r\[id\];
				$artist = $r\[artist\];
				$title= $r\[title\];
				$format = $r\[format\];
				$year = $r\[year\];
				$label= $r\[label\];
				$comment= $r\[comment\];

				echo "\<tr\>";
				echo "\<td class=\\"recordcell\\"\>$artist\</td\>";
				echo "\<td class=\\"recordcell\\"\>$title\</td\>";
				echo "\<td class=\\"recordcell\\"\>$format\</td\>";
				echo "\<td class=\\"recordcell\\"\>$year\</td\>";
				echo "\<td class=\\"recordcell\\"\>$label\</td\>";
				echo "\<td class=\\"recordcell\\"\>\<span class=\\"option\\"\>\<a href='edit.php?id=$id'\>edit\</a\> - \<a href='delete.php?id=$id'\>delete\</a\>\</span\>\</td\>";
				echo "\</tr\>";
			}

}

?>

<!-- //loopar in skivor.. -->

</table>
<br><br>
<span class="link">
<a href="add.php">Add records</a> / <a href="../collection.php?user=jonas">Back to view-only mode</a>
</span>
</td>

</table>
</center>

</body>
</html>

___________________________________________________

sen är det ju meningen att select from jonas i admin.php ska bytas till select from $username osv osv...

PeddaMedlem sedan juni 20006 032 inlägg
#7

Missade nog en sak när jag skrev mitt första inlägg.
Lägg till
session_register("sess_status");
efter
$_SESSION['sess_status'] = mysql_result($result, 0);
i check.php

snigel1Medlem sedan juni 20048 inlägg
#8

fortfarande vitt dessvärre :/

PeddaMedlem sedan juni 20006 032 inlägg
#9

ok, får provköra det själv för att se vad jag har gjort för fel. Blir nog efter fotbollen. ;)

snigel1Medlem sedan juni 20048 inlägg
#10

tusen tack!

PeddaMedlem sedan juni 20006 032 inlägg
#11

Har hittat en del fel, bla i formuläret.
Nu funkar det iaf på min server.

login.php

<?php echo "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?".">"; ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Namnl&ouml;st dokument</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>

<body>
<?php 
if (isset($_GET['wrong'])) {
	echo "Fel användarnamn eller lösenord.";
} else if (isset($_GET['login'])) {
	echo "Du måste logga in för att få tillgång till sidan.";
}
?>
<form action="check.php" method="post">
<input type="text" name="username">
<input type="password" name="password">
<input name="submit" type="submit" id="submit" value="submit">
</form>
</body>
</html>

check.php

<?php
session_start(); // alltid överst på sidan

// Ändra till dina inställningar
$mysql_server = "localhost";	// server
$mysql_user = "xxx";	// mysql användarnamn 
$mysql_password = "xxx";	// mysql lösenord
$mysql_database = "test_db";	// mysql databasnamn

$conn = @mysql_connect($mysql_server, $mysql_user, $mysql_password) or die("Kunde inte ansluta till databasen."); 
mysql_select_db($mysql_database, $conn); 

if (isset($_POST['submit'])){
$sql = "SELECT status FROM users WHERE username='{$_POST['username']}' AND password='{$_POST['password']}'";
$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: login.php?wrong=");
exit;
}

// Sätt sessionen med aktuell status
$_SESSION['sess_status'] = mysql_result($result, 0);
$_SESSION['sess_username'] = $_POST['username'];

// Sessionen är satt, skicka vidare till nästa sida
header("Location: admin.php");
exit;
} else {
	header("Location: login.php?login=");
	exit;
}

?>

admin.php

<?php 
session_start(); // Alltid överst på sidan 
 
// Kolla om inloggad = sessionen satt 
// Om ingen session är satt, tillbaka till login.php
if (!isset($_SESSION['sess_status'])){ 
  header("Location: login.php?login="); 
  exit; 
} 

// Kolla statusen
if ($_SESSION['sess_status'] == 1) {
  echo "Välkommen ".$_SESSION['sess_username'].""; // Innehållet som är för de med status 1
} else if ($_SESSION['sess_status'] == 2) {
  echo "Välkommen ".$_SESSION['sess_username'].""; // Innehållet som är för de med status 2
}
?>
snigel1Medlem sedan juni 20048 inlägg
#12

thanx som fan. nu ska jag bara få med username på alla undersidor!!!

hur använder jag den?
försökte skriva
$username = "$_SESSION['sess_username']";

(för att sedan ta select * from $username..... )
men det gillade den inte,.,

snigel1Medlem sedan juni 20048 inlägg
#13

aha. verkade funka när man tog bort " och " :)

136 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
133 ms — hämta forumlista (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)