[PHP] Hoe sla ik get-variabelen in sessievariabelen op?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Bananenplant
  • Registratie: Januari 2001
  • Laatst online: 13:31
Ik heb al gezocht op google en op GoT, maar ik ben er nog niet achter wat ik precies foutdoe.

Ik ben een site aan het maken met een nieuwspagina waar je zelf aan kunt geven hoeveel items je wilt zien. Voor het gebruiksgemak wil ik dus graag dat de pagina de instellingen onthoudt zodat je niet telkens weer hoeft in te voeren wat je precies wilt zien als je op een ander stukje van de site bent geweest. Voor dit doel heb ik dit formulier:

HTML:
1
2
3
4
5
6
7
8
9
10
<form method="get" action="index.php">
<select name="type">
<option value="next">N&auml;chste</option>
<option value="next">Vorige</option>
<option value="next">Erste</option>
<option value="next">Letzte</option>
</select>
<input type="text" size="1" name="number" style="text-align: right;" />
<input type="submit" value="Los!" />
</form>


Het stukje code waarin dit verwerkt wordt:

PHP:
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
// switch to calculate new bounds                                              
                                                                                
$type = $_GET["type"];
$number = $_GET["number"];
$_SESSION["number"] = $number;
$_SESSION["type"] = $type;

switch($type) {

 case "prev":
   $_SESSION["end"] = min($numrows, ($_SESSION["end"] + $number));
   $_SESSION["start"] = max(0, ($_SESSION["end"] - $number));
   break;

 case "next":
   $_SESSION["start"] = max(0, ($_SESSION["start"] - $number));
   $_SESSION["end"] = min($numrows, ($_SESSION["start"] + $number));
   break;

 case "last":
   $_SESSION["start"] = 0;
   $_SESSION["end"] = min($numrows, $number);
   break;

 case "first":
   $_SESSION["end"] = $numrows;
   $_SESSION["start"] = max(0, ($_SESSION["end"] - $number));
   break;

}


$_SESSION["start"] en $_SESSION["end"] zijn de sessievariabelen die de grenzen aangeven bij de query die de nieuwsitems weergeeft, $numrows is het aantal aanwezige records en heeft al een waarde bij dit stuk code.

Ik krijg deze foutmelding (heb hierop ook gezocht) :
Warning: Unknown(): Your script possibly relies on a session side-effect which existed until PHP 4.2.3. Please be advised that the session extension does not consider global variables as a source of data, unless register_globals is enabled. You can disable this functionality and this warning by setting session.bug_compat_42 or session.bug_compat_warn to off, respectively. in Unknown on line 0
Ik gebruik volgens mij de moderne middelen voor externe variabelen en sessies. Ik heb ook wat geprobeerd met outcommenting en het lijkt erop dat php het niet leuk vindt als ik een get-variabele in een sessie wil stoppen, al dan niet met tussenkomst van een gewone variabele. Als ik de regels waarin dat gebeurt verwijder is de warning ook weg. Ik heb ook op dezelfde site een loginscript dat variabelen uit de database in sessievariabelen zet, variabelen in sessievariabelen zetten kan dus wel.

Ik hoop dat ik geen stomme vraag gesteld heb, maar heeft iemand enig idee hoe ik hier vanaf kom? Het is niet op m'n eigen server, dus in php.ini frotten is geen optie voor me. Als laatste redmiddel zou ik wel allemaal <input type="hidden"> kunnen nemen om binnen een bepaald gedeelte van de site de grenzen bij te houden, maar dat vind ik eigenlijk een non-oplossing...

PHP-versie is 4.3.4, de server apache2 op SuSE. M'n bedoeling was ook het formulier vooraf in te vullen met het gebruik van sessie-variabelen, doordat dat niet werkte zag ik ineens die foutmelding onderaan de pagina staan.

[ Voor 20% gewijzigd door Bananenplant op 19-12-2004 23:58 ]

💶 Wil je in een vrije democratie blijven wonen? Betaal dan voor nieuws. 📰
❌ ceterum censeo contra factiones ad dextrum extremum esse pugnandum. 🙅🏻‍♂️


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Volgens mij heeft dit iets te maken met het feit dat je sessievariabelen dezelfde naam hebben als je get-variabelen. Ik geloof ergens in een topic gelezen te hebben dat PHP daarover valt. Je kan allicht proberen of een simpele rename van die sessievariabelen het oplost. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 20-09 18:51
Ik vind de foutmelding maar vaag. Is het niet gewoon dat je dingen in $_SESSION stopt zonder eerst session_start() aan te roepen? (Het enige alternatief daarvoor is session.auto_start gebruiken, maar dat heeft ook zo zijn problemen en is ook niet praktisch als je de ini-files niet wil aanpassen aan je eigen gebruik.)

Acties:
  • 0 Henk 'm!

  • Bananenplant
  • Registratie: Januari 2001
  • Laatst online: 13:31
Ik weet niet hoe ik het heb... maar toen ik het html-formulier verbeterde (ze hebben allemaal dezelfde value, ik had niet goed gekeken met copypasten (een bepaalde option selecteren is k*twerk)) werkte het ineens :?

Naja, ben ik wel blij om :) .

💶 Wil je in een vrije democratie blijven wonen? Betaal dan voor nieuws. 📰
❌ ceterum censeo contra factiones ad dextrum extremum esse pugnandum. 🙅🏻‍♂️