Hej!
Hoppas ni orkar titta genom koden. Jag försöker skriva ett inloggnings script vilket verkar fungera fint med denastående kod, men det som inte fungerar är att jag inte förs vidare till sidan databas.php efter inloggningen, vad har jag gjort för fel?
<?php
// Ok to login ???
if( !empty($_POST["login"]) ){
// Empty fields?
if( empty($_POST["f1"]) || empty($_POST["f2"]) ){
print "Tomma fält är inte tillåtna!<br/><br/><input type='button' value='Tillbaka' onClick='history.back()'/>";
exit;
}
//
// Check if correct username and passwotrd for admin
$host="localhost"; // Host name
$username="**"; // Mysql username
$password="**"; // Mysql password
$db_name="**"; // Database name
$tbl_name="**"; // Table name
// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");
// username and password sent from signup form
$myusername=$_POST['f1'];
$mypassword=$_POST['f2'];
//kryptera lösenordet med md5()
$encrypted_mypassword=md5($mypassword);
$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$encrypted_mypassword'";
$result=mysql_query($sql);
// Mysql_num_row is counting table row
$count=mysql_num_rows($result);
// If result matched $myusername and $mypassword, table row must be 1 row
if($count==1){
session_register("myusername");
session_register("mypassword");
header("location:welcome.php");
include "databas.php";
}
else {
echo "Wrong Username or Password";
}
exit;
}
?>
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>Nyheter</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<style type="text/css">
.bold{
font-weight: bold;
}
.border {
border-style: solid;
border: 1px;
}
.noborder {border: 0px;}
.bt {
font-size: 14px;
}
.loginBox
{
position: absolute;
left:50px;
top: 50px;
border: 1px solid #000055;
padding-left: 10px;
padding-top:10px;
padding-bottom:10px;
padding-right:20px;
background-repeat: no-repeat;
background-color: #ECEADE
}
INPUT.loginInput
{
width:120px;
border:solid 1px #000000
}
INPUT.loginButton
{
font-weight:bold;
border:solid 1px #000000
}
H2.login
{
font-size:12px;
}
</style>
</head>
<body>
<form method="post" action="">
<!--
Change password dialog
-->
<div class="loginBox" id="login">
<table summary="">
<tr>
<td><img src="UKF.JPG" alt="" /></td>
</tr>
<tr>
<td class="login" style="width:80px; align: left;">Användarnamn</td>
<td class="login" align="right"><input class="loginInput" type="text" name="f1"/></td>
</tr>
<tr>
<td class="login" align="left">Lösenord</td>
<td class="login" align="right"><input class="loginInput" type="password" name="f2" /></td>
</tr>
<tr>
<td class="login" ></td>
</tr>
<tr>
<td></td>
<td class="login" align="right" ><input class="loginButton" type="submit" name="login" value="Anslut" /></td>
</tr>
</table>
</div>
</form>
</body>
</html>
Tack för svaret!
Hmm...det stämmer ju.
Jag har gjort så här istället nu att jag ska skickas vidare till databas.php från welcome.php, är det rätt?
<?php
session_start();
// Kolla om inloggad = sessionen satt, dirigera tillbaka till inloggningssidan om inte
if (!isset($_SESSION['sess_user'])){
header("Location: adm_login.php");
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Välkommen</title>
</head>
<body>
Välkommen <?=$_SESSION['sess_user'] ?><br>
</body>
</html>
<?php
header("Location: databas.php");
exit;
}
?>
Nu har jag tagit bort html koden så att filer ser så här ut nu, men det fungerar fortfarande inte, jag loggas in och stannar på inloggningsrutan...
?php
session_start();
// Kolla om inloggad = sessionen satt, dirigera tillbaka till inloggningssidan om inte
if (!isset($_SESSION['sess_user'])){
header("Location: adm_login.php");
}
else{
header("Location: databas.php");
exit;
}
?>
Kolla att du faktiskt sätter $_SESSION['sess_user'] på adm_login.php
Pröva att ange absolut sökväg i header.
Jag utgår ifrån att starten är <?php och att '<' bara fallit bort vid inklistringen här?
Var exakt i adm_login.php ska jag skriva $_SESSION['sess_user'] menar du? för det har jag inte, jag hade den bara i welcome.php som jag tog bort nu som du ser i den sista koden jag visade här.
2)Absolut sökväg? de ligger på ett och samma ställe, har de inte i olika mappar eller så, även om jag skulle nu göra det, hur ser det ut?
Ja..jag har bara missat att ta med ´<´när jag klistrade in här.
Var exakt i adm_login.php ska jag skriva $_SESSION['sess_user'] menar du? för det har jag inte, jag hade den bara i welcome.php som jag tog bort nu som du ser i den sista koden jag visade här.
Det förklarar saken. Om du aldrig sätter $_SESSION['sess_user'] så kommer du ju alltid att åka iväg till filen adm_login.php. Då har du ju i princip än oändlig loop!
// Kolla om inloggad = sessionen satt, dirigera tillbaka till inloggningssidan om inte
if (!isset($_SESSION['sess_user'])){ //<--- Måste sättas i adm_login.php
header("Location: adm_login.php");
}
else{
header("Location: databas.php");
exit;
}
När du har konstaterat att personens namn och lösen stämmer måste du sätta denna sessionsvariabel.
En absolut sökväg är en sökväg som tar med hela adressen och alltså börjar med http://www....
Nä..nu har jag rört till det ordentligt känns det som, admin.php ser så här ut nu..hjälp!
<?php
error_reporting(E_ALL);
ini_set("display_errors", "1");
session_start();
// Ok to login ???
if( !empty($_POST["login"]) ){
// Empty fields?
if( empty($_POST["f1"]) || empty($_POST["f2"]) ){
print "Tomma fält är inte tillåtna!<br/><br/><input type='button' value='Tillbaka' onClick='history.back()'/>";
exit;
}
// Check if correct username and passwotrd for admin
// Connect to server and select databse.
$Link= mysql_connect("localhost", "*", "*" )or die("cannot connect" . mysql_error());
mysql_select_db("*")or die("cannot select DB");
// username and password sent from signup form
$myusername=$_POST['f1'];
$mypassword=$_POST['f2'];
//kryptera lösenordet med md5()
$encrypted_mypassword=md5($mypassword);
$query ="SELECT username, password FROM Blabla WHERE username='$myusername' and password='$encrypted_mypassword'";
$result=mysql_query($query );
// Mysql_num_row is counting table row
$count=mysql_num_rows($result);
// If result matched $myusername and $mypassword, table row must be 1 row
if($count==1){
// Kolla om inloggad = sessionen satt, dirigera tillbaka till inloggningssidan om inte
if (!isset($_SESSION['sess_user'])){ //<--- Måste sättas i adm_login.php
header("Location: adm_login.php");
echo "Wrong Username or Password";
}
else{
header("Location: databas.php");
exit;
}
}
?>
html kod finns här
Jag fick fel på mysql_connect(); så jag tog bort variablerna och använder strängerna istället. Fick också fel i mysql_query() så jag tog bort variabeln &Link och skickar med bara &query som inparameter.
Innan jag la till denna kod i admin.php så fick jag fel i databas.php filen när jag skrev in fel uppgifter.
Nu får jag inget felmeddelande alls efter att jag la till denna kod, oavsett om jag skriver fel eller rätt uppgifter, stannar bara på samma sida med inloggningsrutan ...
Att den stannar beror på parse error. Du måste koppla på felmeddelandena i php.ini för att du ska kunna se parse error. Något som varmt rekommenderas om det är en utvecklingsserver.
Vad hade du tänkt göra med "adm_login.php" i din kod? Det är denna rad du sannolikt får parse error på.
hmm det hjälper inte att jag slog på felmeddelandena där man slå på dem i webbhotellet, får inget meddelande ändå.
Är koden verkligen som som jag har skrivit den?
På webbplatsen har jag en två tabeller i en databas som jag vill att endast vissa personer ska komma åt för att lägga till tabort och visa data från, dessa personer vill jag själv ge inloognins uppgifter som jag har då sparat i en tabell i samma databasen.
Så admin.php har jag för att dessa personer ska först kunna logga in för att kunna visa sidan med databasen.
Om du har koden som du visar i några inlägg ovan, då är visning av felmeddelande inte påkopplat.
I vilket fall, ta bort raden där du har ett ensamt adm_login.php.
Hur är sambandet mellan adm_login.php och admin.php?
Hmm vet inte varför den har hamnat där, men i min fil så står det så:
if (!isset($_SESSION['sess_user'])){
header("Location: adm_login.php");
}
else{
header("Location: databas.php");
exit;
}
Ursäkta att jag skev fel filnamn, det är adm_login jag menade i mitt förra inlägg inte admin.php den har jag inte.
Nu har jag pratat med supporten för webbhotellet och de kollade och jag talade om hur jag slog på felmeddelandena för php.
De sa att jag gör rätt när jag slår på de och att det äringet fel på kopplingen till databasen och så för då hade jag fått felmeddelandet i webbläsaren, (vilket jag tidigare en gång har fått) utan att felet ligger i mitt script och att det är inget de hjälper till med... :-(
Förutsättningen för att komma vidare med inloggningen är att $_SESSION['sess_user'] är satt. Det betyder att när inloggningen fungerar måste du sätta den. Här vet du att inloggningen har funkat:
// Connect to server and select databse.
//....
$query ="SELECT username, password FROM Blabla WHERE username='$myusername' and password='$encrypted_mypassword'";
$result=mysql_query($query );
// Mysql_num_row is counting table row
$count=mysql_num_rows($result);
// If result matched $myusername and $mypassword, table row must be 1 row
if($count==1){
//INLOGGNINGEN HAR FUNGERAT - sätt sessionsvärdet
//och skicka ev vidare till databas.php direkt
}
else {
// Inloggningen HAR INTE funkat
header("Location: adm_login.php");
echo "Wrong Username or Password";
}
}
?>