Jeg har lavet et login script p� mit site, som virker fint, men
da jeg s� skal lave det p� et andet site virker det ikke mere.
Kort fortalt s� best�r det af 4 sider:
1. login.php
2. checklogin.php
3. admin.php
4. super-admin.php
Formularen p� "login.php" har method="post" og
action="checklogin.php".
Det virker ved at man logger ind og brugernavn og password
sammenlignes med en database, og hvis de stemmer overens s�
bliver man sendt videre via "header("location:admin.php");"
Mit problem er at jeg ikke bliver sendt videre fra
"checklogin.php", men at den bare giver mig en blank sk�rm.
Skifter jeg "header("location:admin.php");" ud med f.eks. "echo
"du er logget ind";" s� virker det fint.
Her er koden p� "checklogin.php":
<?php
$host="localhost"; // Host name
$username=""; // Mysql username
$password=""; // Mysql password
$db_name="test"; // Database name
$tbl_name="members"; // 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 form
$myusername=$_POST['myusername'];
$mypassword=$_POST['mypassword'];
// To protect MySQL injection (more detail about MySQL injection)
$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);
$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and
password='$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){
// Register $myusername, $mypassword and redirect to file
"login_success.php"
if($myusername == username1){
session_register("myusername");
session_register("mypassword");
header("location:admin.php");
}
if($myusername == username2){
session_register("myusername");
session_register("mypassword");
header("location:super-admin.php");
}
else {
echo "Wrong Username or Password";
}
?>
Som sagt har jeg brugt dette script p� min private site, og der
virker det fint.
Mange tak
--
Vil du l�re at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- P�dagogiske tutorials p� dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials
> if($myusername == username1){
> session_register("myusername");
> session_register("mypassword");
> header("location:admin.php");
Jeg kan ikke tro, det g�r nogen forskel, men det er go' skik at sende en
valid location header (dvs. en absolut url), og efterf�lgende at stoppe
scriptet med die() eller exit;
header("Location: http://dinserver.tld/admin.php");
die();
Tjek desuden om du har sl�et error_reporting etc. til ;)
--
Peter Farsinsen
for...@efternavn.dk
Det virkede ikke med en absolut URL..
Du f�r ingen fejl? ;)
--
Peter Farsinsen
for...@efternavn.dk
UPDATE:
Jeg har fundet en "�rkenl�sning" p� mit problem ved at s�tte "echo
"<meta http-equiv='refresh'
content='0;url=http://www.minURL.dk/admin.php'>";" ind istedet for
en "header("location:admin.php");" og dette virker fint.
Men hvis der er nogen der kan forklare mig hvorfor "header(... "
ikke virker p� det ene site, men fint p� det andet vil jeg gerne
vide det.. :)
/Frederik Junkuhn
Pr�v at skrive <meta> og intet andet istedet for din meta..
�bn s� siden, og tjek kildekoden
st�r <meta> som det F�RSTE og ikke nogle mellemrum, linjeskift eller
noget andet foran?
> Men hvis der er nogen der kan forklare mig hvorfor "header(... "
> ikke virker p� det ene site, men fint p� det andet vil jeg gerne
> vide det.. :)
Virker skam ogs� helt fint... HVIS
Der IKKE er sendt noget content ud f�r (bare 1 mellemrum er nok)
S� hvis din php side starter med
<mellemrum><?php
// php kode
header(....);
?>
S� g�r det galt og du skulle gerne f� en warning (content send before
header) eller noget i den stil.
Hvis du ikke f�r den warning, s� skal du lige have indf�rt
<?php
error_reporting(E_ALL);
ini_set('display_errors', 'on');
Ind i din(e) php filer..
Bem�rk det anbefales at s�tte display_errors til off i produktions
milj�et, og istedet for s� tjekke sin error log.
PS
Hvis du "bor" hos one.com s� skal du ind i administrationen p� one.com
og s�tte "display errors" til on
Kunne det v�re browseren der er MEGET facistisk? Pr�v eventuelt med
header("Location: super-admin.php");
Bem�rk stort L og mellemrum efter kolon.
- Chano Andersen
> Virker skam ogs� helt fint... HVIS
> Der IKKE er sendt noget content ud f�r (bare 1 mellemrum er nok)
Eller BOM hvis den er gemt som utf-8.
--
Med venlig hilsen
Stig Johansen
Det er meget muligt at jeg har et mellemrum f�r det f�rste <?php tag i
min kode.. Skal jeg lige tjekke op p�.
Jeg bem�rkede at jeg godt kunne echo'e tekst ud, men ikke hvis jeg
echo'ede et <a> tag.
Tak for hj�lpen.. :)