06. marts 2005 - 14:23Der er
46 kommentarer og 1 løsning
Admin session
Jeg har et brugersystem der i bund og grund virker fint nok. Men jeg vil gerne ha en maade eller noget saa at én af brugerne er admin og har session adgang til noget som andre ikke paa se.. Jeg fik af hvide jeg skulle lave session saa den tjekker om man er admin, men jeg ved ikke hvordan man sætter session'en til at tjekke om man er admin :? Nogle der ka hjælpe? Evt. en anden løsning?
Hvordan finder den ud af om man er admin? Hvis man skriver $_SESSION['admin'] = "ok"; vil alle jo blive registreret som admin's.. Hva ska jeg gøre for at den finder ud af at én speciel bruger er admin?
<? session_start(); addslashes($username); addslashes($passcode); $password = md5($passcode); require("db.inc"); $passquery = mysql_query("SELECT password, id FROM profiler WHERE username = '$username'"); if (!mysql_num_rows($passquery)) { echo "<meta http-equiv=\"refresh\" content=\"0;url=http://www.unpro.dk/v1/index.php\">"; exit(); } else { if($row = mysql_fetch_array($passquery)) { $dbpassword = $row["password"]; $profilid = $row["id"]; } if($dbpassword == $password) { $login = (true); } if ($dbpassword != $password) { echo "Forkert brugernavn eller password!!!<br>"; echo "Hvis du ikke kan huske dit password, står det i den mail du fik tilsendt ved oprettelsen. Skulle du også have mistet den mail, så kan du få den tilsendt, ved at trykker <a href=\"glemtkode.php\">her</a>.<br>"; exit(); } session_register(username); session_register(password); session_register(profilid); $today = date("d-m-Y"); require("db.inc"); mysql_query("UPDATE profiler set lastlogin = '$today' WHERE username = '$username'"); header("Location: default.php"); } ?>
Jeg tror at login scriptet skulle være der nu.. men min session tjek kode virker ikke :\ Den ser saadan ud:
<? session_start(); require("db_ind.inc"); if(!isset($_SESSION['Nico'])) header("Location: http://www.unpro.dk/v1/index.php"); $passquery = mysql_query("SELECT password FROM profiler WHERE username = '$username'"); exit(); } else { $row = mysql_fetch_array($passquery); $dbpassword = $row["password"]; if($dbpassword == $password) { $login = (true); } if ($dbpassword != $password) { echo "Forkert brugernavn eller password!!!<br>"; echo "Hvis du ikke kan huske dit password, står det i den mail du fik tilsendt ved oprettelsen. Skulle du også have mistet den mail, så kan du få den tilsendt, ved at trykker <a href=\"glemtkode.php\">her</a>.<br>"; exit(); } } ?> Hej :P
Jeg faar fejlen: Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /var/www/html/login/admintest.php on line 10 Forkert brugernavn eller password!!! Hvis du ikke kan huske dit password, står det i den mail du fik tilsendt ved oprettelsen. Skulle du også have mistet den mail, så kan du få den tilsendt, ved at trykker her.
Hvis der er logget ind når man kommer hertil, hvorfor har du så alt det samme login/database kode her?? Prøv lige at læse mine 3 sidste kommentarer, der har du alt hvad du skal bruge. Det er 4-5 linier det drejer sig om. Brugeren skal vel ikke logges på igen på hver side, eller hva' ??
Okay vi starter med login koden som den ser ud nu:
<? session_start(); addslashes($username); addslashes($passcode); $password = md5($passcode); require("db.inc"); $passquery = mysql_query("SELECT password, id FROM profiler WHERE username = '$username'"); if (!mysql_num_rows($passquery)) { echo "<meta http-equiv=\"refresh\" content=\"0;url=http://www.unpro.dk/v1/index.php\">"; exit(); } else { if($row = mysql_fetch_array($passquery)) { $dbpassword = $row["password"]; $profilid = $row["id"]; } if($dbpassword == $password) { $login = (true); } if ($dbpassword != $password) { echo "Forkert brugernavn eller password!!!<br>"; echo "Hvis du ikke kan huske dit password, står det i den mail du fik tilsendt ved oprettelsen. Skulle du også have mistet den mail, så kan du få den tilsendt, ved at trykker <a href=\"glemtkode.php\">her</a>.<br>"; exit(); } session_register(username); session_register(password); session_register(profilid); $today = date("d-m-Y"); require("db.inc"); mysql_query("UPDATE profiler set lastlogin = '$today' WHERE username = '$username'"); if($username == "Admin") $_SESSION['Admin'] = "ok"; header("Location: default.php"); } ?>
Min session kode der tjekker om man er logget ind (den med fejlen)
<? session_start(); require("db.inc"); if(!isset($_SESSION['Admin'])) header("Location: http://www.unpro.dk/v1/index.php"); $passquery = mysql_query("SELECT password FROM profiler WHERE username = '$username'"); exit(); } else { $row = mysql_fetch_array($passquery); $dbpassword = $row["password"]; if($dbpassword == $password) { $login = (true); } if ($dbpassword != $password) { echo "Forkert brugernavn eller password!!!<br>"; echo "Hvis du ikke kan huske dit password, står det i den mail du fik tilsendt ved oprettelsen. Skulle du også have mistet den mail, så kan du få den tilsendt, ved at trykker <a href=\"glemtkode.php\">her</a>.<br>"; exit(); } } ?>
Og min normale session kode for alle andre bruger (virker fint)
<? session_start(); require("db.inc"); $passquery = mysql_query("SELECT password FROM profiler WHERE username = '$username'"); if (!mysql_num_rows($passquery)) { header ("location: http://unpro.dk/v1/"); echo "Du skal logge ind for at se siden, eller også er passwordet forkert<p>"; exit(); } else { $row = mysql_fetch_array($passquery); $dbpassword = $row["password"]; if($dbpassword == $password) { $login = (true); } if ($dbpassword != $password) { echo "Forkert brugernavn eller password!!!<br>"; echo "Hvis du ikke kan huske dit password, står det i den mail du fik tilsendt ved oprettelsen. Skulle du også have mistet den mail, så kan du få den tilsendt, ved at trykker <a href=\"glemtkode.php\">her</a>.<br>"; exit(); } } ?>
<? session_start(); require("db.inc"); $passquery = mysql_query("SELECT password FROM profiler WHERE username = '$username'"); if (!mysql_num_rows($passquery)) header("Location: http://unpro.dk/v1/"); else { $row = mysql_fetch_assoc($passquery); $dbpassword = $row["password"]; if($dbpassword == $password) { $login = (true); //hvad skal det betyde ? if($ else { echo "Forkert brugernavn eller password!!!<br>"; echo "Hvis du ikke kan huske dit password, står det i den mail du fik tilsendt ved oprettelsen. Skulle du også have mistet den mail, så kan du få den tilsendt, ved at trykker <a href=\"glemtkode.php\">her</a>.<br>"; } } ?>
når du har sendt den header i linie 7 sker der ikke mere her, så din echo, exit m.v. er ligegyldige. Men det helt store spørgsmål er: Hvor kommer $username og $password fra ?
<? session_start(); require("db.inc"); $passquery = mysql_query("SELECT password FROM profiler WHERE username = '$username'"); if (!mysql_num_rows($passquery)) header("Location: http://unpro.dk/v1/"); else { $row = mysql_fetch_assoc($passquery); $dbpassword = $row["password"]; if($dbpassword == $password) { $login = (true); //hvad skal det betyde ? else { echo "Forkert brugernavn eller password!!!<br>"; echo "Hvis du ikke kan huske dit password, står det i den mail du fik tilsendt ved oprettelsen. Skulle du også have mistet den mail, så kan du få den tilsendt, ved at trykker <a href=\"glemtkode.php\">her</a>.<br>"; } } ?>
Det jeg mener med 'hvad skal det betyde' er at den ikke bliver brugt til noget, $login
Warning: session_start(): Cannot send session cookie - headers already sent by (output started at /var/www/html/login/admintest.php:2) in /var/www/html/login/admintest.php on line 3
Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /var/www/html/login/admintest.php:2) in /var/www/html/login/admintest.php on line 3
Og hvis man gaar der ind uden at logge ind kommer der en extra fejl
Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/login/admintest.php:2) in /var/www/html/login/admintest.php on line 6
Warning: session_start(): Cannot send session cookie - headers already sent by (output started at /var/www/html/login/admintest.php:2) in /var/www/html/login/admintest.php on line 2
Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /var/www/html/login/admintest.php:2) in /var/www/html/login/admintest.php on line 2
Ja.. Nu kommer det ingen fejl.. Men det er saa bare lige saadan at nu er alle bruger admin.. eller alle har hverfald adgang til siden.. :/ Hva ska jeg saa gøre nu?
Jeg tror sessionen bliver sat ved login.. (altsaa admin session'en) Men hvordan faar jeg den til at hente oplysnigerne med en session kode? Den her <? session_start(); require("db_ind.inc"); $passquery = mysql_query("SELECT password FROM profiler WHERE username = '$username'"); if (!mysql_num_rows($passquery)) header("Location: http://unpro.dk/v1/"); else { $row = mysql_fetch_assoc($passquery); $dbpassword = $row["password"]; if($dbpassword == $password) { $login = (true); //hvad skal det betyde ? } else { echo "Forkert brugernavn eller password!!!<br>"; echo "Hvis du ikke kan huske dit password, står det i den mail du fik tilsendt ved oprettelsen. Skulle du også have mistet den mail, så kan du få den tilsendt, ved at trykker <a href=\"glemtkode.php\">her</a>.<br>"; } } ?>
Er jo bare en anden løsning paa sessions kode.. Men hva med admin session koden??
Nu virker det!! Tak, mange tak for hjælpen!!! Men en sidste ting.. Er der en metode saa man ka vise nogle ting paa forsiden kun for admin'en, som andre ikke ka se? Ex. en link til adminpanelet (ligesom phpBB)??
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.