Toon posts:

Sessie gegevens zijn verloren na nieuwe submit (PHP)

Pagina: 1
Acties:

Vraag


  • 34Miles
  • Registratie: November 2010
  • Laatst online: 01-06 10:57
Het probleem / de vraag:

Probleem:
Wanneer ik van de pagina registeer.php naar registreer2.php gaat worden de gegevens netjes weergeven in het formulier van registreer2.php.

Maar met het formulier op de pagina registreer2.php kan je nog wat extra gegevens toevoegen.
Wanneer je op de submit klikt van de pagina registreer2.php zijn alle sessie gegevens van de de pagina registreer.php verdwenen.

Dit zie je ook aan de velden die veranderen van velden met info naar velden met undifined info na dat er op submit1 word geklikt.

Mijn vraag is:
Hoe verhelp ik dit :)

Relevante software en hardware die ik gebruik
Xampp met PHPstorm


Wat ik al gevonden of geprobeerd heb
met 'gewone' $_POST data in plaats van sessie en Google doorgeworsteld

Ter info deze pagina heeft de naam: registreer2.php en de header is verwijderd om beetje overzicht te bewaren

Hoe ik dit nu probeer :X
PHP: registeren
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
<?php
//Wanneer het huidige formulier word gesubmit
if (isset($_POST['submit'])) {
    session_start();
    session_unset();
    session_destroy();
    setcookie(session_name(),'',0,'/');
    session_regenerate_id(true);
    $_SESSION['POST']=$_POST;
    //Sessie variabele werkt hier prima!
    echo $_SESSION['POST']['achternaam'];
}

if (isset($_POST['submit1'])) {
    ////Sessie variabele werkt hier NIET!
    session_start();
    echo $_SESSION['POST']['achternaam'];
    }
?>

<body class="login">

<div class="login_wrapper">

    <img src="images/logo.png" class="col-md-12">
    <div class="col-md-12">
        <div class="animate form login_form">
            <section class="login_content">
                <form method="post" action="registreer2.php">
                    <div class="form-group">
                        <h1>Registeren</h1>
                        <div class="form-group col-lg-12">
                            <label class="alignleft">Registratie als:</label>
                            <input type="text" class="form-control" disabled="disabled" value='<?php echo $_SESSION['POST']['type']; ?>'>
                        </div>
                        <div class="col-lg-6">
                            <label class="alignleft">Voornaam</label>
                            <input type="text" class="form-control" disabled="disabled" value='<?php echo $_SESSION['POST']['voornaam']; ?>'>
                        </div>
                        <!-- Sessie variable werkt hier ook prima -->
                        <div class="col-lg-6">
                            <label class="alignleft">Achternaam</label>
                         <input type="text" class="form-control" disabled="disabled" placeholder='<?php echo $_SESSION['POST']['achternaam']; ?>'>
                        </div>
                        <div class="col-lg-12">
                            <label class="alignleft">e-mail</label>
                            <input type="email" class="form-control" disabled="disabled" value='<?php echo $_SESSION['POST']['email']; ?>'>
                            <hr>
                        </div>

                        <div class="col-lg-12">
                            <input type="text" class="form-control" placeholder="Adres" id="adres" name="adres">
                        </div>

                        <div class="col-lg-6">
                            <input type="text" class="form-control" placeholder="Postcode">
                        </div>

                        <div class="col-lg-6">
                            <input type="text" class="form-control" placeholder="Woonplaats">
                        </div>

                        <div class="checkbox col-lg-12">
                            <label>
                                <input type="checkbox">Ik ga akkoord met de <a href="#"><b>Algemene voorwaarden</b> </a>
                            </label>
                        </div>

                        <div>
                            <!-- Dit is de submit1 die de echo $_SESSION['POST']['Achternaam'] nog een x start via:  if (isset($_POST['submit1'])) { -->
                            <!-- En die werkt helaas niet -->
                            <input type="submit" id="submit1" name="submit1" value="Account aanmaken"
                                   class="btn btn-primary">
                        </div>

                    </div>

                </form>
            </section>
        </div>
    </div>
</div>
</body>
</html>



Mijn dank is groot _/-\o_

[Voor 15% gewijzigd door 34Miles op 11-02-2017 20:07. Reden: Iets duidelijkere code]

Beste antwoord (via 34Miles op 11-02-2017 20:36)


  • RagingPenguin
  • Registratie: December 2012
  • Niet online
34Miles schreef op zaterdag 11 februari 2017 @ 19:58:
@wttj Toch als ik de write_close verwijder blijft het zelfde probleem bestaan, ik heb de writeclose verwijderd zie startpost.
Omdat je ook nog een session_destroy() aanroept voordat je naar de $_SESSION schrijft. Na deze functie gedraagt $_SESSION zich ook weer als een 'gewone' variable en wordt er niets meer naar de session geschreven.

Daarbij doe je ook nog setcookie(session_name(),'',0,'/') voor je session_regenerate_id(true); wat de eerste weer compleet ongedaan maakt. (Dit breekt echter je schript niet, maar is wel een logica fout)

De session_unset() doet in je code niets verkeerds, maar is een beetje nutteloos als je alleen een waarde naar de session wil schrijven (je kan sessionwaardes zonder probleem overschrijven). Al wordt je code groter en sla je meer op in de session kan dit zelfs voor dataloss zorgen

Bottomline: Lees alle gelinkte docs over de $_SESSION nog eens door en probeer te beredeneren waarom je iets nodig zal hebben. Op dit moment heb je een hele hoop session-gerelateerde code waarvan de meeste alleen maar conflicteert met de rest.

Alle reacties


  • Osxy
  • Registratie: Januari 2005
  • Laatst online: 07:13

Osxy

Holy crap on a cracker

Bij het uitlezen van de session data moet de session ook gestart zijn. Dus "session_start();" voor regel 19 en het zou moeten werken.

"Divine Shields and Hearthstones do not make a hero heroic."


  • 34Miles
  • Registratie: November 2010
  • Laatst online: 01-06 10:57
Hallo Osxy, bedankt voor je hulp maar helaas werkt dat niet :'(

Ik heb de session_start(); voor de zekerheid nu wel toegevoegd!

Helaas blijft deze melding bij de echo van regel 19
Notice: Undefined index: POST in C:\xampp\htdocs\..\production\registreer2.php on line 48

[Voor 13% gewijzigd door 34Miles op 14-02-2017 19:11. Reden: kwam een beetje boos over]


  • RedHat
  • Registratie: Augustus 2000
  • Laatst online: 01-06 20:52
Print de session variabele en kijk wat er wel en niet in zit.

Kan geloof ik met var_dump()

[Voor 20% gewijzigd door RedHat op 11-02-2017 19:35]


  • 34Miles
  • Registratie: November 2010
  • Laatst online: 01-06 10:57
Dat de sessie er niet is

echo var_dump($_SESSION['POST']) de regel boven voor het commando (de code hierboven op regel 18):
echo $_SESSION['POST']['achternaam'];

gaf het volgende resultaat:

Notice: Undefined index: POST in C:\xampp\htdocs\...\production\registreer2.php on line 42
NULL

Dus dat betekent geen data meer aanwezig :(

  • RagingPenguin
  • Registratie: December 2012
  • Niet online
je probeert nog data naar je $_SESSION te schrijven terwijl je al session_write_close() hebt aangeroepen. Session_write_close sluit de session en schrijft de data weg naar je file met de data. Al schrijft je hierna nog naar de session dan wordt deze dat niet meer weggeschreven naar de file en werkt $_SESSION hetzelfde als een 'gewone' variable.

  • moijamie
  • Registratie: Augustus 2013
  • Laatst online: 31-05 23:03
En beetje off topic en waarschijnlijk niet relevant voor jou project maar wel handig dat je het weet. Als je doet wat je nu doet heb je overal XSS (cross site scripting) gebruikers kunnen hiermee Javascript code wat je natuurlijk niet wilt. Je kan dit vookomen door de user input sanitized met bijvoorbeeld htmlspecialchars($string, ENT_QUOTES, 'UTF-8').

const { signature } = await fetchProfile()


  • 34Miles
  • Registratie: November 2010
  • Laatst online: 01-06 10:57
@wttj Toch als ik de write_close verwijder blijft het zelfde probleem bestaan, ik heb de writeclose verwijderd zie startpost

@moijamie bedankt ik ga mijzelf hier zeker nog eens verder in verdiepen als ik dit wat beter beheers :)

[Voor 11% gewijzigd door 34Miles op 11-02-2017 20:01]


Acties:
  • Beste antwoord
  • +1Henk 'm!

  • RagingPenguin
  • Registratie: December 2012
  • Niet online
34Miles schreef op zaterdag 11 februari 2017 @ 19:58:
@wttj Toch als ik de write_close verwijder blijft het zelfde probleem bestaan, ik heb de writeclose verwijderd zie startpost.
Omdat je ook nog een session_destroy() aanroept voordat je naar de $_SESSION schrijft. Na deze functie gedraagt $_SESSION zich ook weer als een 'gewone' variable en wordt er niets meer naar de session geschreven.

Daarbij doe je ook nog setcookie(session_name(),'',0,'/') voor je session_regenerate_id(true); wat de eerste weer compleet ongedaan maakt. (Dit breekt echter je schript niet, maar is wel een logica fout)

De session_unset() doet in je code niets verkeerds, maar is een beetje nutteloos als je alleen een waarde naar de session wil schrijven (je kan sessionwaardes zonder probleem overschrijven). Al wordt je code groter en sla je meer op in de session kan dit zelfs voor dataloss zorgen

Bottomline: Lees alle gelinkte docs over de $_SESSION nog eens door en probeer te beredeneren waarom je iets nodig zal hebben. Op dit moment heb je een hele hoop session-gerelateerde code waarvan de meeste alleen maar conflicteert met de rest.

  • 34Miles
  • Registratie: November 2010
  • Laatst online: 01-06 10:57
@wttj super bedankt voor je antwoord nu werkt het :)

Conclusie: hoe ik het eerst deed de data werd wel in het formulier geplaatst maar werd daarna direct verwijderd.
Pagina: 1


Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee