Mit problem er en smule indviklet og forvirrende, da det ikke melder nogle fejl.
Hvis jeg er logget ind bliver $_SESSION['username'] og $_SESSION['password'] sat til værdierne som er kontrolleret i databasen.
Dette virker fint hvis jeg klikker rundt på forskellige sider, pånær nogle enkelte - sider som arbejder med data fra admin-tabellen (den samme som login og password er gemt i.)
Klikker jeg ind på medlemssiden skifter mit login pludseligt, således at $_SESSION['username'] i stedet for at være det som jeg loggede ind med, bliver det $username fra den sidste række jeg trækker ud i en query.
Mit
login.php ser således ud:
<?
/* ---------------------------------------------------------------------------------------------------------- /*
/* Cookies login */
if(!$_SESSION['username']){
// Hvis cookies er sat, sættes sessions
if(isset($_COOKIE['cookname']) && isset($_COOKIE['cookpass'])){
$_SESSION['username'] = $_COOKIE['cookname'];
$_SESSION['password'] = $_COOKIE['cookpass'];
}
}
/* ---------------------------------------------------------------------------------------------------------- /*
/* Confirm user */
function confirmUser($brugernavn, $kodeord){
// tilføj slashes hvis det er nødvendigt
if(!get_magic_quotes_gpc()) {
$brugernavn = addslashes($brugernavn);
}
// Se om der eksisterer et password ved brugeren
$get_password = mysql_query("SELECT password FROM admins WHERE username = '".$brugernavn."'");
$fetch_em = mysql_fetch_array($get_password);
$numrows = mysql_num_rows($get_password);
if($numrows == "0"){
return 1; // Der er ingen med det brugernavn
}
// hent passwords fra resultatet
$dbarray = mysql_fetch_array($get_password);
$dbarray['password'] = stripslashes($dbarray['password']);
$kodeord = stripslashes($kodeord);
// Er passwordet korrekt?
if($kodeord == $fetch_em["password"]){
return 0; // Ja - korrekt login
}
else{
return 2; // Forkert password
}
}
/* ---------------------------------------------------------------------------------------------------------- /*
/* Tastet login? */
if(isset($_POST['sublogin'])){
// Tjekker om brugernavn og pass er skrevet
if(!$_POST['user'] || !$_POST['pass']){
die('Du udfyldte ikke begge.');
}
// Brugernavn og MD5-password tjekkes
$md5pass = md5($_POST['pass']);
$login_resultat = confirmUser($_POST['user'], $md5pass);
// Error-koderne fra confirmUser tjekkes
if($login_resultat == 1){
die('Dette medlemsnavn eksisterer ikke.');
}
else if($login_resultat == 2){
die('Forkert password, prøv igen.');
}
// Sæt session variabler
$_POST['user'] = stripslashes($_POST['user']);
$_SESSION['username'] = $_POST['user'];
$_SESSION['password'] = $md5pass;
// Hvis brugeren har valgt remember gemmes informationerne i hans cookies
if(isset($_POST['remember'])){
setcookie("cookname", $_SESSION['username'], time()+60*60*24*100, "/");
setcookie("cookpass", $_SESSION['password'], time()+60*60*24*100, "/");
}
// Brugeren sendes direkte til forumet efter login
header("Location: ./intra_forum.php");
}
/* ---------------------------------------------------------------------------------------------------------- /*
/* Vis login og sæt set sidst */
function displayLogin(){
// Brugerens informationer sidste login-info hentes, hvis han er logget ind
if($_SESSION['username']){
$sidst_set = "SELECT ip,DATE_FORMAT(sidstset, ' %e/%c - %H:%i') as sidstset from admins WHERE username ='".$_SESSION['username']."'";
$sidst_ses_resultat = mysql_query($sidst_set) or die(mysql_error());
while($r=mysql_fetch_array($sidst_ses_resultat))
echo "
Velkommen <b>".$_SESSION['username']."</b><br/><a href='./login/logout.php' id='menu'>Logout</a>
<br><i style='color:silver;'>Du loggede ind sidst <br>d.".$r['sidstset']." <br>fra IP'en <br>".$r['ip']."</i>
";
// Det opdateres at han er online
$IP = $_SERVER['REMOTE_ADDR'];
$FIP = $_SERVER['HTTP_X_FORWARDED_FOR'];
if (($FIP != "") && ($FIP != "unknown")) $IP = $FIP;
$IP = explode(",", $IP);
$IP = $IP[0];
$nu = date("Y-n-d H:i:s");
$db_sidstset = "UPDATE admins set sidstset='$nu', ip='$IP' WHERE username = '".$_SESSION['username']."' ";
mysql_query($db_sidstset) or die(mysql_error());
}
else{
?>
<form action="<? $_SERVER['PHP_SELF'] ?>" method="post" align="center">
<input type="text" name="user" maxlength="30" align="center" value="Admin" class="login">
<input type="password" name="pass" maxlength="30" align="center" value="" class="login" style='margin-top:2px;'>
<input type="submit" name="sublogin" value="Login" align="center" class="button" style="margin-bottom:3px;background-color:AppWorkspace;">
<input type="checkbox" name="remember" class="checkbox">
</form>
<?
}
}
?>
Et udpluk af den side hvor jeg henter medlemslisten ser således ud:
medlemside.php
<?
ob_start();
session_start();
include('./login/database.php');
include('./login/login.php');
// (..) Her er en <head><title> osv.
// Tæl forskellige rang
$webmasterequery = mysql_query("select COUNT(id) from admins where rang = 'Webmaster' AND opdateret != 0000-00-00");
$antalwebmaster = mysql_result($webmasterequery,0,0);
$managerquery = mysql_query("select COUNT(id) from admins where rang = 'Manager' AND opdateret != 0000-00-00");
$antalmanager = mysql_result($managerquery,0,0);
$clanlederquery = mysql_query("select COUNT(id) from admins where rang = 'Clan-leder' AND opdateret != 0000-00-00");
$antalclanleder = mysql_result($clanlederquery,0,0);
$medlemmerquery = mysql_query("select COUNT(id) from admins where rang = 'Medlem' AND opdateret != 0000-00-00");
$antalmedlemmer = mysql_result($medlemmerquery,0,0);
$supporterquery = mysql_query("select COUNT(id) from admins where rang = 'Supporter' AND opdateret != 0000-00-00");
$antalsupporter = mysql_result($supporterquery,0,0);
$ialtquery = mysql_query("select COUNT(id) from admins");
$antalialt = mysql_result($ialtquery,0,0);
include "./includes/venstre-menu.php";
?>
<td valign=top class='midttable'>
<table width=530px cellpadding=0 cellspacing=0>
<tr>
<td colspan=3 style='padding-left:10px;'>
<b>medlemmer</b>
</td>
</tr>
<tr>
<td colspan=3 valign=bottom>
<img src='./billeder/top-midt.gif'>
</td>
</tr>
<?
// MEDLEMMER
if($antalmedlemmer > 0){
echo "
<tr><td width=40% style='border-left: solid 1px #856E39;border-right: solid 1px #856E39;background-color:#D2C7B7;padding-left:5px;' colspan=3><br>
<i>Medlemmer ($antalmedlemmer)</i>
</td>
";
$rang = "SELECT * from admins WHERE opdateret != 0000-00-00 AND rang = 'Medlem' order by adminrang,username";
$result8 = mysql_query($rang) or die(mysql_error());
while($r=mysql_fetch_array($result8))
{
extract($r);
$admin_id2 = $id;
$online_admins = "SELECT admin_id from onlineadmins WHERE admin_id = $admin_id2";
$result9 = mysql_query($online_admins) or die(mysql_error());
while($r=mysql_fetch_array($result9))
{
$admin_id=$r["admin_id"];
}
if($admin_id == $admin_id2){$online_nu = "<b>Online</b>";}if($admin_id != $admin_id2){$online_nu = 'Offline';}
echo "<tr><td width=40% style='border-left: solid 1px #856E39;background-color:#D2C7B7;padding-left:5px;'>
<a href='bruger.php?username=$username'><b>$username</b></a>
</td>
<td width=30% style='background-color:#D2C7B7;'>
$rang
</td>
<td width=30% style='border-right: solid 1px #856E39;background-color:#D2C7B7;padding-right:5px;'>
$online_nu
</td></tr>";
}
}
// I ALT
echo "
<tr><td width=40% style='border-left: solid 1px #856E39;border-right: solid 1px #856E39;background-color:#D2C7B7;padding-left:5px;' colspan=3><br>
<i>I alt ($antalialt)</i>
</td>
";
include "./includes/hojre-menu.php";
include "./includes/bottom.php";
?>
</td>
</tr>
</table>
</body>
</html>
Jeg har klippet meget i den mellemliggende <html> for at gøre det lettere læseligt.