overtijd ben ik hier eens geweest met een probleem van jan zen login systeem.
Ik zal het nu even duidelijk uitleggen, en ik hoop dat Jan zelf ook eens een kijkje kan nemen.
In dit stukje code
<?php
session_start ();
// terug naar de loginpagina. Met sleep bouwen we een pauze in tegen brute-forcen
function to_login () {
header ('Location: http://www.vandenreyt.be/koks/login.php';); // NIET VERGETEN AAN TE PASSEN!!!
}
function check_login ($username, $password) {
// query opstellen
// je tabel kan er heel simpel uitzien:
// id INT(11) auto_increment
// username VARCHAR 64
// password VARCHAR 64. Het password sla je op in je DB met een SHA1 hash
// daarom staat SHA1 dus ook in de query
$sql = "
SELECT id
FROM users
WHERE username = '" . mysql_real_escape_string ($username) . "'
AND password = SHA1('" . mysql_real_escape_string ($password) . "')
";
if ($res = mysql_query ($sql)) {
if (mysql_num_rows ($res) == 1) {
// de query is gelukt en we hebben 1 resultaat
$row = mysql_fetch_assoc ($res);
$_SESSION['id'] = $row['id'];
$_SESSION['logged_in'] = true;
}
else {
to_login ();
}
}
else {
to_login ();
}
}
// eerst maar eens kijken of $_SESSION['logged_in'] bestaat
if (!isset ($_SESSION['logged_in'])) {
// nog niet eerder ingelogd, maar misschien heeft iemand net het loginformulier ingevuld?
if (isset ($_POST['username'], $_POST['password'])) {
check_login ($_POST['username'], $_POST['password']);
}
else {
to_login ();
}
}
?>
zit hoogst waarschijnlijk de "fout".
Ik heb op allerlei manieren al geprobeerd om om de $_SESSION['id'] op te halen. Dit is mij echter nooit gelukt. Als controle had ik op de pagina eens echo $_SESSION['id']; neergezet, en die gaf bij elke user, dus telkens een ander id, het getal 10.
Mijn code die het moest doen:
<?php
include('includes/config.php');
require('includes/auth.php');
$sess_id = $_SESSION['id'];
ini_set ('display_errors', 1);
error_reporting (E_ALL);
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
function strip_var($value)
{
$value1 = addslashes($value);
$value2 = strip_tags($value1);
$value3 = htmlspecialchars($value2);
return $value3;
}
$pw1 = strip_var($_POST['pw1']);
$pw2 = strip_var($_POST['pw2']);
if($pw1 == $pw2)
{
$sql = "
UPDATE
users
SET
password= SHA1('" . $pw1 . "')
WHERE
id = " . $sess_id . "
;
";
if (! $res = mysql_query($sql))
{
trigger_error(mysql_error());
echo '<pre>'.$sql.'</pre>';
}else
{
header('Refresh: 3; URL=http://www.vandenreyt.be/koks/index.php');
echo "<html>";
echo "<head>";
echo "<title>Agenda Koks</title>";
echo "<style type=\"text/css\">";
echo " @import 'includes/stylesheetadmin.css';";
echo "</style>";
echo "</head>";
echo "<body>";
echo '<div align="center" class="body">';
echo '<center>';
echo 'Het paswoord is gewijzigd!<br>';
echo '</center>';
echo '</div>';
}
}
else
{
echo 'Paswoorden komen niet overeen, <a href="changepass.php">probeer opnieuw</a>';
}
}
else
{
echo '<form action="changepass.php" method="post">';
echo 'Paswoord<input type="password" name="pw1"><br>';
echo 'Paswoord<input type="password" name="pw2"> (bevestiging)<br>';
echo '<input type="submit" value="Verander">';
echo '</from>';
}
?>Hier door wordt telkens de user met ID 10 zijn paswoord aangepast. Op zich is dit nog geen probleem, omdat er toch geen registratie pagina is, en er toch geen 10 user mogen zijn, maar nu kunnen de mensen voor wie ik dit heb gemaakt hun paswoord niet aanpassen.
Kan iemand me helpen?
Jens
EDIT: even mijn auth.php erin gezet:)