Avatar billede mr_miyagi Nybegynder
28. oktober 2014 - 11:48 Der er 7 kommentarer og
1 løsning

session resser sig selv efter postback

Jeg sidder og roder med sessions variabler i php, men af en eller anden grund resetter den session når jeg prøver at lave en reload af siden og kan ikke finde ud af hvad det er, håber der er nogle herinde som kan se hvad problemet skyldes:
jeg starter med at lave en session_start(); og checker herefter om sessionen er tom og hvis den er tom skal den sættes ellers skal den bare læses ind.

Se venligst bort fra at login formen er elendig lavet, nedenstående er kun et eksempel(er igang med at lære PHP).

<html>
<head>
    <title></title>
</head>
<body>
<form action="test.php" method="post">
<?php
session_start();
echo     "session: " . $_session["password"];

if (!isset($_session["password"]))
{
?>
<div style="clear:both">Login username: <input type="text" width="500px" id="txtusername" value=""></div>
<div style="clear:both">Login password: <input type="password" width="500px" id="txtpassword" value=""></div>
<div style="clear:both"><input type="submit" name="login" value="Login" /></div>
<?php
        if($_POST['password'] == "qwerty")
        {
            $_session["password"] = $_POST['password'];
            location.reload();
        }
    }
    else
    {
        echo("hurra du har nu gemt noget i sessionen");
}
?>
</form>
</body>
</html>
Avatar billede moddi100 Seniormester
28. oktober 2014 - 12:00 #1
Det er fordi du mangler et kald til session_start() øverst på din side, altså før der udskrives noget andet. Din kode skal være således:

<?php session_start();?>
<html>
<head>
    <title></title>
...
Avatar billede mr_miyagi Nybegynder
28. oktober 2014 - 13:06 #2
Jeg har lige prøvet at flytte session_start(); op i toppen men sessionen bliver stadig resettet

koden ser nu sådan ud.
<?php session_start(); ?>
<html>
<head>
    <title></title>
</head>
<body>
<form action="test.php" method="post">
<?php
echo    "session: " . $_session["password"];

if (!isset($_session["password"]))
{
?>
<div style="clear:both">Login username: <input type="text" width="500px" id="txtusername" value=""></div>
<div style="clear:both">Login password: <input type="password" width="500px" id="txtpassword" value=""></div>
<div style="clear:both"><input type="submit" name="login" value="Login" /></div>
<?php
        if($_POST['password'] == "123")
        {
            $_session["password"] = $_POST['password'];
            location.reload();
        }
    }
    else
    {
        echo("hurra du har nu gemt noget i sessionen");
}
?>
</form>
</body>
</html>
Avatar billede moddi100 Seniormester
28. oktober 2014 - 13:33 #3
Derudover er der to ting jeg lige spotter:

1) $_SESSION skal være med store bogstaver - ikke små som du har angivet.

2) Der er ikke noget i PHP som hedder "location.reload();". Dette hører til javascript. Ønsker du derfor at anvende PHP til det, skal du bruge funktionen header() - som igen skal være før du udskriver noget indhold.

Se her:
<?php session_start();

// isset() bruges til at kontrollere om en variabel eksisterer
if(isset($_POST['password']))
{
    if($_POST['password'] == "123")
    {
        $_SESSION["password"] = $_POST['password'];

        // Her sender vi brugeren til en ny side $_SERVER['PHP_SELF'] refererer til denne fil
        header("Location: " . $_SERVER['PHP_SELF']);
        exit;
    }
}
?>
<html>
<head>
    <title></title>
</head>
<body>
<form action="test.php" method="post">
<?php
echo "session: " . $_SESSION["password"];

if (!isset($_SESSION["password"]))
{
    ?>
    <div style="clear:both">Login username: <input type="text" width="500px" id="txtusername" value=""></div>
    <div style="clear:both">Login password: <input type="password" width="500px" id="txtpassword" value=""></div>
    <div style="clear:both"><input type="submit" name="login" value="Login" /></div>
    <?php
}
else
{
    echo "hurra du har nu gemt noget i sessionen";
}
?>
</form>
</body>
</html>
Avatar billede mr_miyagi Nybegynder
28. oktober 2014 - 14:24 #4
jeg har lige prøvet koden, kan godt se at Dreamweaver genkender session efter jeg har ændret det til store bogstaver :), men syntes stadig ikke at den gemmer sessionen, er der et eller andet jeg mangler for at sessionen bliver sat?


jeg forsøger på at skrive sessionen ud her
echo "session: " . $_SESSION["password"];
men den er tom
Avatar billede moddi100 Seniormester
28. oktober 2014 - 15:54 #5
Du kan lave en helt simpel test-side:

<?php

// Start
session_start();

if(isset($_SESSION['test']))
{
  echo "Session har værdien: " . $_SESSION['test'];

  // Vi ligger 1 til værdien af vores variabel
  $_SESSION['test'] += 1;
} else {
  echo "Session sat";

  $_SESSION['test'] = 1;
}
?>
Avatar billede moddi100 Seniormester
28. oktober 2014 - 16:00 #6
Ahh, spottede lige fejlen i din egen kode. Årsagen er, at du i dine input-felter ikke har givet dem et navn:

// Følgende skal rettes
    ?>
    <div style="clear:both">Login username: <input type="text" width="500px" id="txtusername" value=""></div>
    <div style="clear:both">Login password: <input type="password" width="500px" id="txtpassword" value=""></div>
    <div style="clear:both"><input type="submit" name="login" value="Login" /></div>
    <?php

// Til dette
?>
    <div style="clear:both">Login username: <input type="text" width="500px" id="txtusername" name="username" value=""></div>
    <div style="clear:both">Login password: <input type="password" width="500px" id="txtpassword" name="password" value=""></div>
    <div style="clear:both"><input type="submit" name="login" value="Login" /></div>
    <?php


Derudover skal du også kigge lidt på det grundliggende HTML i din form med f.eks.
width="500px"

som de færreste browsere i dag anvender. Man er gået over til inline-css som laves således:
<input style="width: 500px; height: 50px">


NB: Husk også at kigge på det angivne brugernavn, som du faktisk ikke anvender i dag. Lige nu skal du blot skrive rigtig adgangskode ;)
Avatar billede mr_miyagi Nybegynder
29. oktober 2014 - 13:57 #7
Normalt sidder jeg og arbejder med bootstrap og CSS når jeg arbejder med html og skal lave noget responsive design, men i dette tilfælde er det noget som kun skal køre lokalt på min maskine så har ikke gidet at bruge tid på at sætte CSS op.

damn, det var bare name der skulle til (sidder normalt med C# og asp.net så er vand til ID'er). :)

super nu virker det.
Takker mange gange hjælpen moddi100
sender du ikke lige et svar så smider jeg nogle point efter dig
Avatar billede moddi100 Seniormester
29. oktober 2014 - 18:43 #8
Ja det der med at springe fra sprog til sprog, kan godt give lidt hovedpine en gang imellem :)
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

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