Avatar billede Slettet bruger
27. oktober 2009 - 20:47 Der er 25 kommentarer og
1 løsning

Include login i DIV (PHP

Hej exp's :)

Jeg bruger et login her fra: http://www.phpbegynder.dk/artikler.php?id=14&page=1

- og det kunne jeg godt tænke mig, at bruge i en lidt "mindre format", fx. at have det i en <div></div>, så det kommer til at være i én div, så det ikke fylder hele siden.

Men her opstår problemet -
når jeg laver en index.php og laver:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<link rel="stylesheet" type="text/css" href="style/style.css">
</head>
<body>

<div id="div1">
<?php
include("login.php");
?>
</div>
<div id="div2">Her skal der være en masse info...</div>
<div id="div3">Her skal din mor være</div>

</body>
</html>

... så kommer den frem og siger på siden:

Warning: Cannot modify header information - headers already sent by (output started at F:\HJEMMESIDER\SEBASTIANKS\SEBASTIANKS.WEP.DK\index.php:9) in F:\HJEMMESIDER\SEBASTIANKS\SEBASTIANKS.WEP.DK\files\settings.php on line 15

I linje 15 har jeg:
header("Location:http://". $_SERVER["HTTP_HOST"]);


.. er der nogen der kan hitte den her ud?
Skriv hvis i skal have mere af koden :)

På forhånd tak. :)
Avatar billede michael_stim Ekspert
27. oktober 2009 - 21:01 #1
Det er fordi du udskriver noget til skærmen før du bruger headeren.
Avatar billede grippen Nybegynder
27. oktober 2009 - 21:03 #2
evt brug meta refresh tagget til at redirecte folk, så slipper du for den error
Avatar billede Slettet bruger
27. oktober 2009 - 21:03 #3
Kan du evt. prøve at uddybbe lidt venligst? ;)
Avatar billede grippen Nybegynder
27. oktober 2009 - 21:06 #4
<meta http-equiv="refresh" content="0; url=http://side.dk" />
Avatar billede Slettet bruger
27. oktober 2009 - 21:07 #5
grippen -

er du sød at forklare lidt?

- er newb i php, bær over med mig, venligst :)
Avatar billede Slettet bruger
27. oktober 2009 - 21:07 #6
mange tak:)
Avatar billede Slettet bruger
27. oktober 2009 - 21:09 #7
det hjælper ikke rigtig på mit problem?

den står bare og refresher 30.000 gange, på samme side med:
Warning: Cannot modify header information - headers already sent by (output started at F:\HJEMMESIDER\SEBASTIANKS\SEBASTIANKS.WEP.DK\index.php:10) in F:\HJEMMESIDER\SEBASTIANKS\SEBASTIANKS.WEP.DK\files\settings.php on line 15
Avatar billede grippen Nybegynder
27. oktober 2009 - 21:11 #8
<html>
<head> <---- her starter du headeren, derfor får du problemer med header() funktionen i php. Derfor kan du bruge meta refreshen, du skal dog rette url= til det sted den skal sende folk hen.
Avatar billede Slettet bruger
27. oktober 2009 - 21:13 #9
jamen, det er jo på selve forsiden at jeg har: include("login.php");

- så de skal jo bare være på forsiden?
Avatar billede grippen Nybegynder
27. oktober 2009 - 21:14 #10
kig på linie 10 i din index.php fil. Der starter du noget som gir konflikt med linie 15 i settings.php
Avatar billede Slettet bruger
27. oktober 2009 - 21:17 #11
<html>
<head>
<meta http-equiv="refresh" content="0; url=http://sebastianks.wep.dk/index.php" />
<link rel="stylesheet" type="text/css" href="style/style.css">
</head>
<body>

<div id="div1">

<?php
include("login.php");
?>

</div>
<div id="div2">Her skal der være en masse info...</div>
<div id="div3">Her skal din mor være</div>

</body>
</html>


-- Det er <?php der starter?
Avatar billede grippen Nybegynder
27. oktober 2009 - 21:18 #12
den stykke html + php du lige har skrevet der, er det index.php ? hvis ja gir det ingen mening den skal meta refresh der i starten til sig selv.
Avatar billede Slettet bruger
27. oktober 2009 - 21:21 #13
ja det er index.

og det var det jeg prøvede at forklare til dig før = De skal jo blive på index?

Login.php er included i den ene DIV, som du kan se.. og fra den div skal man kunne logge ind..
Avatar billede grippen Nybegynder
27. oktober 2009 - 21:26 #14
saebe, mit svar var til det du skrev her:

I linje 15 har jeg:
header("Location:http://". $_SERVER["HTTP_HOST"]);

jeg skrev at fejlen lå i at du brugte header() funktionen, den skulle du skifte ud med meta refresh.
Avatar billede Slettet bruger
27. oktober 2009 - 21:28 #15
Vil du have jeg skal slette

if($_SERVER["PHP_SELF"] != $base_file) {
header("Location:http://". $_SERVER["HTTP_HOST"]);
exit;

fra settings.php..

og tilføje

meta refresher, på index.php?
Avatar billede zips Juniormester
27. oktober 2009 - 23:23 #16
Hvad er det du ønsker, for som jeg ser det, er det helt galt det du har gang i, men måske du kan forklare hvorfor du forsøger at indsætte settings filen i din side på den måde.
Avatar billede grippen Nybegynder
27. oktober 2009 - 21:30 #17
ja din header() skal skiftes ud med meta tagét jeg skrev.
Avatar billede Slettet bruger
27. oktober 2009 - 21:35 #18
vil du ikke være sød at ændre disse to kodersamlinger, så det er som du mener det skal være, jeg er total blank omkring hvad du siger, har prøvet lidt af hvert nu:

settings.php:



<?php

// Først defineres navn og sti til bruger.php.
// Navnet bruger.php kan du ændre til hvad du nu vil
// Her ligger bruger.php i roden af sitet

$base_file = "/login.php";


// Derefter tjekker vi om det er $base_file som includer settings.php. Hvis ikke, så sendes brugeren til forsiden
// $_SERVER["PHP_SELF"] returnerer stien fra roden af domainet til og med filnavn, uden evt. $_GET variabler
// exit; sørger for at scriptet stopper her

if($_SERVER["PHP_SELF"] != $base_file) {
header("Location:http://". $_SERVER["HTTP_HOST"]);
exit;
}


// Herunder defineres sti og navn til dir med includefiler
// Her er det et underdir til bruger.php
// Filerne kunne godt ligge udenfor "webscope", da de jo includes af bruger.php

$base_dir = "files/";


//$users er et array med brugernavne og tilhørende adgangskode
// Her er password i læsbar tekst for eksemplets skyld.
// En md5() ville være bedre, for alle tilfældes skyld
// F.eks. "admin" => "e3274be5c857fb42ab72d786e281b4b8", "showsource" => "08d91cbe823d208bfc5fd59ae8b43c69"
// echo md5("adminpassword") ." - ". md5("viskode");

$users = array("admin" => "admin", "showsource" => "viskode", "phpbegynder" => "phpnewbie");


//$links er et array med filnavn, uden .php samt tilhørende tekst der vises som link, til de filer som kan includes.
// Her er det kun de to filer, galleri.php og musik.php

$links = array("galleri" => "Vis galleri", "venner" => "Vis vennearkiv");

// $default_file er den fil som includes af bruger.php hvis get ikke er sat,
// eller get ikke findes som key i array'et $links

$default_file = $base_dir ."default.php";

// $cookienavn er navnet på cookie som sættes ved login
// Den indeholder en md5() kryptering af ip adressen brugeren kommer fra.
// Og bruges til at tjekke om den har samme værdi som en md5(session ip)

$cookienavn = "ref";

// Herunder er en funktion til at tjekke om brugeren er logget ind

// Bemærk, for at kunne bruge array'et $users og $cookienavn inde i funktionen, skal de gøres "global"

// Først tjekkes om user og ip er registret med en session samt om der er sat en cookie ved navn ref, og
// om "key" findes i array'et $users ( brugernavnet )
// Og til sidst om session ip er lig med den ip-adresse brugeren kommer fra og
// at md5() af session ip er lig med værdien for cookien $cookienavn

function tjek_login() {

global $users, $cookienavn;

    if(isset($_SESSION["user"], $_SESSION["ip"], $_COOKIE[$cookienavn], $users[$_SESSION["user"]]) && $_SESSION["ip"] == $_SERVER["REMOTE_ADDR"] && md5($_SESSION["ip"]) == $_COOKIE[$cookienavn]) {
    // if sætning kom igennem hertil, så alt er ok, og vi stoppper her, "return true"
    return true;
    }

// if sætningen blev ikke opfyldt, så der returneres false
return false;
}

// Det var de variabler og hjemmelavet funktion vi skal bruge.
// Herefter bruger vi session_start() og kikker efter om POST til login eller log ud er sat

// session_start() først !!!

session_start();


// Hvis brugeren vil logge ud, slettes sessions og cookies, og der redirectes til bruger.php ( $base_file

if(isset($_POST["logud"])) {

    setcookie($cookienavn, "", (time()-3600), "/");
    setcookie(session_name(), "", (time()-3600), "/");

    $_SESSION = array();
    session_destroy();

    header("Location:http://". $_SERVER["HTTP_HOST"] . $base_file);
    exit;

}


// Vil brugeren logge ind ???

if(isset($_POST["brugernavn"], $_POST["password"])) {

// default besked til brugeren ved forkert login
$default_text = "Forkert bruger og/eller password!";


    // Findes brugernavn i array'et $users ???
    if(isset($users[$_POST["brugernavn"]])) {

        // Er værdien af $users[$_POST["brugernavn"] i arrray'et $users, lig med det indtastede password ???
        if($users[$_POST["brugernavn"]] == $_POST["password"]) {

            // Jow, brugernavn og password er korrekt, så registrer session user og ip
            $_SESSION["user"] = $_POST["brugernavn"];
            $_SESSION["ip"] = $_SERVER["REMOTE_ADDR"];

            // Og sæt cookien $cookienavn
            // navn => værdi => levetid => path
            // levetid 0 => så længe vinduet er åbent
            // path = > Her fra roden af domænet
            // ved sletning af cookien, sættes en tom værdi og en tid i datid ( se logud )
            setcookie($cookienavn, md5($_SERVER["REMOTE_ADDR"]), 0, "/");

        }else{

            // Forkert password !!!
            $_SESSION["besked"] = $default_text;

        }


    }else{

    // Forkert brugernavn !!!
    $_SESSION["besked"] = $default_text;

    }

// Send brugeren tilbage til bruger.php
header("Location:http://". $_SERVER["HTTP_HOST"] . $base_file);
exit;

}

?>

<b>index.php</b>

<html>
<head>
<meta http-equiv="refresh" content="0; url=http://sebastianks.wep.dk/" />
<link rel="stylesheet" type="text/css" href="style/style.css">
</head>
<body>

<div id="div1">

<?php
include("login.php");
?>

</div>
<div id="div2">Her skal der være en masse info...</div>
<div id="div3">Her skal din mor være</div>


</body>
</html>
Avatar billede Slettet bruger
27. oktober 2009 - 22:12 #19
har fundet ud af det nu..

Nu kommer den ikke med fejlmeddelelse..

Nu er har jeg bare et andet problem, nemlig:

Nu viser den slet intet i browseren, når jeg går ind på index.php.

Dog viser den loginsystemet hvis jeg går direkte ind på /login.php.

Hvad kan dette være? :)
Avatar billede Slettet bruger
28. oktober 2009 - 19:20 #20
Jeg har lavet scriptet, som det var på, phpbegynder.dk.

Okay helt for fra.

Jeg vil gerne have et lille login system på min side. Og jeg blev da henvist til www.phpbegynder.dk - og der tog jeg det ham gutten havde lavet.

Og da jeg så hittede ud af, hvordan det fungerede - nogenlunde.
Så ville jeg have det sat ind på min forside, så man kunne logge ind på forsiden.

Log ind stedet, skulle så være på forsiden, som sagt - men i en <div></div>, som jeg også har beskrevet før. Men når jeg forsøger at lave en forside med en <div></div> og bruger <?php include('login.php'); - så kommer der bare en blank side, når man går ind på min side. Der er absolut ingenting på siden.

Og lige så snart jeg fjerne det lille stykke PHP, så kan man godt se de andre ting på forsiden.


- Er dette forståeligt? :)

På forhånd tak.
Avatar billede michael_stim Ekspert
28. oktober 2009 - 19:32 #21
Ja, det er fordi der er en fejl i den include fil du har. Prøv at skrive:
error_reporting(E_ALL);
ini_set("display_errors", 1);

OBS. Længst oppe i din php fil, lige efter <?php.
Avatar billede Slettet bruger
28. oktober 2009 - 19:37 #22
Har indsat:
error_reporting(E_ALL);
ini_set("display_errors", 1);

i login.php - men der bliver ikke reporteret noget som helst?
Avatar billede Slettet bruger
28. oktober 2009 - 19:41 #23
Det skal lige siges, at jeg sagtens kan gå ind på, login.php - som fil normalt på min side.

Men lige så snart den bliver som include fil så kan jeg ikke.
Avatar billede michael_stim Ekspert
28. oktober 2009 - 20:11 #24
Er stien rigtig?
Avatar billede Slettet bruger
28. oktober 2009 - 20:17 #25
login.php, ligger samme sted som index.php, så jeg skulle mene der bare skulle skrives include('login.php');
Avatar billede Slettet bruger
10. september 2010 - 11:32 #26
lukker.
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
Kurser inden for grundlæggende programmering

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