slakkis Skrevet 7. juli 2004 Del Skrevet 7. juli 2004 (endret) 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 7. juli 2004 av slakkis Lenke til kommentar
jorgis Skrevet 7. juli 2004 Del Skrevet 7. juli 2004 if (!isset($_SESSION['loggedin']) == 1) { bør ikke den være enten (!isset($_SESSION['loggedin'])) eller ($_SESSION['loggedin'] == 1) ? Lenke til kommentar
slakkis Skrevet 7. juli 2004 Forfatter Del Skrevet 7. juli 2004 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
slakkis Skrevet 7. juli 2004 Forfatter Del Skrevet 7. juli 2004 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...* Lenke til kommentar
???????? Skrevet 7. juli 2004 Del Skrevet 7. juli 2004 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
slakkis Skrevet 7. juli 2004 Forfatter Del Skrevet 7. juli 2004 ok, det visste jeg ikke. Er lurt å få med seg dette i når jeg sitter og lærer meg dette. takk skal du ha. Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå