Gå til innhold

login med admin-area, funker ikke [løst]


Anbefalte innlegg

Heisann.. Jeg sitter og koser meg med php og mysql. Jeg sitter og lager et loginscript. Det funker knall (da tidligere versjoner).

Men nå vil jeg bygge inn en siste funksjon slik at jeg kan få bruk for alle tillegsscriptene (slette brukere, banne brukere etc..), jeg tenker da på et

"admin area"..

 

Men her fikk jeg problemer. Jeg fatter ikke hvorfor dette ikke funker så jeg lurte på om noen som har mer erfaring med php og mysql kunne hjulpet meg litt med syntaksen.

 

her er snutten for validering av brukeren i "checkuser.php"

.
.
.
// sjekker om brukernavnet finnes i databsen
$sql = mysql_query("SELECT * FROM users WHERE username='$username' AND password='$md5_password'");
$login_check = mysql_num_rows($sql);

/sjekker om brukeren er administrator
$fetch_admin = mysql_query("SELECT * FROM users WHERE username='$username' AND password='$password' AND admin_privilege='1'");
$admin_fetch = mysql_num_rows($fetch_admin);

// sjekker om brukeren er en normal bruker
$fetch_user = mysql_query("SELECT * FROM users WHERE username='$username' AND password='$password' AND admin_privilege='0'");
$user_fetch = mysql_num_rows($fetch_user);


if ($login_check > 0) {
if ($admin_fetch > 0) {
 session_register('name');
 $_SESSION['name'] = $name;
 session_register('loggedin');
 $_SESSION['loggedin'] = "1";
 session_register('userlevel');
 $_SESSION['userlevel'] = "1";
 $set_online = mysql_query("UPDATE users SET online='1' WHERE username='$username' AND password='$password'");  
 header("Location: logged_in.php");
} elseif 
($user_fetch > 0) {
 session_register('name');
 $_SESSION['name'] = $name;
 session_register('loggedin');
 $_SESSION['loggedin'] = "1";
 session_register('userlevel');
 $_SESSION['userlevel'] = "0";	
 $set_online = mysql_query("UPDATE users SET online='1' WHERE username='$username' AND password='$password'");
 header("Location: logged_in.php");
} else { echo "You are not a user nor admin! Away with you!.."; }
} else {
echo "Either you typed in the wrong username or password, or you are not authorized to access here!";
include("login.php");
exit();
}

 

brukeren/adminen skal da redirectes til logged_in.php

<?php
session_start();
if (!isset($_SESSION['loggedin']) == 1) {
die("you're not logged in!");
} 

$v = "<h5>version : v0.02 Build 3 beta</h5>\n";
echo "$v";


echo "<a href=\"upload/index.php\">upload files!</a>\n";

echo "<br><br><br>\n";

if (isset($_SESSION['userlevel']) == 1) {
echo "<a href=\"newuser.php\">Add a user</a><br>\n";
echo "<a href=\"deluser.php\">Delete a user</a><br>\n";
echo "<a href=\"ban.php\">Ban a user</a><br>\n";
echo "<a href=\"unban.php\">Unban a user</a><br>";
echo "<a href=\"chpass.php\">change password (for any user!)</a><br>\n";
}


echo "<a href=\"listusers.php\">List users</a><br>\n";
echo "<a href=\"chpass_own.php\">change your OWN password</a><br>\n";
echo "<a href=\"logout.php\">log out</a>\n";
?>
<div id="online">
<br><br>
who's online:<br>
<?php include("online.php"); ?>
</div>

 

Men det som skjer er at scriptet finner ut at den som prøver å logge inn hverken er admin eller vanlig bruker..

Har sitti i flere dager og rivi meg i håret og alt mulig over dette nå..

Har prøvd flere måter å løse dette på, f.eks at jeg kjører seperate

if-setninger for hver av ($admin_fetch > 0) og ($user_fetch > 0), men ble ikke det spor bedre. Er det feil syntax som kan til dette eller er det en flaw i koden min?

 

mvh

 

Håkon

Endret av slakkis
Lenke til kommentar
Videoannonse
Annonse

Du tenker på den som står helt i førsten på logged_in.php ?

Jeg vet den delen funker (glemte av å si det desverre..).

 

Feilen ligger i checkuser.php

 

session_start();
if (!isset($_SESSION['loggedin']) == 1) {
die("you're not logged in!");
} 

 

har jeg hatt i alle de tidligere versjonene av scriptet, og har fungert..

 

Feilen ligger i sjekkingen om brukeren enten er "vanlig bruker" eller "admin" i checkuser..

Lenke til kommentar

Jeg fant ut av egen maskin.

 

Løste det på følgende måte, hvis noen skulle være interessert..

if ($login_check > 0) {
 session_register('name');
 $_SESSION['name'] = $name;

 session_register('loggedin');
 $_SESSION['loggedin'] = 1;

 $admin_fetch = mysql_query("SELECT * FROM users WHERE username='$username' AND password='$md5_password' AND admin_privilege='1'");
 $fetch_admin = mysql_num_rows($admin_fetch);
 if ($fetch_admin > 0) {
 	session_register('admin');
 	$_SESSION['admin'] = 1;
 	}
 
 $set_online = mysql_query("UPDATE users SET online='1' WHERE username='$username'");

 header("Location: logged_in.php");
 


} else {
echo "Either you typed in the wrong username or password, or you are not authorized to access here!";
include("login.php");
exit();
}

 

*hurra...* :p

Lenke til kommentar

Hvorfor bruker du både $_SESSION og session_register() - hvis du slår opp i manualen under et av emnene under session så finner du at fra php 4.1 er det fortrukket å bare bruke $_SESSION.

 

Til if (!isset($_SESSION['loggedin']) == 1) { så har dere begge rett. Det det ikke noe poeng å bruke == 1, da det her vil tolkes som en bolean (true/false). if(!empty($var)) sjekker om den er true, mens ved å legge til == så sjekker du det "manuelt". Siden det er unødvendig vil du skjelden finne det i noen scripts. Hvis du vil beholde den kan du legge til (bool) for å vise at det er det du søker etter, evenutelt bytte ut 1 med true.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...