Avatar billede naquer Nybegynder
29. januar 2004 - 13:33 Der er 7 kommentarer og
1 løsning

Problemer med SESSION

Jeg har et problem med at jeg ikke kan få mine SESSIONS til at huske det brugeren har indtastet på andre sider:

Jeg har først en side med mine formularer som ser sådan ud:

<div id="navnogalder">

<p>Skriv dit navn og din alder</p>

<form action="side2.php" method="post">

navn: <input type="text" name="navn" value=""><p>
password: <input type="password" name="password" value="" size="10">
<p>
<input type="submit" value="Login">
</form>

</div>

Derefter har jeg den PHP side, som skal behandle inputtet:

<div id="rightmenu">

<?php

$_SESSION["navn"] = $_REQUEST["navn"];
$_SESSION["password"] = $_REQUEST["password"];

if($_SESSION["navn"] == Mikkel && $_SESSION["password"] == mikkel) {
echo "Velkommen tilbage {$_SESSION["navn"]}";
} else {
echo "Brugernavn eller adgangskode er forkert";
}


?>

</div>


Det PHP script includer jeg så i side2.php, som formular dokumentet har 'action' på.
Og det virker perfekt på side 2. Men så snart jeg går fra side 2 til side 3 skriver den bare adgangskode eller brugernavn er forkert, fordi den slet ikke har fat i inputtet mere. Der er præcis det samme på side2 og side3 og begge har:

<?php
session_start();
?>

i toppen, hvad er det jeg gør forkert?
Avatar billede sukos Juniormester
29. januar 2004 - 14:04 #1
Hvad med så'n her:

side1.php:
<?php
session_start();

if(isset($_POST["navn"])) {
    if($_POST["navn"] == "mikkel" && $_POST["password"] == "mikkel") {
    $_SESSION["navn"] = $_POST["navn"];
    header("Location:side2.php");
    exit();
    }else{
    $_SESSION["fejl"] = "Forkert navn eller password";
    header("Location:". $_SERVER["PHP_SELF"] ."");
    exit();
    }
}
?>
<html><head></head>
<body>
<div id="navnogalder">

<p>Skriv dit navn og din alder</p>

<form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post">

navn: <input type="text" name="navn" value=""><p>
password: <input type="password" name="password" value="" size="10">
<p>
<input type="submit" value="Login">
</form>
<?php
if(isset($_SESSION["fejl"])) {
echo $_SESSION["fejl"];
unset($_SESSION["fejl"]);
}
?>
</div>
</body></html>

side2.php:

<?php
session_start();
if(!isset($_SESSION["navn"])) {
header("Location:side1.php");
exit();
}

echo"Hej ". $_SESSION["navn"];

?>
Avatar billede naquer Nybegynder
29. januar 2004 - 15:34 #2
Du bliver lige nød til at forklare mig nogle ting i den kode:
Du har i toppen af scriptet skrevet:

header("Location:side2.php");
    exit();

Hvad sker der så når jeg gerne vil bruge den værdi som brugeren har indtastet i navn, på en anden side end side 2?, skal jeg så skrive  header("Location:side3.php");  i stedet? Og hvad er det egentligt scriptet helt præcist gør?

Jeg har også lidt svært ved at forstå side2.php:

<?php
session_start();
if(!isset($_SESSION["navn"])) {
header("Location:side1.php");
exit();
}


Kan du også beskrive hvad den gør, og om der skal ændres noget?
Håber du gider tage dig tid til det

-Mikkel
Avatar billede sukos Juniormester
29. januar 2004 - 15:50 #3
selvf.
Selve formen submitter til filen som viser formen, og sender derefter brugeren videre, enten til sig selv igen, eller, hvis navn og password er ok, til side2.php


side1.php:
<?php
session_start();

if(isset($_POST["navn"])) { //Er formen submittet?

    if($_POST["navn"] == "mikkel" && $_POST["password"] == "mikkel") { //tjekker hvad brugeren har indtastet
$_SESSION["navn"] = $_POST["navn"]; // Det var ok, så sæt en session
header("Location:side2.php"); //send bruger videre til side2.php
exit(); // Stop script
}else{ // Forkert navn eller pass
$_SESSION["fejl"] = "Forkert navn eller password"; // sæt en session til visning af fejl
header("Location:". $_SERVER["PHP_SELF"] .""); // send tilbage til selvsamme side
exit(); // stop script
}
}
?>
<html><head></head>
<body>
<div id="navnogalder">

<p>Skriv dit navn og din alder</p>

<form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post">

navn: <input type="text" name="navn" value=""><p>
password: <input type="password" name="password" value="" size="10">
<p>
<input type="submit" value="Login">
</form>
<?php
if(isset($_SESSION["fejl"])) { // Er en session sat, så vis indholdet, og slet den, unset()
echo $_SESSION["fejl"];
unset($_SESSION["fejl"]);
}
?>
</div>
</body></html>

side2.php:

<?php
session_start();
if(!isset($_SESSION["navn"])) { // hvis ikke session er sat, send bruger til side1.php
header("Location:side1.php");
exit();
}

echo"Hej ". $_SESSION["navn"]; Output indhold af session navn

?>


Dette,

<?php
session_start();
if(!isset($_SESSION["navn"])) { // hvis ikke session er sat, send bruger til side1.php
header("Location:side1.php");
exit();
}
?>

kan du jo så med fordel lave til en fil du includer på alle sider hvor man skal være logget ind for at se siden.
Avatar billede naquer Nybegynder
29. januar 2004 - 16:34 #4
jeg forsår stadigvæk ikke helt hvad det er jeg skal include på mine andre sider, for at den husker at man er logget ind. Kan du give et eksempel på hvordan man kan lave en fil, hvor man skal være logget ind for at kunne se den?
Avatar billede sukos Juniormester
29. januar 2004 - 16:38 #5
tjek.php :

<?php
session_start();
if(!isset($_SESSION["navn"])) { // hvis ikke session er sat, send bruger til side1.php
header("Location:side1.php");
exit();
}
?>

De sider du så ønsker at beskytte, starter du alle med:
<?php
include("tjek.php");
?>
resten af din side.........................

tjek.php tjekker så blot om en session "navn" er sat, og er den ikke det, så sendes man til side1.php med login formen.

Husk, at når du bruger en header() så skal den komme før du laver noget output, ellers får du en fejl.
Avatar billede sukos Juniormester
29. januar 2004 - 16:39 #6
Du kan osse prøve at lege lidt med det du kan finde her:

http://www.showsource.dk/php/?list=Login
Avatar billede naquer Nybegynder
29. januar 2004 - 19:07 #7
Ok. Hvad så hvis jeg har en side, hvor man på forsiden skal skrive sit navn, og jeg derefter vil have mulighed for at bruge navnet på andre sider, hvad gør jeg så?
Tror det er lidt mere simpelt, så kunne være jeg kunne forstå det 100% så.
I øvrigt mange tak for de andre svar.
Avatar billede naquer Nybegynder
17. august 2011 - 20:45 #8
Lukket
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