[PHP] Sessie variabelen niet mee

Pagina: 1
Acties:
  • 176 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb een probleem met mijn sessie variabelen. Ik ben nieuw met sessies en heb mijn pagina's opgebouwd adhv tutorials en voorbeelden. Toen het niet bleek te werken ben ik gaan lezen over sessies op php.net en op verschillende forums (waaronder hier). Maar na bijna 2 dagen lukt het nog steeds niet en wil ik het toch eens vragen.

Mijn situatie:
Ik heb een klantenbeheersysteem en wil graag gaan zoeken op klanten. Het form hiervoor is klant.php. Aangezien het mogelijk is om meerdere klanten te vinden (jan en piet op de kerkstraat bijv.) maar ik wel iedere klant een eigen pagina wil geven moeten de criteria van het form opgeslagen worden om zo later de query nogmaals te kunnen uitvoeren. Dit doe ik dus met een sessie in zoekvelden_opslaan.php. Hierna gaat de gebruiker (nu nog niet automatisch omdat ik nog wat info uit deze pagina wil hebben voor het debuggen) naar klant_weergeven.php. Deze pagina zoekt in de database en laat de resultaten zien.
Toen het niet helemaal bleek te werken dacht ik dat ik de sessie telkens moest verwijderen bij een nieuwe zoekopdracht. Dit heb ik eerst gedaan door session_destroy(); in klant.php te zetten (werkte niet), toen door een nieuwe pagina te maken (destroy.php, bevat enkel session_start(); en session_destroy();). Dit werkte wel, maar toen ik deze wilde includen in klant.php werkte het weer niet. Ook toen ik deze pagina voor klant.php stopte en met een meta automatisch naar klant.php doorstuurde wilde het ineens niet meer werken. Handmatig die pagina oproepen werkt wel, en wonderbaarlijk genoeg werken dan ook de rest van de pagina's.
Toen dacht ik dat het dus aan de sessie_id lag. Ik vermoede dat die telkens overnieuw gestart werden en heb voor het gemak de sessie_id's laten zien op alle pagina's en inderdaad deze verschillen. Nu wil ik dus graag ervoor zorgen dat het id wordt meegenomen. Hier gaat het fout. Het lukt maar niet om dit aan de praat te krijgen.
Overigens, alle pagina's worden include in index.php. Deze pagina bevat ook een session_start(). Ik zal ongetwijfeld fouten maken bij het aanroepen van de sessies.

index.php:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?PHP
session_start();
?>

<?php
    switch($_GET['action']) {
        
        // ------ KLANT -------
        case 'klant':
            include("content/klant/klant.php");
            break;
    }
    ?>
Er zit nog meer in de index.php (bijv. de navigatie e.d. maar deze lijkt mij niet zo interessant. Mocht die toch nodig zijn wil ik 'm graag posten

klant.php:
code:
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
<?php
//include("destroy.php");
        $deSessionId = session_id(); 
        echo "sessie_id = $deSessionId";
echo    "<H1>Klant gegevens zoeken</H1>".
        "<FORM action=\"{$_SERVER['PHP_SELF']}?action=opslaan_zoekvelden&$deSessionId\" method=POST>" .
        "<table width=\"57%\" border=\"0\">" .
            "<tr>" .
                "<td>&nbsp;Klantnummer:</td><td><input type=\"text\" size=\"61\" name=\"klant_id\"></td>" .
            "</tr>" .
            "<tr>" .
                "<td>&nbsp;Naam:</td><td><input type=\"text\" size=\"61\" name=\"naam\"></td>" .
            "</tr>" .
            "<tr>" .
                "<td>&nbsp;Adres:</td><td><input type=\"text\" size=\"50\" name=\"straat\">&nbsp;<input type=\"text\" size=\"6\" name=\"huisnummer\"></td>" .
            "</tr>" .
            "<tr>" .
                "<td>&nbsp;Postcode:</td><td><input type=\"text\" size=\"7\" name=\"postcode\">&nbsp;&nbsp;Woonplaats:" .
                "<input type=\"text\" size=\"39\" name=\"woonplaats\"></td>" .
            "</tr>" .
            "<tr>" .
                "<td>&nbsp;Telefoon:</td><td><input type=\"text\" size=\"20\" name=\"telefoon\">" .
                "&nbsp;Fax :<input type=\"text\" size=\"20\" name=\"fax\"></td>" .
            "</tr>" .
            "<tr>" .    
                "<td>&nbsp;E-mail:</td><td><input type=\"text\" size=\"61\" name=\"email\"></td>" .
            "</tr>" .
            "<tr>" .        
                "<td>&nbsp;Actief:</td><td><input type=\"radio\" name=\"actief\" value=\"Ja\">Ja <input type=\"radio\"name=\"actief\" value=\"Nee\">Nee</td>" .
            "</tr>" .
            "<tr>" .                                             
                "<td><input type=\"submit\" name=\"submit\" value=\" Zoek \"></td>" .
            "</tr>" .
            "<tr>" .
                "<td>&nbsp;</td>" .
            "</tr>" .
            "<tr>" .
                "<td><a href=\"{$_SERVER['PHP_SELF']}?action=klantinvoeren\">Nieuwe klant invoeren</a></td>" .
            "</tr>" .
        "</TABLE>" .
        "</FORM>";

?>


opslaan_zoekvelden.php
code:
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
<?PHP 
session_id($_GET['session_id']);
session_start();

        $deSessionId = session_id(); 
        echo "sessie_id = $deSessionId";

//omzetten van de ingevulde velden naar de sessievelden.
$ses_klant_id = "$_POST[klant_id]";
$ses_naam = "$_POST[naam]";
$ses_straat = "$_POST[straat]";
$ses_huisnummer = "$_POST[huisnummer]";
$ses_postcode = "$_POST[postcode]";
$ses_plaats = "$_POST[plaats]";
$ses_telefoon = "$_POST[telefoon]";
$ses_fax = "$_POST[fax]";
$ses_email = "$_POST[email]";
$ses_actief = "$_POST[actief]";

// opslaan van de sessievelden, let op: zonder $
session_register("ses_klant_id");
session_register("ses_naam");
session_register("ses_straat");
session_register("ses_huisnummer");
session_register("ses_postcode");
session_register("ses_plaats");
session_register("ses_telefoon");
session_register("ses_fax");
session_register("ses_email");
session_register("ses_actief");

//echo "<META http-equiv=\"Refresh\" content=\"0; URL={$_SERVER['PHP_SELF']}?action=klantweergeven\">"; 
    //"Een moment geduld aub, u wordt doorgelinkt naar de volgende pagina.<br> "
echo        "Klik <a href=\"{$_SERVER['PHP_SELF']}?action=klantweergeven&$deSessionId\">hier</a>."; 

echo "straat =$ses_straat<br>"; 

        
?>


klant_weergeven.php:
code:
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
<?PHP
session_id($_GET['session_id']); 
session_start();

// Connectie maken met de database
include("classes/databaseconnectie.php");
  
$limiet=1; // Stel max. aantal resultaten per pagina in 
$deze_pagina= "index.php?action=klantweergeven"; //defineer pagina-naam of gebruik  $PHP_SELF  

//----------- QUERY OPBOUWEN ------------
// de basis van de query
$zoek_query = "SELECT * FROM klant WHERE global = '1'"; 


// is klant_id leeg? zo nee, zoek op klant_id in de tabel
if ($ses_klant_id <> '')
{
$zoek_query = "$zoek_query AND klant_id LIKE '$ses_klant_id' ";
}

// is naam leeg? zo nee, zoek op naam in de tabel
if ($ses_naam <> '')
{
$zoek_query = "$zoek_query AND naam LIKE '%$ses_naam%' ";
}

// is straat leeg? zo nee, zoek op straat in de tabel
if ($ses_straat <> '')
{
$zoek_query = "$zoek_query AND straat LIKE '%$ses_straat%' ";
}

// is huisnummer leeg? zo nee, zoek op huisnummer in de tabel
if ($ses_huisnummer <> '')
{
$zoek_query = "$zoek_query AND straat LIKE '%$ses_huisnummer%' ";
}

// is postcode leeg? zo nee, zoek op postcode in de tabel
if ($ses_postcode <> '')
{
$zoek_query = "$zoek_query AND straat LIKE '%$ses_postcode%' ";
}

// is plaats leeg? zo nee, zoek op plaats in de tabel
if ($ses_plaats <> '')
{
$zoek_query = "$zoek_query AND straat LIKE '%$ses_plaats%' ";
}

// is telefoon leeg? zo nee, zoek op telefoon in de tabel
if ($ses_telefoon <> '')
{
$zoek_query = "$zoek_query AND straat LIKE '%$ses_telefoon%' ";
}

// is fax leeg? zo nee, zoek op fax in de tabel
if ($ses_fax <> '')
{
$zoek_query = "$zoek_query AND straat LIKE '%$ses_fax%' ";
}

// is email leeg? zo nee, zoek op email in de tabel
if ($ses_email <> '')
{
$zoek_query = "$zoek_query AND straat LIKE '%$ses_email%' ";
}

// is actief leeg? zo nee, zoek op actief in de tabel
if ($ses_actief <> '')
{
$zoek_query = "$zoek_query AND straat LIKE '%$ses_actief%' ";
}

//----------- EINDE QUERY OPBOUWEN ------------

$numresults = mysql_query($zoek_query); 
$aantal = mysql_num_rows($numresults); //tel aantal resultaten vd zoekopdracht 

$paginas=intval($aantal/$limiet); // bereken aantal pagina's met resultaten 
if ($aantal%$limiet) //als aantal veelvoud is van de limiet, 1 pagina erbij op tellen 
    { 
    $paginas++; 
    } 

if ($aantal !="0") 
    { 
    if (empty($_GET["offset"])) 
        { 
        $offset=0; 
        } 
    else 
        { 
        $offset = $_GET["offset"]; 
        } 
    }
    
    // doe zoekopdracht nogmaals met offset en limiet
    $zoek_query =$zoek_query." LIMIT $offset,$limiet";  
    $zoek_result = mysql_query($zoek_query); 

    // bouw de resultaten op
    while ($zoek_result_row = mysql_fetch_array($zoek_result))
        { 


    echo    "<h1> Klant </h1>";    
    echo    "straat = $ses_straat<br>"; 
    echo    "<table border=\"1\" width=\"90%\" align=\"center\">".
            "<tr>".
            "<td>";
    echo    "<table border=\"0\">" ;
    echo    "<tr>" .
            "<td>Klantnummer: </td><td colspan=\"3\">{$zoek_result_row['klant_id']}</td>" .
            "</tr>".
            "<td>Naam: </td><td colspan=\"3\">{$zoek_result_row['naam']}</td>" .
            "</tr>".
            "<td>Adres: </td><td colspan=\"2\">{$zoek_result_row['straat']}</td>" .
            "<td>{$zoek_result_row['huisnummer']}</td>" .
            "</tr>".
            "<td>Postcode: </td><td>{$zoek_result_row['postcode']}</td>" .
            "<td>&nbsp;</td><td>{$zoek_result_row['plaats']}</td>" .
            "</tr>".
            "<td>Telefoonnummer: </td><td colspan=\"3\">{$zoek_result_row['telefoon']}</td>" .
            "</tr>".
            "</tr>".
            "<td>Fax: </td><td colspan=\"3\">{$zoek_result_row['fax']}</td>" .
            "</tr>".
            "</tr>".
            "<td>E-mail: </td><td colspan=\"3\">{$zoek_result_row['email']}</td>" .
            "</tr>".
            "</tr>".
            "<td>Actief: </td><td colspan=\"3\">{$zoek_result_row['actief']}</td>" .
            "</tr>" ;
    echo    "</table>" ;
    echo    "</td>".
            "<td>";
    echo    "<h3> Klant geschiedenis </h3>".
            "<a href=\"javascript:factuur_open()\">Facturen</a><br>".
            "Eerdere problemen<br>".
            "To-do's<br>".
            "Binnenbonnen<br>".
            "Buitenbonnen<br>".
            "Mailings<br>".
            "Overzicht hardware";
    echo    "</td>".
            "</tr>".
            "</table>";
$_SESSION['klant_id'] = $zoek_result_row['klant_id']; 
        }
        $deSessionId = session_id(); 
        echo "sessie_id = $deSessionId<br>";
        echo $_SESSION['klant_id'];       
// Hieronder wordt Vorige | nummering | Volgende gecreëerd 

if ($aantal > $limiet) 
        { 
        if ($offset!=0) // indien niet eerste pagina, druk "Vorige" af 
            { 
            $vorige_offset=$offset-$limiet; 
            print "<a href=\"$deze_pagina&offset=$vorige_offset\">Vorige</a> |\n"; // & was ?
            } 
        for ($i=1;$i<=$paginas;$i++) // de nummering van de pagina's wordt hier afgedrukt 
            { 
            $nieuwe_offset=$limiet*($i-1); 
            if ($nieuwe_offset==$offset) // indien huidige pagina, dan vet afdrukken 
                { 
                print "<a href=\"$deze_pagina&offset=$nieuwe_offset\"><b>$i</b></a> |\n"; // & was ?
                } 
            else 
                { 
                print "<a href=\"$deze_pagina&offset=$nieuwe_offset\">$i</a> |\n"; // & was ?
                } 
            } 
        if (!(round($offset/$limiet)==$paginas-1) && $paginas!=1) 
            //volgende afdrukken (behalve indien laatste pagina of bij maar 1 pagina) 
            { 
            $nieuwe_offset=$offset+$limiet; 
            print "<a href=\"$deze_pagina&offset=$nieuwe_offset\">Volgende</a>\n"; // & was ?
            } 
        } 
?>

Acties:
  • 0 Henk 'm!

  • Spooksel
  • Registratie: Oktober 2000
  • Laatst online: 17:27

Spooksel

Spooksel!

session_start(); in klant .php?

Bevalt mijn schrijfsel je niet? www.korrelatie.nl


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Spooksel schreef op 27 april 2004 @ 11:03:
session_start(); in klant .php?
Dat heb ik ook geprobeerd, zou opzich wel moeten denk ik he?
maar het werkt alsnog niet.

Acties:
  • 0 Henk 'm!

  • intermusic
  • Registratie: September 2002
  • Laatst online: 25-03 14:05

intermusic

Marc Hoekstra

ik heb niet de complete tekst gelezen, maar ik geloof dat je niet gebruik moet maken van een META-refresh als je gebruik maakt van sessies... Dit 'kan' verkeerd gaan.

En je kan het beste geen gebruik meer maken van: session_register("ses_plaats");
enz.
Hiervoor is PHP vernieuwd en kan je beter gebruik maken van:
$_SESS('ses_plaats') = "Leeuwarden";

[ Voor 39% gewijzigd door intermusic op 27-04-2004 11:12 ]


Acties:
  • 0 Henk 'm!

  • Spooksel
  • Registratie: Oktober 2000
  • Laatst online: 17:27

Spooksel

Spooksel!

Ik heb vroeger wel eens problemen gehad met sessievariabelen omdat ik nog op dezelfde pagina als de 1e sessie_start(); probeerde variabelen op te roepen.

Misschien ff een pagina refresh inbouwen, of standaard beginnen met een pagina die je sessie opzet?

Die sessie_start(); in klant.php kan niet zie ik net omdat je klant.php include in een pagina die zelf wel met sessie_start(); begint...

Edit: Intermusic beats me to it!

[ Voor 5% gewijzigd door Spooksel op 27-04-2004 11:12 ]

Bevalt mijn schrijfsel je niet? www.korrelatie.nl


Acties:
  • 0 Henk 'm!

  • SWINX
  • Registratie: Juni 2001
  • Laatst online: 23-07 18:19
intermusic schreef op 27 april 2004 @ 11:10:
$_SESS('ses_plaats') = "Leeuwarden";
moet toch zo?

$_SESSION["ses_plaats"] = "Leeuwarden";

Mannen komen van Mars Tweakers, vrouwen van Venus Bokt


Acties:
  • 0 Henk 'm!

  • intermusic
  • Registratie: September 2002
  • Laatst online: 25-03 14:05

intermusic

Marc Hoekstra

Spooksel schreef op 27 april 2004 @ 11:11:
Ik heb vroeger wel eens problemen gehad met sessievariabelen omdat ik nog op dezelfde pagina als de 1e sessie_start(); probeerde variabelen op te roepen.

Misschien ff een pagina refresh inbouwen, of standaard beginnen met een pagina die je sessie opzet?

Die sessie_start(); in klant.php kan niet zie ik net omdat je klant.php include in een pagina die zelf wel met sessie_start(); begint...

Edit: Intermusic beats me to it!
Jah dan start je een nieuwe sessie als je net alle variabelen in de sessie hebt gezet die dan weer weg is.

En het is idd: $_SESSION["ses_plaats"] = "Leeuwarden"; (scuse me)

[ Voor 8% gewijzigd door intermusic op 27-04-2004 11:15 ]


Acties:
  • 0 Henk 'm!

  • Spooksel
  • Registratie: Oktober 2000
  • Laatst online: 17:27

Spooksel

Spooksel!

Nee je start niet een sessie WEER opnieuw, een setup pagina zal namelijk niet refreshen naar zichzelf he :P (Tenzij je daartoe een reden ziet)

[ Voor 98% gewijzigd door Spooksel op 27-04-2004 11:16 ]

Bevalt mijn schrijfsel je niet? www.korrelatie.nl


Acties:
  • 0 Henk 'm!

  • sjoerdb2
  • Registratie: Juli 2001
  • Laatst online: 09-05 09:52

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ok, update:
Ik heb alle: $ses_plaats = "$_POST[plaats]"; samen met: session_register("ses_plaats");
omgezet naar: $_SESSION['ses_plaats'] = $_POST[plaats];

Verder heb ik uit alle pagina's session_start() gehaald, behalve uit de index.php.
Het werkt nog steeds niet.

Als ik session_id($_GET['session_id']); voor session_start() in de index.php zet krijg ik helemaal geen session_id meer. Moet dit er wel of niet in? zo ja, dan doe ik namelijk ergens anders weer iets fout.

Iemand nog ideeen?

Edit:
Wat ik eigenlijk heel vreemd vind is dat het wel allemaal werkt als ik handmatig de destroy pagina oproep:
code:
1
2
3
4
5
<?PHP
session_start();
session_destroy();
echo "<META http-equiv=\"Refresh\" content=\"0; URL=URL?action=klantzoeken\">"; 
?>

Iemand die mij kan uitleggen hoe het komt dat het dan wel werkt?

[ Voor 41% gewijzigd door Verwijderd op 27-04-2004 12:03 ]

Pagina: 1