login session doet het niet
ik ben bezig met een simpel login script alleen zit ik met 1 foutje en dat is hij gaat niet naar index.php
login-scripts.php
Code (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
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
<?php
session_start();
if(isset($_POST['logintoadminpanel']))
{
include_once 'connection.php';
$username = $_POST['username'];
$password = $_POST['password'];
if(empty($username) || empty($password))
{
$error = 'Please fill the required fields';
}
else
{
$username = strip_tags($username);
$password = strip_tags($password);
$username = mysql_real_escape_string($username);
$password = mysql_real_escape_string($password);
$password = md5($password);
$sql = mysql_query("SELECT * FROM users WHERE name = '$username' && password = '$password' LIMIT 1") or die (mysql_error());
$num_rows = mysql_num_rows($sql);
if($num_rows == 1)
{
$rows = mysql_fetch_array($sql);
extract($rows);
$SESSION['username'] = $name;
$SESSION['level'] = $access_level;
if(isset($_SESSION['username']))
{
$update = mysql_query("UPDATE users SET last_log_time = now()") or die(mysql_error());
header ("location:index.php");
}
}
else
{
$error = 'Invalid Credentails';
}
}
}
?>
session_start();
if(isset($_POST['logintoadminpanel']))
{
include_once 'connection.php';
$username = $_POST['username'];
$password = $_POST['password'];
if(empty($username) || empty($password))
{
$error = 'Please fill the required fields';
}
else
{
$username = strip_tags($username);
$password = strip_tags($password);
$username = mysql_real_escape_string($username);
$password = mysql_real_escape_string($password);
$password = md5($password);
$sql = mysql_query("SELECT * FROM users WHERE name = '$username' && password = '$password' LIMIT 1") or die (mysql_error());
$num_rows = mysql_num_rows($sql);
if($num_rows == 1)
{
$rows = mysql_fetch_array($sql);
extract($rows);
$SESSION['username'] = $name;
$SESSION['level'] = $access_level;
if(isset($_SESSION['username']))
{
$update = mysql_query("UPDATE users SET last_log_time = now()") or die(mysql_error());
header ("location:index.php");
}
}
else
{
$error = 'Invalid Credentails';
}
}
}
?>
login.php
Code (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
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
<?php include_once( 'scripts/login-scripts.php' );?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>login</title>
<link rel="stylesheet" type="text/css" href="css/custom.css" />
<script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js?ver=1.3.2'></script>
</head>
<body>
<div id="mainWrapper">
<?php if(isset($error)) { echo '<div id="errors">'.$error.'</div>'; }?>
<div id="loginform">
<h2>Login Area</h2>
<form method="post" action="login.php">
<div class="form-elements">
<label for="Username">Username</label>
<input type="text" name="username" placeholder="Enter Username" id="username"/>
</div>
<div class="form-elements">
<label for="Password">Password</label>
<input type="password" name="password" placeholder="Enter Password" id="Password"/>
</div>
<div class="form-elements">
<label></label>
<input type="submit" name="logintoadminpanel" value="Login" id="logintoadminpanel" class="myButton"/>
</div>
</div><!--end mainWrapper-->
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>login</title>
<link rel="stylesheet" type="text/css" href="css/custom.css" />
<script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js?ver=1.3.2'></script>
</head>
<body>
<div id="mainWrapper">
<?php if(isset($error)) { echo '<div id="errors">'.$error.'</div>'; }?>
<div id="loginform">
<h2>Login Area</h2>
<form method="post" action="login.php">
<div class="form-elements">
<label for="Username">Username</label>
<input type="text" name="username" placeholder="Enter Username" id="username"/>
</div>
<div class="form-elements">
<label for="Password">Password</label>
<input type="password" name="password" placeholder="Enter Password" id="Password"/>
</div>
<div class="form-elements">
<label></label>
<input type="submit" name="logintoadminpanel" value="Login" id="logintoadminpanel" class="myButton"/>
</div>
</div><!--end mainWrapper-->
</body>
</html>
Krijg je errors?
nee, wat hij doet is hij blijft op de login.php hangen hij gaat niet door naar index.php wat hij wel zou moeten doen.
Geef al je if statements een else, dan zie je waar het vastloopt.
Edit:
volgens mijn mis ik nog een om af te sluiten
Gewijzigd op 08/01/2012 04:16:38 door Antonov tonova
header("URL:'index.php'");
En je mist inderdaad een afsluitende </div>.
Verder zag ik dat de id van je textfield username niet met hoofdletter is maar de label die erbij hoort wel (id="username" <--> for="Username").
Dit zal niet voor de fout zorgen, maar is wel netter om te verhelpen denk ik zo.
Gewijzigd op 08/01/2012 05:16:09 door Andre Sep
controleren of een formulier is verzonden: if( $_SERVER['REQUEST_METHOD'] == 'POST' )
Selecteren doe je niet met *, maar benoem het veld/de velden.
Waarom variabelen kopiëren (8/9) en 2x bewerken (17/21)?
De md5 kun je ook prima in de query uitvoeren.
Waar is je salt?
mysql_real_escape_string in je query gebruiken, niet er buiten.
Variabelen buiten quotes.
empty is geen goede manier om te controleren.
die is geen foutafhandeling.
if(isset($_SESSION['username'])) lijkt me zinloos --> je zit in een if waarbij je $_SESSION['username'] set. Die zou dus altijd waar moeten zijn...
Na header wordt exit geadviseerd.
En in index.php staat include login.
Dat lijkt wel een eeuwige loop.
Edit:
Dit update je hele database:
$update = mysql_query("UPDATE users SET last_log_time = now()") or die(mysql_error());
Gewijzigd op 08/01/2012 11:34:11 door - SanThe -
maar ik snap het nog steeds niet wat is nou het genen wat ik moet veranderen, om me session te laten werken?
hoe zou de code er volgens jullie er uit moeten zien?
Gewijzigd op 08/01/2012 12:32:56 door Antonov tonova
Haal die header() eens weg.
- SanThe - op 08/01/2012 12:55:22:
Haal die header() eens weg.
@- SanThe - maakt geen verschil.
Dit is de login page
http://www.clan-hosting.nl/cms/admin/login.php
en hier zou je op uit moeten komen:
http://www.clan-hosting.nl/cms/admin/index.php
je kan in loggen met
GB: phphulp
WW: phphulp
Gewijzigd op 08/01/2012 13:12:53 door Antonov tonova
Krijg je dat te zien als je het formulier verzend?
je die zie ik verschijnen
Met andere woorden, gewoon eens beginnen met debuggen. Wij kunnen dat namelijk niet voor je doen vanaf een afstandje.
En vanwaar komen deze dingen?
Want ik zie nergens $name en of $acces_level staan.
PS: ik kom wel gewoon op index.php?
ik heb net op regel op regel 20 van login.php verandert naar index.php
en nou doet hij het wel.
maar of hij het daadwerkelijk doet of dat hij me in de maling neemt geen idee.
@Erwin H
ik ben nog een beginner op gebied van php, dus debuggen is voor mijn nog nieuw.
Probeer eens je $_SESSION te echoeen. Ook moet je die op elke beveiligde pagina checken hé. Anders kom ik gewoon op index.php zonder enige session!
Antonov tonova op 08/01/2012 14:17:43:
@Erwin H
ik ben nog een beginner op gebied van php, dus debuggen is voor mijn nog nieuw.
ik ben nog een beginner op gebied van php, dus debuggen is voor mijn nog nieuw.
Dat kan natuurlijk, maar dan is het nu de tijd om het te leren. Dus mijn vraag blijft, wat voor debugging heb je nu gedaan na de tip van Obelix te hebben gelezen? Als je het op een regel kan doen, kan je het op alle, toch? Dus, laat ons maar eens zien waar iets anders gebeurt dan jij verwacht.
toegevoegd
als ik dan inlog dan gebeurt er dus niks alleen laat hij in de linker bovenhoek test zien.
maar verander ik nou regel 20 van login.php naar index.php inplaats van login.php en ik log in gaat hij w el verder naar index.php
@Aaron
dit stukje haalt hij uit de database vandaan
"name" en "access_level".
oké wat ik heb gedaan is dit ik heb op regel 6 dit als ik dan inlog dan gebeurt er dus niks alleen laat hij in de linker bovenhoek test zien.
maar verander ik nou regel 20 van login.php naar index.php inplaats van login.php en ik log in gaat hij w el verder naar index.php
@Aaron
dit stukje haalt hij uit de database vandaan
"name" en "access_level".
Gewijzigd op 08/01/2012 14:48:42 door Antonov tonova
Antonov tonova op 08/01/2012 14:46:50:
Ben ik dan zo onduidelijk.... wat heb je DAARNA gedaan. Heb je hetzelfde gedaan op regel 17 bijvoorbeeld om te controleren of je script daar wel correct komt. Daarna op regel 27. Daarna op 35 etc etc.
En op regel 7 eens proberen om je $_POST array naar het scherm te schrijven (met print_r($_POST) bijvoorbeeld) om te kijken of alle gegevens daar wel juist in staan. Dan op regel 24 echoen wat er uit je query komt etc etc.
Vertel eens eerlijk, heb je echt nog geen moment eraan gedacht om gewoon dit soort controles toe te passen? Heb je echt nog geen enkele test gedaan om te zien of alles wel loopt zoals je denkt dat het loopt? Of, heb je dat wel allemaal al gedaan en weet je dus waar je de fout moet zoeken.
Overigens heeft dit alles te maken met debuggen, maar ook met gezond verstand. Het feit dat er ergens iets niet gebeurt wat je verwacht betekent dat er iets fout gaat. Optie 1 is dan volgens sommige het op een forum te zetten, maar optie 1 is natuurlijk om met alle middelen die je hebt de fout opsporen. Dat is namelijk ook het enige wat wij van een afstandje kunnen doen. Alleen wij moeten het dan puur van de code hebben, terwijl jij dit soort checks kan uitvoeren.
Dus, probeer de tests even zoals hierboven aangegeven en vertel ons waar precies het mis gaat.
dus ik denk dat er iets fout gaat vanaf regel 36 t/m 40