/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
PHP headers virker ikke på en af mine site~
Fra : Frederik Junkuhn


Dato : 04-11-09 12:33

Hej,

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

 
 
Peter Farsinsen (04-11-2009)
Kommentar
Fra : Peter Farsinsen


Dato : 04-11-09 13:11

Frederik Junkuhn wrote:

> 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
fornavn@efternavn.dk

Frederik Junkuhn (04-11-2009)
Kommentar
Fra : Frederik Junkuhn


Dato : 04-11-09 15:13

Peter Farsinsen wrote in dk.edb.internet.webdesign.serverside.php:
> Frederik Junkuhn wrote:
>
> > 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 ;)
>

Det virkede ikke med en absolut URL..


--
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

Peter Farsinsen (04-11-2009)
Kommentar
Fra : Peter Farsinsen


Dato : 04-11-09 15:22

Frederik Junkuhn wrote:
> Peter Farsinsen wrote in dk.edb.internet.webdesign.serverside.php:
>> Frederik Junkuhn wrote:
>>
>>> 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 ;)
>>
>
> Det virkede ikke med en absolut URL..

Du får ingen fejl? ;)

--
Peter Farsinsen
fornavn@efternavn.dk

Frederik Junkuhn (04-11-2009)
Kommentar
Fra : Frederik Junkuhn


Dato : 04-11-09 15:42

Frederik Junkuhn wrote in dk.edb.internet.webdesign.serverside.php:
> Hej,
>
> 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
>

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


--
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

Martin (04-11-2009)
Kommentar
Fra : Martin


Dato : 04-11-09 16:59

Frederik Junkuhn wrote:
> 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.

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

Stig Johansen (04-11-2009)
Kommentar
Fra : Stig Johansen


Dato : 04-11-09 22:24

Martin wrote:

> 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

Chano Andersen (04-11-2009)
Kommentar
Fra : Chano Andersen


Dato : 04-11-09 19:34

Frederik Junkuhn skrev:
> header("location:super-admin.php");


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

Frederik Junkuhn (05-11-2009)
Kommentar
Fra : Frederik Junkuhn


Dato : 05-11-09 08:07

Chano Andersen wrote in dk.edb.internet.webdesign.serverside.php:
> Frederik Junkuhn skrev:
> > header("location:super-admin.php");
>
>
> 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

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.. :)

--
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

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408914
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste