Problemer med login vha PHP og mySQL
Hej ekspert!Nu har jeg siddet og bakset med en login-procedure i jeg ved ikke hvor lang tid og er ved at få grå hår i hovedet af det.
Jeg er begynder inden for PHP-verdenen og skriver derfor PHP-scriptet mere eller mindre af fra en bog, der hedder "PHP and MySQL for Dynamic Web Sites". Det skulle i og for sig være let nok, troede jeg, men jeg kan ikke få det til at virke :-(
Jeg arbejder med tre filer, der pt. kaldes:
1) login.php
2) loggedin.php
3) index2.php
Forud for dette har jeg oprettet en database med en tabel (vha. PHP myAdmin), der hedder "users". Her ligger indtil videre tre test-brugere.
Når jeg indtaster bruger-data på login-siden kan jeg godt få scriptet til at validere indholdet, men så stopper festen. Jeg kan ikke logge mig ind!!
Jeg arbejder med cookies for at kunne brugerne.
Nedenfor kan du se min kode (hele sider). Kan du se, hvad der er galt? Du kan evt. teste scriptne her: http://www.blaagaardsgade25-27.dk/testmappe/login.php. Brug følgende data: Brugernavn = hest123, Password = hest123 (brugeren er oprettet i databasen).
På forhånd tak for hjælpen!
/lsp
1) login.php-siden
<?php # login.php
if (isset($_POST['submit'])) { // handle the form
require_once ('mysql_connect.php');
// create a function for escaping the data
function escape_data ($data) {
global $dbc;
if (ini_get('magic_quotes_gpc')) {
$data = stripslashes($data);
}
return mysql_real_escape_string($data, $dbc);
} // end of function
$message = NULL; //create an empty new variable
// check for a username
if (empty($_POST['username'])) {
$u = FALSE;
$message .= '<br>Du har glemt at indtaste et brugernavn!';
} else {
$u = escape_data($_POST['username']);
}
// check for a password
if (empty($_POST['password'])) {
$p = FALSE;
$message .= '<br>Du har glemt at indtaste et password!';
} else {
$p = escape_data($_POST['password']);
}
if ($u && $p) { // if everything's OK
// retrieve the user_id and first_name for that username/password combination
$query = "SELECT user_id, first_name FROM users WHERE username='$u' AND password=PASSWORD('$p')";
$result = @mysql_query ($query); // run the query
$row = mysql_fetch_array ($result, MYSQL_NUM); // return a record, if applicable
if ($row) { // a record was pulled from the database
// Set the cookies & redirect
setcookie ('first_name', $row[1]);
setcookie ('user_id', $row[0]);
header ("Location: http://" . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . "/loggedin.php");
exit(); // quit the script
} else { // no record matched the query
$message = '<br>Det indtastede brugernavn og password findes ikke!';
}
mysql_close(); // close the database connection
} else {
$message .= '<br>Prøv igen.';
}
} // end of the main submit conditional
// set the page title and include the HTML header
$page_title = 'Login';
include ('header.inc');
// print the error message if there is one
if (isset($message)) {
echo '<font color="red">', $message, '</font>';
}
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<p class="hovedoverskrift">Log in</p>
<p>Er du andelshaver eller lejer kan du få adgang til de lukkede sider.</p>
<p>Har du ikke modtaget et brugernavn og et password, skal du kontakte vores webmaster. Dette gælder også, hvis du har glemt de pågældende oplysninger.</p>
<p><strong>Indtast brugernavn og password</strong></p>
<table width="250" border="0" cellspacing="0" cellpadding="4">
<tr>
<td>Brugernavn:</td>
<td><input type="text" name="username" size="20" maxlength="20" value="<?php if (isset($_POST['username'])) echo $_POST['username']; ?>" /></td>
</tr>
<tr>
<td>Password:</td>
<td><input type="password" name="password" size="20" maxlength="20" /></td>
</tr>
<tr>
<td> </td>
<td></td>
</tr>
<tr>
<td> </td>
<td><input type="submit" name="submit" value="Log in" /></td>
</tr>
</table>
</form><!-- end of form -->
<?php
include ('footer.inc'); // include the HTML footer
?>
2) loggedin.php-siden
<?php # loggedin.php
// if no cookie is present, redirect the user
if (!isset($_COOKIE['first_name'])) {
header ("Location: http://" . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . "/index2.php");
exit(); // quit the script
}
// set the page title and include the HTML header
$page_title = 'logged in';
include ('header.inc');
// print a customized message
echo "<p>Du er logget ind som, {$_COOKIE['first_name']}!</p>";
include ('footer.inc'); // include the HTML footer
?>
3) index2.php-siden
<?php # index2.php
$page_title = 'Velkommen!';
include ('header.inc'); // use the HTML header file
echo '<p>Du er logget ind på siden...</p>';
include ('footer.inc'); // use the HTML footer file
?>