Avatar billede denner1989 Nybegynder
14. november 2006 - 20:43 Der er 31 kommentarer og
1 løsning

Login system, logind problemer.

<?php
session_start();

$conn = mysql_connect("$host", "$user", "$pass") or die (mysql_error());
mysql_select_db("$db", $conn) or die (mysql_error());
$dato = date("d-m-Y H:i", time());
$sql = "UPDATE login2 SET online='". $dato ."' WHERE `brugernavn` ='". $_POST[brugernavn] ."'";
mysql_query($sql,$conn) or die(mysql_error());

if(isset($_POST["brugernavn"], $_POST["password"])) {

$dotjek = mysql_query("SELECT `brugernavn`, `password`, `level` FROM `login2` WHERE `brugernavn` ='". $_POST[brugernavn] ."'") or die (mysql_error());

$brugertjek = mysql_fetch_object($dotjek);

if($brugertjek->brugernavn != $_POST["brugernavn"]) {
$_SESSION["navne_fejl"] = 1;
header("Location:logind");
exit;
}

$_SESSION["brugernavn"] = $_POST["brugernavn"];

    if($brugertjek->password != md5($_POST["password"])) {
    $_SESSION["password_fejl"] = 1;
    header("Location:logind");
    exit;
    }else{
    $_SESSION["level"] = $brugertjek->admin;
    header("Location:admin.php");
    exit;
    }else{
    header("Location:login.php");
    exit;
    } 

mysql_free_result($dotjek);
}
?>

--------------------------

Hej.

Jeg har et lille problem med linje 33. (
Parse error: syntax error, unexpected T_ELSE in /home/virtual/psychokatten.dk/public_html/design/make_logind.php on line 33)

Det er fra:

    }else{
    header("Location:login.php");
    exit;
    } 
....

Jeg vil gerne have at hvis "level" er Admin, bliver man sendt vidre til admin.php, og ellers bare login.php ..

Jeg har lidt problemer med 'else', så håber lidt på en kvikker :)
Avatar billede ellebaek Nybegynder
14. november 2006 - 21:07 #1
Du skal rette disse linier:
if($brugertjek->password != md5($_POST["password"])) {
    $_SESSION["password_fejl"] = 1;
    header("Location:logind");
    exit;
    }else{
    $_SESSION["level"] = $brugertjek->admin;
    header("Location:admin.php");
    exit;
    }else{
    header("Location:login.php");
    exit;
    }


til:

if($brugertjek->password != md5($_POST["password"])) {
    $_SESSION["password_fejl"] = 1;
    header("Location:logind");
    exit;
    }else{
    $_SESSION["level"] = $brugertjek->admin;
    if ($brugertjek->admin) {
      header("Location:admin.php");
      exit;
    }else{
      header("Location:login.php");
      exit;
    }
    }

sådan her...

men hvad returnerer din funktion $brugertjek->admin?
hvis den returnere en streng, så skal du rette det ind i denne linie:
if ($brugertjek->admin) {

altså fx:
if ($brugertjek->admin=="admin") {
Avatar billede denner1989 Nybegynder
14. november 2006 - 22:17 #2
Nu kan jeg slet ikke logge ind.
Avatar billede ellebaek Nybegynder
14. november 2006 - 22:24 #3
<?php
session_start();

$conn = mysql_connect("$host", "$user", "$pass") or die (mysql_error());
mysql_select_db("$db", $conn) or die (mysql_error());
$dato = date("d-m-Y H:i", time());
$sql = "UPDATE login2 SET online='". $dato ."' WHERE `brugernavn` ='". $_POST[brugernavn] ."'";
mysql_query($sql,$conn) or die(mysql_error());

if(isset($_POST["brugernavn"], $_POST["password"])) {

$dotjek = mysql_query("SELECT `brugernavn`, `password`, `level` FROM `login2` WHERE `brugernavn` ='". $_POST[brugernavn] ."'") or die (mysql_error());

$brugertjek = mysql_fetch_object($dotjek);

if($brugertjek->brugernavn != $_POST["brugernavn"]) {
$_SESSION["navne_fejl"] = 1;
header("Location:logind");
exit;
}

$_SESSION["brugernavn"] = $_POST["brugernavn"];

    if($brugertjek->password != md5($_POST["password"])) {
    $_SESSION["password_fejl"] = 1;
    header("Location:logind");
    exit;
    }else{
      $_SESSION["level"] = $brugertjek->admin;
      if ($brugertjek->admin) {
        header("Location:admin.php");
        exit;
      }else{
        header("Location:login.php");
        exit;
      }
    }

mysql_free_result($dotjek);
}
?>

din kode skal se sådan her ud....
Avatar billede denner1989 Nybegynder
14. november 2006 - 22:33 #4
Jeps, det gjorde den allerede :-)

Men den vil slet ikke logge ind.
Avatar billede ellebaek Nybegynder
14. november 2006 - 23:00 #5
arh... nu tror jeg jeg kan se fejlen...

$brugertjek->admin;
denne linie leder efter et felt der hedder admin i dit resultset...
det findes ikke.. men er i stedet level...

altså:

if($brugertjek->password != md5($_POST["password"])) {
    $_SESSION["password_fejl"] = 1;
    header("Location:logind");
    exit;
    }else{
      $_SESSION["level"] = $brugertjek->level;
      if ($brugertjek->level == "admin") {
        header("Location:admin.php");
        exit;
      }else{
        header("Location:login.php");
        exit;
      }
    }

sådan noget i den her stil i stedet...
Avatar billede denner1989 Nybegynder
14. november 2006 - 23:04 #6
Jeg er ked af at sige det, men jeg kan stadig ikke få den til at logge ind. :|
Avatar billede ellebaek Nybegynder
14. november 2006 - 23:09 #7
if ($brugertjek->level == "admin") {

du skal huske at rette denne linie til så den matcher admin levelen...
Avatar billede denner1989 Nybegynder
14. november 2006 - 23:25 #8
Jeg kan slet ikke få den til at logge ind, lige meget hvor meget jeg vender og drejer det. Desværre.

Du har ikke nogen idé om hvorfor det ikke vil virke?
Avatar billede ellebaek Nybegynder
14. november 2006 - 23:32 #9
hmm... prøver lige at lave lidt om i din kode...

<?php
session_start();
if(isset($_POST["brugernavn"], $_POST["password"])) {

$conn = mysql_connect("$host", "$user", "$pass") or die (mysql_error());
mysql_select_db("$db", $conn) or die (mysql_error());
$dato = date("d-m-Y H:i", time());
$sql = "UPDATE login2 SET online='". $dato ."' WHERE `brugernavn` ='". $_POST[brugernavn] ."'";
mysql_query($sql,$conn) or die(mysql_error());

$dotjek = mysql_query("SELECT `brugernavn`, `password`, `level` FROM `login2` WHERE `brugernavn` ='". $_POST[brugernavn] ."'") or die (mysql_error());

if(mysql_num_rows($dotjek)!=1) {
$_SESSION["navne_fejl"] = 1;
header("Location:logind");
exit;
}

else {
$row = mysql_fetch_array($dotjek);
$_SESSION["brugernavn"] = $row[0];

    if($row[1] != md5($_POST["password"])) {
    $_SESSION["password_fejl"] = 1;
    header("Location:logind");
    exit;
    }else{
      $_SESSION["level"] = $row[2];
      if ($row[2]=="Admin") {
        header("Location:admin.php");
        exit;
      }else{
        header("Location:login.php");
        exit;
      }
    }
}
mysql_free_result($dotjek);
}
?>

prøv sådan her...
Avatar billede denner1989 Nybegynder
14. november 2006 - 23:43 #10
Det er det samme.. www.psychokatten.dk/design/login.php

Brugernavn: test
Password: test

Prøv se hvad den gør, :|
Avatar billede intenz Novice
15. november 2006 - 12:33 #11
Prøv at debug din kode lidt:

Da den ikke logger ind bliver du sendt tilbage til login.php

Prøv at:
print "1";
print "2";

osv hver gang der er en header("location... til login.php
Så kan du se hvor det er du bliver sendt tilbage selvom den ikke burde.
Når du finder ud af hvor fejlen ligger, så prøv at print ""; de variabler der gør at du bliver sendt tilbage, så burde du kunne se hvor fejlen ligger.

Det er lidt svært herfra at se hvorfor du ikke kan logge ind, da fejlen også kan ligge i din mysql tabel f.eks.
Avatar billede denner1989 Nybegynder
15. november 2006 - 21:44 #12
CREATE TABLE `login2` (
  `id` int(255) NOT NULL auto_increment,
  `brugernavn` varchar(255) NOT NULL default '',
  `password` varchar(255) NOT NULL default '',
  `mail` varchar(255) NOT NULL default '',
  `oprettet` varchar(255) NOT NULL default '',
  `online` varchar(255) NOT NULL default 'N/A: Ikke set online endnu!',
  `ip` varchar(255) NOT NULL default '',
  `fodselsdag` varchar(255) NOT NULL default 'N/A: Ingen fødselsdag',
  `level` varchar(255) NOT NULL default 'Besøgende',
  `navn` varchar(255) NOT NULL default 'N/A: Intet navn',
  `alder` varchar(255) NOT NULL default 'N/A: Ingen Alder',
  `bopael` varchar(255) NOT NULL default 'N/A: Ingen bopæl',
  `fritid` varchar(255) NOT NULL default 'N/A: Ingen fritid',
  `hjemmeside` varchar(255) NOT NULL default 'N/A: Ingen hjemmeside',
  `tekst` varchar(255) NOT NULL default 'N/A: Ingen tekst',
  `signatur` varchar(255) NOT NULL default 'N/A: Ingen signatur',
  `admin` varchar(255) NOT NULL default '',
  `billede` varchar(255) NOT NULL default 'http://psychokatten.dk/billeder/NA.gif',
  PRIMARY KEY  (`id`)
) TYPE=MyISAM AUTO_INCREMENT=41 ;

---- Sådan ser min tabel ud.

Jeg er ikke helt klar over det med print, for der sker heller ikke noget når jeg smider print i:

    if($row[1] != md5($_POST["password"])) {
    $_SESSION["password_fejl"] = 1;
    header("Location:logind");
    exit;
    }else{
      $_SESSION["level"] = $row[2];
      if ($row[2]=="Admin") {
        header("Location:admin.php");
        print "2";
        exit;
      }else{
        header("Location:login.php");
        print "2";
        exit;
      }
    }
}
Avatar billede ellebaek Nybegynder
15. november 2006 - 22:41 #13
<?php
session_start();
if(isset($_POST["brugernavn"], $_POST["password"])) {

$conn = mysql_connect("$host", "$user", "$pass") or die (mysql_error());
mysql_select_db("$db", $conn) or die (mysql_error());
$dato = date("d-m-Y H:i", time());
$sql = "UPDATE login2 SET online='". $dato ."' WHERE `brugernavn` ='". $_POST[brugernavn] ."'";
mysql_query($sql,$conn) or die(mysql_error());

$dotjek = mysql_query("SELECT `brugernavn`, `password`, `level` FROM `login2` WHERE `brugernavn` ='". $_POST[brugernavn] ."'") or die (mysql_error());

echo "antal rækker: " . mysql_num_rows($dotjek) . "<br>";

if(mysql_num_rows($dotjek)!=1) {
echo "Vi ender i ikke logget ind";
$_SESSION["navne_fejl"] = 1;
//header("Location:logind");
exit;
}

else {
$row = mysql_fetch_array($dotjek);
$_SESSION["brugernavn"] = $row[0];
echo "Nu er vi i den rigtige del<br>";
echo $row[1] . "<br>";
    if($row[1] != md5($_POST["password"])) {
    $_SESSION["password_fejl"] = 1;
    echo "Passwordet passer ikke<br>";
    //header("Location:logind");
    exit;
    }else{
      echo "password er godt nok<br>";
      echo $row[2] ."<br>";
      $_SESSION["level"] = $row[2];
      if ($row[2]=="Admin") {
        echo "Logget ind som admin<br>";
        //header("Location:admin.php");
        exit;
      }else{
        echo "Logget ind som alm bruger<br>";
        header("Location:login.php");
        exit;
      }
    }
}
mysql_free_result($dotjek);
}
?>

prøv denne kode og så vis resultatet her...
Avatar billede denner1989 Nybegynder
15. november 2006 - 22:47 #14
Nu skriver den:

antal rækker: 1
Nu er vi i den rigtige del
240c3398abd05fab2b2d60eed1afb57e
password er godt nok
Admin
Logget ind som admin
Avatar billede ellebaek Nybegynder
15. november 2006 - 22:54 #15
godt nok... så er den side i orden... hvordan ser toppen af din admin.php side ud?

for der må du sende tilbage til login.php, altså når du laver et brugertjek...
Avatar billede denner1989 Nybegynder
15. november 2006 - 23:02 #16
<?php include("tjek_logind.php"); ?>:

<?php
//Vi starter sessions
session_start();

if(!isset($_SESSION["brugernavn"], $_SESSION["admin"])) {
header("Location:logind.php");
exit;
}
?>
Avatar billede ellebaek Nybegynder
15. november 2006 - 23:04 #17
jeps...

det er der fejlen er.
det skal du rette til:

<?php
//Vi starter sessions
session_start();

if(!isset($_SESSION["brugernavn"]) || $_SESSION["level"] != "Admin") {
header("Location:logind.php");
exit;
}
?>
Avatar billede ellebaek Nybegynder
15. november 2006 - 23:05 #18
glemte lige denne linie:
<?php include("tjek_logind.php"); ?>:


den skal selvfølgelig stadig med..
Avatar billede denner1989 Nybegynder
15. november 2006 - 23:14 #19
Nu ser det meget bedre ud, nu skal jeg bare have den til at sende vidre i stedet for at skrive;

antal rækker: 1
Nu er vi i den rigtige del
240c3398abd05fab2b2d60eed1afb57e
password er godt nok
Admin
Logget ind som admin
Avatar billede ellebaek Nybegynder
15. november 2006 - 23:19 #20
yes...

så skal du rette din kode tilbage til det her:

<?php
session_start();
if(isset($_POST["brugernavn"], $_POST["password"])) {

$conn = mysql_connect("$host", "$user", "$pass") or die (mysql_error());
mysql_select_db("$db", $conn) or die (mysql_error());
$dato = date("d-m-Y H:i", time());
$sql = "UPDATE login2 SET online='". $dato ."' WHERE `brugernavn` ='". $_POST[brugernavn] ."'";
mysql_query($sql,$conn) or die(mysql_error());

$dotjek = mysql_query("SELECT `brugernavn`, `password`, `level` FROM `login2` WHERE `brugernavn` ='". $_POST[brugernavn] ."'") or die (mysql_error());

if(mysql_num_rows($dotjek)!=1) {
$_SESSION["navne_fejl"] = 1;
header("Location:logind");
exit;
}

else {
$row = mysql_fetch_array($dotjek);
$_SESSION["brugernavn"] = $row[0];
    if($row[1] != md5($_POST["password"])) {
    $_SESSION["password_fejl"] = 1;
    header("Location:logind");
    exit;
    }else{
      $_SESSION["level"] = $row[2];
      if ($row[2]=="Admin") {
        header("Location:admin.php");
        exit;
      }else{
        header("Location:login.php");
        exit;
      }
    }
}
mysql_free_result($dotjek);
}
?>

Så burde det hele spille :-)
Avatar billede denner1989 Nybegynder
15. november 2006 - 23:22 #21
Det går det, og dog.

Nu kan alm. brugere ikke logge ind. Kun admin brugere kan. Hvad er der nu galt :/?
Avatar billede ellebaek Nybegynder
15. november 2006 - 23:43 #22
det er den her linie...
header("Location:login.php");

den skal du rette til den side som almindelige brugere skal sendes til..for de skal vel ikke sendes til login.php?

og hvordan ser toppen af deres side ud...? (de samme linier kode som i admin.php
Avatar billede ellebaek Nybegynder
15. november 2006 - 23:46 #23
hehe... jo, det kunne jeg se de skulle :-)
Så er det bare de første linier at login.php jeg skal se i stedet...
Avatar billede denner1989 Nybegynder
15. november 2006 - 23:49 #24
login.php:

<?php include("tjek_logind.php"); ?> <?php include("top2.php"); ?> <?php include("denner.php"); ?>
<br>
<table width="185" height="124" border="0" cellpadding="0" cellspacing="1" bgcolor="#555555">
  <tr>
    <td height="122" valign="top" bgcolor="#F9F9F9"><table width="100%" border="0" cellpadding="5">
      <tr>
        <td><font color="#555555" size="1" face="Verdana, Arial, Helvetica, sans-serif"><strong><a href="users.php">Burgere</a></strong></font></td>
      </tr>
        <tr>
          <td><strong><font color="#555555" size="1" face="Verdana, Arial, Helvetica, sans-serif"><a href="profile.php">Min profil </a></font></strong></td>
        </tr>
        <tr>
          <td><font color="#555555" size="1" face="Verdana, Arial, Helvetica, sans-serif"><strong><a href="edit_profile.php">Rediger profil</a></strong></font></td>
        </tr>
        <tr>
          <td><font color="#555555" size="1" face="Verdana, Arial, Helvetica, sans-serif"><strong><a href="#delete_tagwall.php">Slet en bedsked i tagwall</a> </strong></font></td>
        </tr>
        <tr>
          <td><font color="#555555" size="1" face="Verdana, Arial, Helvetica, sans-serif"><strong><a href="logud.php">Log ud</a></strong></font></td>
        </tr>
    </table></td>
  </tr>
</table>
<?php include("level.php"); ?>
Avatar billede ellebaek Nybegynder
15. november 2006 - 23:53 #25
så skal jeg bruge koden i tjek_logind.php i stedet :-)
Avatar billede denner1989 Nybegynder
15. november 2006 - 23:59 #26
tjek_login.php

<?php
//Vi starter sessions
session_start();

if(!isset($_SESSION["brugernavn"]) || $_SESSION["level"] != "Admin") {
header("Location:logind.php");
exit;
}
?>
Avatar billede ellebaek Nybegynder
16. november 2006 - 00:01 #27
yes...

der var den...

det er fordi du også her tjekker om brugeren er admin..
det dur ikke...

så ret den kode til:

<?php
//Vi starter sessions
session_start();

if(!isset($_SESSION["brugernavn"])) {
header("Location:logind.php");
exit;
}
?>

så skulle det gerne virke..
Avatar billede denner1989 Nybegynder
16. november 2006 - 00:05 #28
Jeg siger tusind tak. Er point nok!?

Jeg har et lille spørgsmål mere, hvis du gider, det drejer sig om det samme stort set :)..

Jeg har en fil der hedder brugerlogin.php:

<?php include("tjek_logind.php"); ?> <?php include("top2.php"); ?> <?php include("denner.php"); ?>
<?php
session_start();
$conn = mysql_connect("$host", "$user", "$pass") or die (mysql_error());
mysql_select_db("$db", $conn) or die (mysql_error());
mysql_query($sql,$conn) or die(mysql_error());

$dotjek = mysql_query("SELECT `brugernavn`, `password`, `level` FROM `login2` WHERE `brugernavn` ='". $_POST[brugernavn] ."'") or die (mysql_error());

if(mysql_num_rows($dotjek)!=1) {
$_SESSION["navne_fejl"] = 1;
header("Location:logind");
exit;
}

else {
$row = mysql_fetch_array($dotjek);
$_SESSION["brugernavn"] = $row[0];
    if($row[1] != md5($_POST["password"])) {
    $_SESSION["password_fejl"] = 1;
    header("Location:logind");
    exit;
    }else{
      $_SESSION["level"] = $row[2];
      if ($row[2]=="Admin") {
        header("Location:admin.php");
        exit;
      }else{
        header("Location:login.php");
        exit;
      }
    }
}
mysql_free_result($dotjek);
?>

Den skriver: Query was empty

Ved du hvad problemet er?
Avatar billede ellebaek Nybegynder
16. november 2006 - 00:12 #29
jeps... det gør jeg i hvert fald :-)

Du har denne linie:

mysql_query($sql,$conn) or die(mysql_error());

den skal du slette. du har på det tidspunkt ikke nogen $sql og derfor kan du ikke eksekvere en query...

Med hensyn til det andet spørgsmål, så virker det nu ik helt endnu.
For hvis man logger ind som en bruger der ikke er admin, så kan man stadig komme ind på siden admin.php. så derfor skal du sætte disse linier ind på siden admin.php, og det er meget vigtigt det er der og ikke i tjek_logind.php...

if ($_SESSION['level'] != "Admin") {
header("Location:logind.php");
exit;
}

og med hensyn til points, så er det helt i orden...
glad for jeg kunne hjælpe :-)
Avatar billede denner1989 Nybegynder
16. november 2006 - 00:14 #30
Ok fint nok ;o)

Nu er problemet igen, at normale brugere IKKE kan logge ind :|
Avatar billede ellebaek Nybegynder
16. november 2006 - 00:17 #31
hmm.... synes ik rigtig der er nogen brugere der kan logge ind...??
du har husket at smide den kodebid kun på admin.php og ikke i tjek_bruger.php ikke??
Avatar billede denner1989 Nybegynder
16. november 2006 - 00:26 #32
Alle mine sider som skal være private bruger jeg tjek_login.php:

<?php
//Vi starter sessions
session_start();

if ($_SESSION['level'] != "Admin") {
header("Location:logind.php");
exit;
}
?>

---

Normale brugere kan ikke logge ind når den er sådan der :|
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