Avatar billede josefsen12345 Nybegynder
08. januar 2012 - 21:15 Der er 13 kommentarer

login system

hej experten, jeg har et lille problem...
jeg har fuldt en guide til hvordan man laver et login system.
mit script er følgene:
<?php
session_start();

$bruger="admin";
$kode="test1";

$user="false";
$pass="false";

if (isset($_POST['user']) && isset($_POST['pass'])) {
    $user=$_POST['user'];
    $pass=$_POST['pass'];
}
else {
    echo "du skal indtaste et gyldig brugernavn og kodeord";
    header("refresh: 2; loginsite.php");

}
if ($user==$bruger && $pass==$kode) {
  echo "du er nu logget ind";
  $_SESSION['user']=$bruger;
  header("refresh: 2; members.php");
}
else {
    echo "forkert brugernavn eller kodeord";
    header("refresh: 2; loginsite.php");
}
?>

skriptet aktiveres i det man trykker login som i måske kan se.
problemet er når jeg kommer videre gider mine headers ikke virke. altså den sender mig hverken til members.php når jeg har skrevet koden rigtig, eller sender mig tilbage når den er forkert.
håber i kan hjælpe tusind tak :)
Avatar billede josefsen12345 Nybegynder
08. januar 2012 - 21:26 #1
har lige slået fejl meddelelse og nu får jeg dette Warning: Cannot modify header information - headers already sent by (output started at /customers/5/f/6/josefsen-racing.dk/httpd.www/login.php:20) in /customers/5/f/6/josefsen-racing.dk/httpd.www/login.php on line 22
Avatar billede olsensweb.dk Ekspert
08. januar 2012 - 21:36 #2
så snart du har udskrevet noget til skærmen virker dine header functioner ikke mere
ref http://dk2.php.net/manual/en/function.header.php
Remember that header() must be called before any actual output is sent, either by normal HTML tags, blank lines in a file, or from PHP. It is a very common error to read code with include(), or require(), functions, or another file access function, and have spaces or empty lines that are output before header() is called. The same problem exists when using a single PHP/HTML file.



else {
    echo "du skal indtaste et gyldig brugernavn og kodeord"; <-- fejl
    header("refresh: 2; loginsite.php");

}
if ($user==$bruger && $pass==$kode) {
  echo "du er nu logget ind"; <-- fejl
  $_SESSION['user']=$bruger;
  header("refresh: 2; members.php");
}
else {
    echo "forkert brugernavn eller kodeord"; <-- fejl
    header("refresh: 2; loginsite.php");
}
Avatar billede josefsen12345 Nybegynder
08. januar 2012 - 21:38 #3
bare mærkeligt fordi har fuldt den her til grunde og han gør det samme :) http://www.youtube.com/watch?v=crc2rwaFYjs
kan du forklare hvorfor han kan gøre det :S ?
Avatar billede josefsen12345 Nybegynder
08. januar 2012 - 21:44 #4
bare mærkeligt fordi har fuldt den her til grunde og han gør det samme :) http://www.youtube.com/watch?v=crc2rwaFYjs
kan du forklare hvorfor han kan gøre det :S ?
Avatar billede josefsen12345 Nybegynder
08. januar 2012 - 22:27 #5
og er grunden til at han har skrevet refresh i stedet for location ikke fordi at han har skrevet noget inden den sender en videre... :S ?
Avatar billede Pkallesoe Nybegynder
08. januar 2012 - 23:03 #6
Prøv at læse det #2 skriver. Du kan f.eks gemme det i en session og output det på den side du sender folk hen til.
09. januar 2012 - 11:27 #7
josefsen12345, vi havde andetsteds aftalt, at jeg skulle komme ind.  Men du har allerede i #2 fået svaret:  systemet betragter det første output som header.  Efterfølgende header commandoer har ingen effekt. 

Du valgte (i første omgang) ikke at acceptere svaret, med henvisning til, at den der lavede tutoriallen kunne gøre det.  Men vides jo strengt taget ikke, om den der lavede tutoriallen fik koden til at virke.  Hvis alligevel forfatteen til tutorialen kender et hemmeligt trick, så virkede det ikke på dit system, og jeg (og de andre deltagere på denne tråd) kender det ikke.

Du kunne jo i stedet vælge at prøve det der foreslås i #6.  Konkret kunne du gøre det følgende (ikke testet, men det skulle virke):

Forander koden, så du i stedet for echo "du skal indtaste et gyldig brugernavn og kodeord";

skriver $_SESSION['msg'] = "du skal indtaste et gyldig brugernavn og kodeord";

Og så i koden for loginsite.php skriver

if($_SESSION['msg'])
{
    echo $_SESSION['msg'];
    unset $_SESSION['msg']
}
Avatar billede olsensweb.dk Ekspert
09. januar 2012 - 17:21 #8
nu ville jeg lige kigge den tut igenne !!, allerede i hans index fil begår han en fejl :(
han starter session start efter html output :(, ennu en fejl
ref http://dk.php.net/session_start
Note:
To use cookie-based sessions, session_start() must be called before outputing anything to the browser.


i hans login.php laver han sammen fejl :(, dvs sender noget til skrærmen før header

#7
kunne dette værer årsagen til at det virker hos tut skriver ??
ref http://stackoverflow.com/questions/7934351/why-does-this-header-location-redirect-work-after-content-has-already-been-echoe
Output buffering is probably enabled by default. You should enable it manually if you want to rely on this functionality.
http://php.net/manual/en/function.ob-start.php
http://www.php.net/manual/en/intro.outcontrol.php[/div]

i givet fald !! dårlig kodestil
10. januar 2012 - 19:18 #9
ronols - jeg er altid ivrig efter at lære mere - du henviser til http://stackoverflow.com/questions/7934351/why-does-this-header-location-redirect-work-after-content-has-already-been-echoe hvor der en der viser denne kode

<?
echo "lalala";
header("Location: http://www.google.com/");

og påstår, at headeren virker og redirekter.  Det ville gå imod hvad jeg troede og mener jeg har erfaret, og hvad jeg har givet udtrykt for i denne tråd, at header ikke virker efter en output.  Jeg fangede det ikke helt - skulle det have noget at gøre med en output buffer der sender echoet og headeren på samme tid?  Output buffer der sandsynligvis var 'enabled by default' hos den der gav kode eksemplet?  Vil det medføre, at en løsning på problemet stillet i denne tråd kunne være at slå outbufferen til manuelt?  Gider du forklare nærmere til mig (og dermed til spørgsmåls stilleren?)
Avatar billede olsensweb.dk Ekspert
11. januar 2012 - 20:25 #10
<?php
echo "lalala";
header("refresh: 5; http://olsensweb.dk"); // hvorfor virker dette ??, det er imod princippet for header
// header("Location: http://www.google.com/"); // hvorfor virker dette ??, det er imod princippet for header
?>

ovenstående code virker mod forvendtning på min localhost, men selvføgelig ikke på mit domain.
spørgeren bør istedet for at finde svar på hvorfor det virker hos tut skriveren, bruge tid på at opdaterer sin code, så der ikke udskrives noget før header, som manualen siger, og efterfølgende finde en tut der følger standarten, ellers vil spørgeren efterfølgende få problemer hvis han skal bruge cookies eller andet der er afh af header
11. januar 2012 - 21:47 #11
ronols, tak for feedback.  Så der er mere mellem himmel og jord end visse af os tror.  Jeg må derfor overfor spørgsmålsstilleren vedgå, at min #7 ikke er fuldt korrekt.  Det er således en kendsgerning (testet af dig), at header i visse tilfælde virker efter et output.
 
Det oprindelige spørgsmål var, i realiteten, dette:  Hvorfor virker den viste kode ikke?  Så mit svar må jeg nu ændre til dette:  Det ved jeg ikke!  Men mit råd er ikke at spilde tid med at finde ud af det, for selv om det åbenbart kan bringes til at virke i visse tilfælde, så går det mod standard kodeskik som er ikke at placere noget output før header.

(Spørgsmålet er, om spørgsmålsstilleren stadig er med på tråden. Han har tilsyneladende ikke været inde på Eksperten siden han oprettede spørgsmålet for tre dage siden.)
18. januar 2012 - 20:27 #12
josefsen12345, har du set indlaeggene nummer 6 til 11?  Et direkte svar paa dit spoergsmaal fik du ikke, altsaa hvorfor den kode du viser ikke virker for dig, selv om den tilsyneladende virker for forfatteren af en tutorial.  Standard praksis er ikke at definere en header efter der er sendt et output.  Tilsyneladende (se nummer 10) kan en header i visse tilfaelde med held defineres efter output, men du kan ikke loebe an paa, at det virker, jaevnfoer at det din tutorial viser ikke virker i dit system.  Du anbefales i stedet at foelge standard praksis, og der er i traaden givet anvisninger paa hvordan.

Hvad er nu din videre hensigt med traaden?  Har du yderligere spoergsmaal?  Ellers er tiden vel inde til at lukke spoergsmaalet.  Beslut hvilke(t) af indlaeggene der var til hjaelp og bed om svar, eller opret selv svar og accepter det.
09. juli 2012 - 08:40 #13
josefsen12345, jeg prøver lige en gang til.  Du oprettede spørgsmålet, og jeg, og andre, kom med indlæg.  Derfor står spørgsmålet nu som åbent i min liste af indlæg.  Jeg beder dig afslutte hvad du begyndte og lukke spørgsmålet igen.  Please.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester



IT-JOB

Intempus

iOS developer

Udviklings- og Forenklingsstyrelsen

Serverdrift-specialist til Team Planning Tools

FlexDanmark

FlexDanmark Direktør

Netcompany A/S

Test Specialist

Udviklings- og Forenklingsstyrelsen

Erfaren teamleder til årsopgørelsen