Vinnaren i pepparkakshustävlingen!
  • 1
  • 2
2008-05-08, 22:05
  #1
Medlem
Tjena..
Försöker göra en hemsida till släkten för att kunna boka våran sommarstuga online för att få det att rulla på smidigare, dock inte helt oväntat har jag stött på mängder av problem (första gången jag kodar i php, halvt nybörjare i html med).

Har byggt upp sidan som följande;
startsida
nyheter
boka
galleri
filer
logga ut

Just nu har jag kört fast lite vid olika rättigheter för användarna (som förövrigt endast är 3 konton).
Sidan skall endast kunna administreras utav ett konto, och har nu så man får logga in ennu en gång för att tex skriva en ny nyhet, vilket är idiotiskt..
googlat runt som ett as den senaste tiden för att försöka sätta ett specifikt id på konto1 (eller något?) så konto1 automatiskt inkluderar "admin" taggarna för att skriva in nya nyheter utan att behöva logga in igen som admin när konto1 redan är inloggad på sidan.

Det jag behöver hjälp är alltså att kunna sätta rättigheter åt konto1 så det kommer åt att skriva nyheter, administrera bokningen, ändra/tabort filer osv.


Jag tänkte att de borde vara typ
Kod:
<?php
if(isset($_ID["1"]) !== true) {
header("location: index.php");
include 
"admin.php";
<?

men har somsagt kört fast helt känns de som. Så jag rådfrågar er hur skjutton jag skall göra för att fortsätta?

Min login.php ser ut såhär


mysql tablen ser ut såhär

CREATE TABLE users (
username VARCHAR(30) NOT NULL,
password VARCHAR(40) NOT NULL,
id INT(11) NOT NULL auto_increment,
PRIMARY KEY (username)
);

Vet inte varför jag har auto_increment, ändrar ändå manuellt i mysql administrator..


Ojdå, blev lite mycket text, men hoppas någon vänlig själ hjälper mig med detta.. säg gärna till ifall något är oklart.

/Jonas
Citera
2008-05-08, 22:38
  #2
Medlem
z0mfg(ish)s avatar
Fixa någon slags permission-kontroll. Lägg till ett fält, typ permission, där värdet är kanske 1 för den som får ändra i adminpanelen.
Lagra sedan värdet för den inloggade i en sessionskaka, $_SESSION["permission"], sen kontrollerar du om den är 1 (eller det korrekta värdet) när man försöker komma åt admin-sidorna.
Citera
2008-05-08, 23:14
  #3
Medlem
Permission-kontroll, lust att sammanfatta vad det innebär?

Men om man gör något sånthär då?


if (isset($_ID['1'])) {

$ID = header ("location: aindex.php")[0];
}
else {

$ID = header ("location: index.php")['ip'];
}

?

Dock ganska onödigt, då jag måste ha två index, page1, page2 osv, men det lär väl funka?
Citera
2008-05-08, 23:22
  #4
Medlem
gadzooxs avatar
Lägg till en kolumn i användartabellen, typ IsAdmin = 0/1. När användaren loggar in selectar och assignar du detta värde till $_SESSION['IsAdmin']
Lägg sen en if-sats runt adminpanelen;
Kod:
if ($_SESSION['IsAdmin'] == 1)
{
   
// skriv ut panel

Glöm inte att även dina adminscripts bör kolla värdet på denna variabel, om den inte är 1 redirectar du till framsidan eller visar Access denied eller nåt...


Primary key brukar man för övrigt sätta på ID-kolumnen, som även är auto_increment. Detta för att underlätta joins mot andra tabeller, vilket skulle komma till nytta om du byggde ett större rättighetssystem.

I en annan tabell sparar du då roller med RollID som primary key auto_increment (och namn typ Admin, KanBoka, KanSeBokningar etc).
En tredje tabell har två kolumner UserID och RollID, som båda är foreign key och pekar på respektive tabells primary. I denna tabell sparar du info om vilka roller användarna är med i.

Med några smarta joins i sqlfrågorna är det då lätt att ta reda på vilka roller en användare tillhör (och för admins räkning - vika användare som är med i en viss roll).
Om en användare är med i admingruppen visar du adminpanelen, om han surfar till boka.php och inte är med i KanBoka-gruppen så trycker du upp en fet access denied-skylt i fejset på honom osv
Citera
2008-05-09, 18:28
  #5
Medlem
Tack för utförligt svar!

Så om jag skriver in denna koden i min index.php, bör alltså "Visa den här texten i webläsaren" synas i den divclassen jag lagt till koden i, right?
Kod:
<?php        
    
if ($_SESSION['IsAdmin'] == 1

   
// skriv ut panel 
  
echo "Visa den här texten i webläsaren";
   }  
   
   
?>

Känns som jag missuppfattat dig lite, eller så har jag gjort helt fel.
Citera
2008-05-09, 19:36
  #6
Medlem
gadzooxs avatar
Citat:
Ursprungligen postat av ShazaM
Så om jag skriver in denna koden i min index.php, bör alltså "Visa den här texten i webläsaren" synas i den divclassen jag lagt till koden i, right?
I princip så ja, förutsatt att du kört session_start(); och satt $_SESSION['IsAdmin'] till 1 (vilket lämpligen sätts vid login).
Citera
2008-05-09, 20:07
  #7
Medlem
När jag kör id = 1 visas ingeting, medans när jag kör 0 kommer texten fram.
Känns som jag gjort bort mig lite med mina tables..

Min tabell ser nu ut såhär

DROP TABLE IF EXISTS users;

CREATE TABLE users (
username VARCHAR(30) NOT NULL,
password VARCHAR(40) NOT NULL,
isadmin INT(11) NOT NULL auto_increment,
PRIMARY KEY (isadmin)
);

och sätter in user såhär änsålänge


INSERT INTO users
VALUES ('has', SHA1('jonas'), '1');
Citera
2008-05-09, 20:17
  #8
Medlem
z0mfg(ish)s avatar
Lägg till userID som är prim. och auto_increment. Just nu kommer den 5e som reggar sig få isAdmin = 5.

Tror inte heller att du kan sätta in ett värde, ett auto_increment-fält låter väl sig inte manipuleras.
Men som sagt, lägg till userID som är primary och auto_increment. Det är liksom grunden i alla databassystem.
Citera
2008-05-09, 20:36
  #9
Medlem
Citat:
Ursprungligen postat av z0mfg(ish)
Lägg till userID som är prim. och auto_increment. Just nu kommer den 5e som reggar sig få isAdmin = 5.

Tror inte heller att du kan sätta in ett värde, ett auto_increment-fält låter väl sig inte manipuleras.
Men som sagt, lägg till userID som är primary och auto_increment. Det är liksom grunden i alla databassystem.

Använder isadmin som userID ungefär.. eller menar du att jag skall lägga till ennu ett id?

Tog bort auto_increment nu och fortfarande är isadmin primary och fortfarande kommer ingen text fram när jag har id(1), men kommer fram när jag sätter in 0..

Helt lost just nu
Citera
2008-05-09, 20:44
  #10
Medlem
CREATE TABLE users (
id INT(11) NOT NULL auto_increment,
username VARCHAR(30) NOT NULL,
password VARCHAR(40) NOT NULL,
isadmin INT(11) NOT NULL,
PRIMARY KEY (id)
);

man bör alltid ha ett id på alla tabeller så man kan särskilja raderna. id gör raden unik.
Citera
2008-05-09, 21:17
  #11
Medlem
Lagt till ID nu i tabellen. Behöver jag ändra något när jag hämtar den strängen när jag loggar in nu?

Det är nog de som är problemet... vet inte hur jag skall få in varken id eller isadmin in i php.. kunna använda det alltså.
Citera
2008-05-09, 21:50
  #12
Medlem
så här kanske.


adminsidan bör då även innehålla detta.

Kod:
if($_SESSION["admin"] == true && $_SESSION["inloggning"] == true){

// Innehållet på admin sidan

}
else {
echo 
'Du har ej tillåtelse att vara här';


kanske inte den mest säkra koden. men bör utföra det du är ute efter.
Citera
  • 1
  • 2

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback