Toon posts:

[PHP - SESSIES]

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ok, hier nog een vervolg op topic [rml][ PHP / Sessies ] variabele variabelen registreren[/rml]

D2k, ik heb boeken, en heb ook de manual doorgelezen. Als je zelf even de topic doorleest, en uitprobeerd, zul je zien dat er nog geen antwoord op gegeven is... Verder zal ik voortaan wat vaker editten ipv een nieuw bericht.

Het probleem is dus als volgt:

Ik haal waarden uit 2 kolommen uit een database, 1 met de naam var_name, 1 met de naam value. Ik wil al deze variabelen registeren onder de naam die opgeslagen is onder de naam 'var_name', en met de waarde uit 'value'.

De oplossing die gegeven is werkt, maar dan alleen in het bestand waarin het uitgevoerd wordt, helaas...

Ik zal het toelichten met 2 bestandjes:


'edit' onderstaande script is probeersel... het script daaronder het eigenlijke script waar ik het probleem mee had:

index.php
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
<?
session_start();
 
$row['var_name']    =   "test"; 
$row['value']       =   "waarde"; 

$_SESSION[$row['var_name']] = $row['value']; 

echo $_SESSION['test'];
session_register($_SESSION['var_name']);
?>
<a href="test.php">Volgende bestand</a>


'edit -> nu het eigenlijke script

index.php
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
<?
session_start();
 
$row['var_name']    =   "test"; 
$row['value']       =   "waarde"; 

$_SESSION[$row['var_name']] = $row['value']; 

echo $_SESSION['test'];

?>
<a href="test.php">Volgende bestand</a>


test.php
PHP:
1
2
3
4
5
<?
session_start();

echo $test;
?>


Als ik dit zo bekijk zou het moeten werken, maar dat is dus niet zo...

  • chris
  • Registratie: September 2001
  • Laatst online: 11-03-2022
nee dit klopt niet. als je een waarde toewijst aan $_SESSION[$row['var_name']] dan moet je ook doen session_register($_SESSION[$row['varn_name']);
doe dan in test.php maar eens print_r($_SESSION);

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Nee, je moet OF session_register gebruiken OF $_SESSION voor alles. Niet door elkaar.

Bovendien heeft session_register($_SESSION['var_name']); in jouw code deze werking:
session_register(""); ...


Maar goed ze zijn dus mutual exclusive en je mag en moet ze niet door elkaar gebruiken.

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 10:19

D2k

Doet iets met Cloud (MS/IBM)


Verwijderd

Topicstarter
Jah, maar doordat jij een form gebruikt, krijg je automatisch die variabelen wel weer in het bestand...

Maar probeer nu eens een script te schrijven dat in een while loop de variabelen registreert ???

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?
    session_start();
    $host       =   "localhost";
    $user       =   "user";
    $password   =   "password";
    $database   =   "database";
    $table      =   "tabel";

    $mysql_con = mysql_connect($host, $user, $password);
    mysql_select_db($database);

    $query = " SELECT var_name, value FROM $table ";
    $run_query = mysql_query($query, $mysql_con);
    if(!$run_query) {
        echo (mysql_error());
    }
    else {
        while ($row = mysql_fetch_array ($run_query)) {
            $_SESSION[$row['var_name']] = $row['value'];
        }
    }
?>


Dit zou toch een hele rits met variabelen op moeten leveren... (de database is gevuld ;) )

Ik heb er ondertussen echt wel lang naar zitten zoeken, maar volgens mij staar ik me ergens helemaal blind op...

  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 12-07 11:54
Wanneer je register_globals in je php.ini op off hebt staan dan heb je pas toegang tot je session vars door het volgende te doen:

$value = $_SESSION['var_name'];

Dit is de te preferen methode.

Wanneer je toch besluit om met register_globels = on te gaan werken dan zou je initiele script werken.
Onthoud wel dat register_globals vanaf php 4.1 als ik het goed heb default op off staat.

[ Voor 0% gewijzigd door stekkel op 10-10-2002 21:16 . Reden: xtra uitleg ]


  • EL_Loco
  • Registratie: Oktober 2001
  • Laatst online: 08-11-2023

EL_Loco

alias Haco

haal anders eerst de sessie weg, en kijk of de query wel wat oplevert

rumores non hiatus dremelunt
malleo omnia consentiunt
Lid van het Anti-Jamba front!


Verwijderd

Topicstarter
query levert gegevens op, en register_globals staan aan...

  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 12-07 11:54
heb je apache herstart na het aanpassen van php.ini?

Verwijderd

Topicstarter
Stekkel, als ik zeg dat register_globals aan staat, dan stond ie dus al aan voor ik apache startte... anders staat ie toch niet aan ??? DUH...

ik vind dit trouwens een mooiere oplossing, ook al werkt het ook niet...:

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
<? 
    session_start(); 
    $host        =    "localhost"; 
    $user        =    "user"; 
    $password    =    "password"; 
    $database    =    "database"; 
    $table        =    "tabel"; 

    $mysql_con = mysql_connect($host, $user, $password); 
    mysql_select_db($database); 

    $query = " SELECT var_name, value FROM $table "; 
    $run_query = mysql_query($query, $mysql_con); 
    if(!$run_query) { 
        echo (mysql_error()); 
    } 
    else { 
        while ($row = mysql_fetch_array ($run_query)) { 
            $var = ['var_name'];
            $$var = ['value'];
            session_register($$var);
        } 
    } 
?> 

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Ik vind dat geen mooiere oplossing...
Variabele variabelen is iig imho iets dat je zoveel mogelijk moet vermijden.
De $_SESSION vindt ik mooier.

Btw jouw allereerste voorbeeld code (index.php en test.php) werkt prima bij mij.
Met welke php-versie werk je?

De while loop-code lijkt me ook foutloos trouwens.
Maar doe ajb niet domweg "echo $test" maar liever iets als print_r($_SESSION); of bij oudere php's print_r($HTTP_SESSION_VARS);

  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 12-07 11:54
Verwijderd schreef op 11 oktober 2002 @ 00:25:
Stekkel, als ik zeg dat register_globals aan staat, dan stond ie dus al aan voor ik apache startte... anders staat ie toch niet aan ??? DUH...
Je kan zo veel zeggen maar feit is dat je een niet werkend script het en in veel gevallen is het sceptisch zijn tegenover de topicstarter een goede manier om een probleem op te lossen.

Sorry dat ik je probeerde te helpen.

Dus m.a.w. voortaan: RTFM !!!!

  • [ash]
  • Registratie: Februari 2002
  • Laatst online: 23-08 12:03

[ash]

Cookies :9

Check eens welke info er "echt" in je sessie weggeschreven wordt, het zal kunnen helpen bij het troubleshooten.

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 29-08 19:47

Bosmonster

*zucht*

staat het session_save_path (of zoiets) wel goed.. anders slaat ie helemaal niks op...

Deze moet je verplicht zetten op Windows.

Verwijderd

Topicstarter
Verwijderd schreef op 11 oktober 2002 @ 00:25:
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
<? 
    session_start(); 
    $host        =    "localhost"; 
    $user        =    "user"; 
    $password    =    "password"; 
    $database    =    "database"; 
    $table        =    "tabel"; 

    $mysql_con = mysql_connect($host, $user, $password); 
    mysql_select_db($database); 

    $query = " SELECT var_name, value FROM $table "; 
    $run_query = mysql_query($query, $mysql_con); 
    if(!$run_query) { 
        echo (mysql_error()); 
    } 
    else { 
        while ($row = mysql_fetch_array ($run_query)) { 
            $var = ['var_name'];
            $$var = ['value'];
            session_register($var);
        } 
    } 
?> 
Dit werkt wel, gewoon een $ teveel bij de session_register dus...

Hoezo ergens overheen kijken ??? 8)7
Pagina: 1