Avatar billede jomi83 Nybegynder
29. januar 2009 - 19:18 Der er 10 kommentarer

Definer status?

Hej eksperter.

Jeg har en admin login funktion og jeg skal til at lave en bruger login funktion på min side. Derfor skal det jo altså defineres om man er logget ind som admin eller bruger, men hvordan gøres dette?

Efter man er logget ind, skal man altså (som admin) kunne se en menu, som man kun kan se/benytte hvis man er logget ind som admin... Håber det er til at forstå, min login.php ser således ud:

<?php

include("opencon.php");

$username = $_POST['username'];
$password = $_POST['password'];

$row = mysql_query("SELECT * FROM admin WHERE username = '$username' AND password = '$password'") or die (mysql_error());

if(mysql_num_rows($row) == 1) {
echo "Du er nu logget ind<br>";
} else {
echo "Brugernavn eller kodeordet var forkert";
}
include("closecon.php");
?>

Hvis jeg så efter <br> i "Du er nu logget ind" lavede et link til en side f.eks. kaldet "admin_sendbesked.php" så skulle den gerne vide i admin_sendbesked.php at det er en admin.
Avatar billede showsource Seniormester
29. januar 2009 - 19:23 #1
Du kan gemme en værdi i tabellen, som f.eks. er 0 eller 1, og hvis det er admin, så har den værdien 1.
Ved udtræk kan du så tjekke værdien, og sætte en session som fortæller det er admin.
Avatar billede jomi83 Nybegynder
29. januar 2009 - 19:31 #2
Okay... Hvordan gør jeg helt præcist dette? Jeg er helt ny med php :)
Avatar billede psychopixi Nybegynder
29. januar 2009 - 19:40 #3
For det første burde du nok validere dine bruger input, for at sikre mod mysql injection attacks. Dette kan fx gøres simpelt med mysql_real_escape_string funktionen.

For det andet burde du overveje at hashe dine passwords for øget sikkerhed.

Mht til dit spørgsmål kan du sætte en session variabel der er lig med fx 1 hvis du har at gøre med en admin og 0 hvis du har at gøre med en alm. bruger.

Simpelt eksempel i session variable:
Login side:
<?php
session_start();
if($user == "admin"){
$_SESSION['user_rights'] = 1;
}
?>

Hjemmeside:
<?php
session_start();
if($_SESSION['user_rights'] == 1){
// Vis admin indhold
}
else{
// Vis alm. bruger indhold
}
?>
Avatar billede showsource Seniormester
29. januar 2009 - 19:41 #4
hmm, lad os sige du har et felt i db med brugernavn kaldet "username" og et felt kaldet "adminstatus" ( Jeg mener at "status" er et reserveret ord i mysql, så lad endelig være med at bruge det som navn på et felt. "by" er et andet ex. på reserveret ord )

"adminstatus" er et felt af typen INT ( et tal ), og standardværdi er 0
Det row som er admin, er feltet "adminstatus" sat til 1

$row = mysql_query("SELECT username, adminstatus FROM admin WHERE username = '$username' AND password = '$password'") or die (mysql_error());

if(mysql_num_rows($row) == 1) {

$a = mysql_fetch_object($row);
$_SESSION["bruger"] = $a->username;
$_SESSION["status"] = $a->adminstatus;

echo "Du er nu logget ind<br>";

} else {

echo "Brugernavn eller kodeordet var forkert";

}

Glem ikke session_start() i topppen af siden! Altså FØR du laver html output.
Heller ikke "luft" elelr liniskift må der være før session_start()

På andre sider kan du så bruge

<?php
session_start();

if(!isset($_SESSION["bruger"],$_SESSION["status"])) {
echo"Kræver log ind!";
exit;
}

echo "Hej ".$_SESSION["bruger"];

if($_SESSION["status"] == 1) {
echo" Du er admin!";
}

?>

SÅ'n groft sat op :O)
Avatar billede showsource Seniormester
29. januar 2009 - 19:43 #5
Avatar billede jomi83 Nybegynder
29. januar 2009 - 19:57 #6
Hej igen,

Jeg må ærligt sige at jeg kun kan følge med på nogle af tingene :(

Kan en af jer skrive en lille guide til hvad jeg skal gøre, eller hvordan min login.php skal se ud? Og hvordan gør jeg det med databasen? Ville være super
Avatar billede showsource Seniormester
30. januar 2009 - 06:34 #7
Det er svært uden at skulle lave al koden.
Hvad bruger du til at oprette tabeller ?
Avatar billede jomi83 Nybegynder
30. januar 2009 - 08:06 #8
Jeg bruger en kode som jeg importer?

CREATE TABLE `admin` (
  `id` int(12) NOT NULL auto_increment,
  `username` longtext NOT NULL,
  `password` varchar(255) NOT NULL,
  `adminmail` varchar(255) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;

- Jeg har valgt at lave en tabel på et senere tidspunkt til users, så man evt. kan logge ind på 2 forskellige destinationer.
Avatar billede tfswebguy Nybegynder
30. januar 2009 - 11:59 #9
Værsågod: danieltruelsen(at)hotmail(dot)com

Add mig på MSN, så skal jeg nok lige fikse dit admin problem :)

Mvh Daniel Truelsen
Avatar billede olebole Juniormester
30. januar 2009 - 12:46 #10
<ole>

Som showsource skrev: "Og ja, sikring af query er et must.". Netop derfor bør du glemme alt om gamle, dårlige 'hacks' som mysql_real_escape_string og i stedet bruge mysqli med prepared statements:
    http://dk2.php.net/manual/en/book.mysqli.php

Begynd evt. eksemplerne her:
    http://dk2.php.net/manual/en/mysqli-stmt.prepare.php

Det er dagens og morgendagens måde at bruge MySQL-databaser på under PHP - og du behøver ikke længere tænke på SQL-injections  ;o)

/mvh
</bole>
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester