Inlog werkt niet...

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • cOOlrUnnINgs
  • Registratie: Februari 2002
  • Laatst online: 22:36
Ik zit met een vreemd probleem.
Ik ben bezig om voor mezelf een site in elkaar te zetten (beetje pielen en kijken hoever ik daarmee kom).
Nu wil ik graag een inlogpagina daarvoor hebben zodat niet iedereen zomaar overal bij kan komen (er staat nog neits, dat terzijde).
Met de onderstaande pagina kan ik wel inloggen en wordt ik redirected naar de admin/index.php pagina.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
<?php
  session_start();

  if(isset($_SESSION['usr_id'])!="") {
    header("Location: index.php");
  }

  include_once 'db.php';

  //check if form is submitted
  if (isset($_POST['login'])) {

    $email = mysqli_real_escape_string($sql_conn, $_POST['email']);
    $password = mysqli_real_escape_string($sql_conn, $_POST['password']);
    $result = mysqli_query($sql_conn, "SELECT * FROM tbl_users WHERE username = '$email' and password = md5('$password')");

    if ($row = mysqli_fetch_array($result)) {
      $_SESSION['usr_id'] = $row['userid'];
      $_SESSION['usr_name'] = $row['name'];
      $msg = "Succesfully logged in!!!";
      header("Location: admin/index.php");
    } else {
      $errormsg = "Incorrect Email or Password!!!";
    }
  }
?>

<!DOCTYPE html>
<html>
<head>
    <title>PHP Login Script</title>
    <meta content="width=device-width, initial-scale=1.0" name="viewport" >
    <link rel="stylesheet" href="css/bootstrap.min.css" type="text/css" />
</head>

<body>

  <nav class="navbar navbar-default" role="navigation">
      <div class="container-fluid">
          <!-- add header -->
          <div class="navbar-header">
              <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#navbar1">
                  <span class="sr-only">Toggle navigation</span>
                  <span class="icon-bar"></span>
                  <span class="icon-bar"></span>
                  <span class="icon-bar"></span>
              </button>
              <a class="navbar-brand" href="index.php">Koding Made Simple</a>
          </div>
          <!-- menu items -->
          <div class="collapse navbar-collapse" id="navbar1">
              <ul class="nav navbar-nav navbar-right">
                  <li class="active"><a href="login.php">Login</a></li>
                  <li><a href="register.php">Sign Up</a></li>
              </ul>
              <span class="text-info"><?php if (isset($msg)) { echo $msg; } ?></span>
          </div>
      </div>
  </nav>

  <div class="container">
      <div class="row">
          <div class="col-md-4 col-md-offset-4 well">
              <form role="form" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" name="loginform">
                  <fieldset>
                      <legend>Login</legend>
                    
                      <div class="form-group">
                          <label for="name">Email</label>
                          <input type="text" name="email" placeholder="Your Email" required class="form-control" />
                      </div>

                      <div class="form-group">
                          <label for="name">Password</label>
                          <input type="password" name="password" placeholder="Your Password" required class="form-control" />
                      </div>

                      <div class="form-group">
                          <input type="submit" name="login" value="Login" class="btn btn-primary" />
                      </div>
                  </fieldset>
              </form>
<!--          <span class="text-danger"><?php if (isset($errormsg)) { echo $errormsg; } ?></span> -->
          </div>
      </div>
<!--  <div class="row">
          <div class="col-md-4 col-md-offset-4 text-center">    
          New User? <a href="register.php">Sign Up Here</a>
          </div>
      </div>            -->
  </div>

  <script src="js/jquery-1.10.2.js"></script>
  <script src="js/bootstrap.min.js"></script>
</body>
</html>


Gebruik ik echter onderstaande code, welke er wat gelikter uitziet, dan werkt het niet.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
<?php
  session_start();

  if(isset($_SESSION['usr_id'])!="") {
    header("Location: index.php");
  }

  include_once 'db.php';

  //check if form is submitted
  if (isset($_POST['login'])) {

    $email = mysqli_real_escape_string($sql_conn, $_POST['email']);
    $password = mysqli_real_escape_string($sql_conn, $_POST['password']);
    $result = mysqli_query($sql_conn, "SELECT * FROM tbl_users WHERE username = '$email' and password = md5('$password')");

    if ($row = mysqli_fetch_array($result)) {
      $_SESSION['usr_id'] = $row['userid'];
      $_SESSION['usr_name'] = $row['name'];
      $msg = "Succesfully logged in!!!";
      header("Location: admin/index.php");
    } else {
      $errormsg = "Incorrect Email or Password!!!";
    }
  }
?>

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
    <meta name="description" content="">
    <meta name="author" content="">
    <link rel="icon" href="images/favicon.ico">
    <title>Homepage - Login</title>

    <!-- Bootstrap core CSS -->
    <link href="css/bootstrap.min.css" rel="stylesheet">

    <!-- Custom styles for this template -->
    <link href="css/signin.css" rel="stylesheet">
  </head>

  <body>
    <div class="container">
      <form class="form-signin" role="form" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" name="loginform">
        <h2 class="form-signin-heading">Please sign in</h2>
                    
        <label for="email" class="sr-only">Email address</label>
        <input type="email" name="email" required class="form-control" placeholder="Email address" required autofocus="true">

        <label for="password" class="sr-only">Password</label>
        <input type="password" name="password" required class="form-control" placeholder="Password" required>

        <button class="btn btn-lg btn-primary btn-block" type="submit" name="login" value="Login" >Sign in</button>

<!--    <p class="form-signin bg-danger"><?php if (isset($errormsg)) { echo $errormsg; } ?></p> -->
      </form>
    </div>
  </body>
</html>


Als ik hierop probeer in te loggen, kom ik weer gewoon op de index.php pagina zelf uit, en niet de admin/index.php
Ook als ik het form-gedeelte van de onderste code vervang door de form-code uit de bovenste werkt het niet, dat terwijl de PHP-code verder hetzelfde is.

Vervang ik de form-code uit het bovenste bestand door die van de onderste, dan blijft het werken.
Er zit dus iets in de onderste code waarom het niet werkt, maar ik ben er nu al zo lang mee bezig dat ik door de bomen de speld in het bos niet meer zie.

Iemand die ziet waarom de onderste code niet werkt.

Acties:
  • +1 Henk 'm!

  • emnich
  • Registratie: November 2012
  • Niet online

emnich

kom je hier vaker?

Heb je error reporting aan staan? Ik vermoed dat de header functie gewoon niet werkt doordat er wellicht ergens nog een whitespace voor de php code staat. Zet sowieso een exit na de header want de rest van de code hoeft/mag daarna niet meer uitgevoerd worden.

Het gaat wat voorbij aan de scope van de vraag maar probeer ook bij simpele dingen te letten op XSS en gebruik de standaard php functies voor het maken en controleren van wachtwoorden. Gebruik geen md5....

Acties:
  • +1 Henk 'm!

  • mcDavid
  • Registratie: April 2008
  • Laatst online: 02-10 08:45
Wat emnich zegt. Probeer ook zelf wat te debuggen door met var_dump() te kijken wat op verschillende plekken in je code de inhoud van bepaalde variablen is, zodat je kunt checken of dat klopt met wat je verwacht.

Daarnaast aanvulling op zijn stukje buiten de scope van de vraag:
- gebruik alsjeblíéft gewoon parameterized queries
- isset() returnt een boolean, waarom check je die tegen een lege string?

Acties:
  • 0 Henk 'm!

  • cOOlrUnnINgs
  • Registratie: Februari 2002
  • Laatst online: 22:36
Om even het e.e.a. helderder te maken, ik ben een absolute beginner op het gebied van PHP.
De meeste code die hierboven vermeld staat is bij elkaar gesprokkeld van het internet en aan elkaar geknoopt door mij.

Als je begint over parameterized queries, zal ik eerst moeten opzoeken waar je het over hebt.
Betreffende de isset, dit stukje code heb ik dus zo van het internet geplukt.

Ik zal i.i.g. de tips ter harte nemen en kijken of ik daarmee al verder kom, al moet ik eerst uitzoeken wat jullie precies bedoelen ;) ;)

Acties:
  • 0 Henk 'm!

  • mcDavid
  • Registratie: April 2008
  • Laatst online: 02-10 08:45
zoeken hoe dingen werken is 90% van het programmeervak. d:)b

Acties:
  • 0 Henk 'm!

  • cOOlrUnnINgs
  • Registratie: Februari 2002
  • Laatst online: 22:36
Zekers, ik zie nu inmiddels wat je bedoelt met een parametrized query, da's inderdaad wel slim om te gebruiken.

Acties:
  • 0 Henk 'm!

  • BarôZZa
  • Registratie: Januari 2003
  • Nu online
Regel 4-6 ?

Lijkt alsof daar de sessie bestaat is en hij je daar redirect naar die index.php.

Misschien dat je bij die bovenste geluk had dat de sessie niet werkte omdat je meteen een redirect doet en heb je bij die tweede wel een keer succesvol een sessie opgeslagen 8)7
Pagina: 1