Toon posts:

[PHP] Global variable + navigatie

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

Verwijderd

Topicstarter
Ik ben bezig met het maken van een navigatie balk (net zoals hierboven staat in de gele balk) waarbij de locatie van de gebruiker wordt bijgehouden. Dus in welke categorie hij geklikt heeft.

Ik heb al een flinke lap code, maar ik krijg de globale variabele niet goed.

Deze code staat in de topbar.php die in alle files wordt ge-include. Dit is ook het punt waar het mis gaat, want hij maakt iedere keer dat er geklikt wordt een nieuwe array aan.

Hoe laat ik hem steeds gebruik maken van een globaal gedefinieerde array?

Ok hier de code (heb mijn best gedaan om het een beetje uit te lijnen, sorry als het nog een beetje een zooitje is) :
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
<?
if( !isset( $categorieArray ) ){
  global $categorieArray;       
  $categorieArray = Array();
  echo "stiekum toch gezet";
}else{
  if( isset( $categorie ) && $categorie != "" ){
    $index = count( $categorieArray );
    $categorieArray[ $index ] = $categorie;
    $show_navigatie = count( $categorieArray );
    echo "<td><a href=\"index.php\" target=\"_self\"><font face=\"Arial, Helvetica, sans-serif\" size=2 color=\"#FFFFFF\"><b> Home >> </a></b></font></td>";
                        
    for( $i = 0; $i < $show_navigatie ; $i++ ){
    $query_selectnamen = "select naam from categorie where categorie_id = ".$categorieArray[0]."";
                                $result_selectnamen = mysql_query( $query_selectnamen, $db_link );
                                $row_selectnamen = mysql_fetch_array( $result_selectnamen );
    
    echo "<td><a href=\"cat-select.php?categorie=".$categorieArray[$i]."&parent=".$categorieArray[$i]."\" target=\"_self\"><font face=\"Arial, Helvetica, sans-serif\" size=2 color=\"#FFFFFF\"><b>".$row_selectnamen[0]."</b></font></a></td>";
    }
}else{
  echo "<td><a href=\"index.php\" target=\"_self\"><font face=\"Arial, Helvetica, sans-serif\" size=2 color=\"#FFFFFF\"><b> Home >> </a></b></font></td>";
}
}
?>

Hij geeft dus steeds Stiekum toch gezet :(

  • Grum
  • Registratie: Juni 2001
  • Niet online
als jij je array nergens op slaat issie op de volgende pagina natuurlijk niet meer aanwezig

Verwijderd

Topicstarter
dat is toch juist de bedoeling van zo'n globale variable?
Of verwacht ik teveel van zo'n globale variable?
Dacht eigenlijk dat die ongeveer zou werken als bv $PHP_AUTH_USER die blijft ook bestaan zolang de browser van de client open is...

of kan je zo'n variable niet zelf aanmaken?

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 27-08 13:53

chem

Reist de wereld rond

jij doelt op sessions.

Klaar voor een nieuwe uitdaging.


Verwijderd

Topicstarter
nee geen sessions, het gaat om de navigatie
Hij moet per reload van de pagina (klik op een categorie in dit geval) de array aanvullen met de volgende categorie (precies zoals hierboven in de hele balk)

dus Home >> Bla >> blabla

waarbij home, Bla en blabla hyperlinks worden om terug te navigeren.

maar nu onthoud hij de array niet, ondanks dat hij global gedefinieert is?

[edit: boel uitroeptekens, lijk wel gefrustreerd te raken ;)) ]

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 14-07 14:28

thomaske

» » » » » »

ookal heb je een var global gedefinieerd, wanneer je de pagina verlaat en naar een andere pagina gaat, is ook die var kwijt

je moet dus aan de sessies, of op elke pagina 'terug-rekenen'

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Je moet _elke_ pagina (aanroep) als het starten van een los programma zien met php.

Ze kunnen daardoor ook niet communiceren, behalve als er op een bekende plek wat data staat.
Zo'n bekende plek kan dan een DB zijn, maar ook een andere manier zoals de sessions of shared memory.

Overigens zijn er ook webomgevingen waar de data wel bekend blijft, zoals bij Servlets.

Verwijderd

Topicstarter
ok das gedeeltelijk slecht nieuws, moet de user login eerst maar eens gaan omgooien dan...

Hoelang blijft een sessie geldig? Lopen die ook af net als cookies?

Ik krijg deze error op mijn windows machine:
Warning: open(F:/689\php\sessiondata\sess_0be87d0391a139bb5ca2fecd45391848, O_RDWR) failed: m (13) in d:\foxserv\www\startend\marketplace\registercookie.php on line 36

op mijn linux bak doet hij het wel in een keer goed? (ik ontwikkel op mijn windows machine met foxserv en op de linux bak draaid de live versie). Moet ik iets anders instellen onder mijn windows bak in de php.ini?

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op dinsdag 12 maart 2002 14:31 schreef IceFlame het volgende:
Hoelang blijft een sessie geldig? Lopen die ook af net als cookies?
Over het algemeen worden sessies met cookies geregeld.
Zolang de cookie blijft bestaan is de sessie dus bruikbaar ;)
Ik krijg deze error op mijn windows machine:
Warning: open(F:/689\php\sessiondata\sess_0be87d0391a139bb5ca2fecd45391848, O_RDWR) failed: m (13) in d:\foxserv\www\startend\marketplace\registercookie.php on line 36
Waarschijnlijk moet je user schrijfrechten in die folder krijgen? Of hij is niet aangemaakt...

Verwijderd

Topicstarter
het begint me allemaal flink te duizelen nu...
Ik lees in alle voorbeelden op php.net nergens iets over samenwerking met coockies?
session_name("naam"), session_start(), session_register( "var" ), session_destroy() snap ik, maar waar ligt de link met het cookie dan?

en waar in php.ini wordt het path voor de sessie temps gezet? Ik kan het niet vinden geloof ik :?

Mhh ff bakkie thee pakken en weer van voorafaan beginnen.

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op dinsdag 12 maart 2002 14:50 schreef IceFlame het volgende:
het begint me allemaal flink te duizelen nu...
Ik lees in alle voorbeelden op php.net nergens iets over samenwerking met coockies?
session_name("naam"), session_start(), session_register( "var" ), session_destroy() snap ik, maar waar ligt de link met het cookie dan?
In principe niets, behalve dat de client/browser enige identificatie mee moet sturen met de pagina-request.
Zodat de server weet om wie het gaat. DAT stukje wordt vaak met een cookie geregeld (de sessie id wordt dus normaliter in een cookie meegestuurd), meer niet :)
en waar in php.ini wordt het path voor de sessie temps gezet? Ik kan het niet vinden geloof ik :?
Ik geloof dat er een "temporary" folder ergens in de php.ini staat. Daar gaan alle tijdelijke files heen meen ik, anders is het de "session storage folder" oid...

Verwijderd

Topicstarter
ACM jij bent echt mijn held voor vandaag!! mag echt in mijn handjes knijpen dat jij online bent!! SUPER THNX!!

Mijn windows bak is nu ook volmaakt gelukkig met sessies :)

ik heb nu dit:
code:
1
2
3
4
5
6
//discard (if) existing cookie before setting a new one.
        setcookie ("user", "", time() - 3600);
        setcookie ("user", $token ,time()+3600);
        
        session_start();
        session_register( "categorieArray" );

Op deze manier (begreep ik op php.net) checkt hij eerst of er al een cookie gezet is, en met de sessie_start() doet hij iets met het cookie. Heb ik dat goed begrepen?

Nu maar eens proberen of ik via $HTTP_SESSION_VARS['categorieArray'] ofzoiets bij de array kan uit verschillende files....

Jemig en ik dacht dat flans ik wel even in elkaar, weer een leerzaam dagje zo!

  • Grum
  • Registratie: Juni 2001
  • Niet online
let wel dat je op elke page dat je je session wilt gebruiken een session_start() aanroept.

Verwijderd

Topicstarter
code:
1
2
3
4
5
6
7
$HTTP_SESSION_VARS["categorieArray[0]"]=1234;
$HTTP_SESSION_VARS["categorieArray[1]"]=56789;
echo $HTTP_SESSION_VARS["categorieArray[0]"];
echo $HTTP_SESSION_VARS["categorieArray[1]"];
                            
$index = count( $HTTP_SESSION_VARS["categorieArray"] );
echo "index = ".$index;

de ouput van de bovenstaande code is:
123456789index = 0

waarom kan ik de $HTTP_SESSION_VARS["categorieArray"] niet counten?

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 14-07 14:28

thomaske

» » » » » »

Probeer dit eens:
PHP:
1
<?$cats = array();$cats[0] = 1234;$cats[1] = 56789;$HTTP_SESSION_VARS["cats"]=$cats;print_r( $HTTP_SESSION_VARS["cats"]);$index = count( $HTTP_SESSION_VARS["cats"] );echo "index = ".$index;?>

[edit]

bovenstaand gaat niet helemaal werken denk ik.. gebruik http://php.net/session_register om sessievariabelen aan te maken..

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


Verwijderd

Topicstarter
Het werkt deels:

de output is:
Array ( [0] => 1234 [1] => 56789 ) index = 0

dus het is nu wel een array, maar hij count hem nog steeds niet?

  • Grum
  • Registratie: Juni 2001
  • Niet online
$HTTP_SESSION_VARS["categorieArray[0]"]=1234;
$HTTP_SESSION_VARS["categorieArray[1]"]=56789;

moet zijn

$HTTP_SESSION_VARS["categorieArray"][0]=1234;
$HTTP_SESSION_VARS["categorieArray"][1]=56789;

Verwijderd

Topicstarter
Grum, sounds promising...

de count werkt, nu eens kijken of ik dit malle stuk code na een hele dag eens getemd krijg! Dacht vanmorgen nog mhh dat heb ik voor de lunch wel gefixt, ben er nu al een mooi dagje mee zoet :)

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 14-07 14:28

thomaske

» » » » » »

Op dinsdag 12 maart 2002 16:39 schreef IceFlame het volgende:
Grum, sounds promising...

de count werkt, nu eens kijken of ik dit malle stuk code na een hele dag eens getemd krijg! Dacht vanmorgen nog mhh dat heb ik voor de lunch wel gefixt, ben er nu al een mooi dagje mee zoet :)
offtopic:
je moet ook niet zo vroeg lunchen! >:) :+

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


Verwijderd

Topicstarter
hahaha lol Thomaske!! :P

Maar ik zit nog steeds met dit probleem, ik begin toch zeer te twijfelen aan de mogelijkheid van dit hele verhaal...

Ik kan nu wel een item toevoegen in de array, maar zodra de pagina herlanden wordt, wordt ook de array gereset.
Dus bij iedere pagina heb ik weer een lege array, dit is dus niet de bedoeling, hij moet per refresh een nummertje in de array stoppen en bewaren.

Kan dit uberhaupt?

//offtopic
hoef voorlopig niet meer naar de kapper, zit geen haar meer op mijn hoofd en er liggen nu flinke plukken her en der om mijn bureau :(

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 14-07 14:28

thomaske

» » » » » »

je kan toch aan de hand van de categorie waar de user zich in bevindt, bekijken wij de 'parent' is (en daar ook weer van, totdat je bij de root bent).

Ik neem aan dat je die categorieen ergens hebt opgeslagen (database?)

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


Verwijderd

Topicstarter
Ja daar heb je helemaal gelijk in en was mijn eerste optie eigenlijk, maar toen las ik iets van sessions en dacht w00t??!!?? dat klinkt interesting :)

Maar dat die mofo sessies zo'n bittere pil bleek had ik niet verwacht :(

schrijf idd wel een while loopje = sneller en makkelijker, maar ik kan het gewoon NIET uitstaan dat het niet is gelukt!!

*hele diepe grom* ;)

  • Grum
  • Registratie: Juni 2001
  • Niet online
ik zou niet direct zeggen sneller :P

maaaaaaar ik doe al stil ;)

Verwijderd

Topicstarter
hahaha *psycho smily @ Grum* :P

maar als iemand weet wat ik nou verkeerd doe, dus waarom ik per pagina een ge-resette session variable heb, plz plz laat het me weten!!

anders kan ik weer een paar nachten niet slapen totdat ik dit mysterie gemasterd heb :(

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 14-07 14:28

thomaske

» » » » » »

Op woensdag 13 maart 2002 10:32 schreef Grum het volgende:
ik zou niet direct zeggen sneller :P
Wel sneller te maken voor IceFlame
maaaaaaar ik doe al stil ;)
Eindelijk! >:)

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


  • Grum
  • Registratie: Juni 2001
  • Niet online
IceFlame: maar als iemand weet wat ik nou verkeerd doe, dus waarom ik per pagina een ge-resette session variable heb, plz plz laat het me weten!!


roep je op ELKE pagina waar jij sessions wil gebruiken iig 1x BOVENAAN session_start() aan :?

Verwijderd

Topicstarter
Ja dat heb ik gedaan, ik heb uit pure frustratie ff een heel simpel opzetje gemaakt van wat ik wilde doen en daar werkte het ook niet.

Ik zal hem hier ff neerzetten, misschien is het voor jullie dan ook duidelijker voor voor (vast hele stomme fout) ik maak!

File 1 - index.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
<?
    setcookie ("user", $token ,time()+3600);
        
    session_start();
    $session_var = Array();
    session_register( "session_var" );
?>

<html>
<head>
    <title>Untitled</title>
</head>

<body>

<?
    echo "is de sessie gestart?<br>";
    $deSessionId = session_id();
    echo "De session_id = ".$deSessionId;
    
    $output = "
    <br><a href=\"nextframe.php?nummer=1\" target=\"_self\">Geef nummer 1 door naar nextframe</a>
    <br><a href=\"nextframe.php?nummer=2\" target=\"_self\">Geef nummer 2 door naar nextframe</a>
    <br><a href=\"nextframe.php?nummer=3\" target=\"_self\">Geef nummer 3 door naar nextframe</a>
    ";

    print( $output );
?>

</body>
</html>

File 2 - nextframe.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
<?
    //session-start om bij de session-vars te kunnen
    session_start();
?>
<html>
<head>
    <title>Untitled</title>
</head>

<body>
<?
    
    echo "Variabele ook aanwezig in dit frame?<br>";
    
    if( isset( $nummer ) ){
        $index =  count( $session_var );
        $session_var[ $index ] = $nummer;
        echo $nummer." is gezet";
    }
    
    echo "<br>En en en?<br>";
    
    $index=0;
    $index = count( $session_var );
    for( $i = 0 ; $i < $index ; $i++ ){
        echo "var: ".$session_var[ $i ]."<br>";
    }
    
    echo "<br><br><a href=index.php target=_self>terug</a>";
?>


</body>
</html>

En als het nou iets heel stoms is, breng het dan ff heel interessant, anders ga ik hier echt de boel afbreken ;)

  • Grum
  • Registratie: Juni 2001
  • Niet online
ff complimenteren - netjes geindent :)

zal et nu ff testen

[edit]
getest - en het werkt naar wat er in de code staat

wat zou dit moeten doen ?

elke keer een nieuw nummer TOEVOEGEN ? als je heen en weer gaat tussen de 2 pages ?

dan moet je eventjes dit aanpassen in de index:
code:
1
2
    $session_var = Array();
    session_register( "session_var" );

naar
code:
1
2
3
4
5
if(!session_is_registered( "session_var" ))
{
    $session_var = Array();
    session_register( "session_var" );
}

anders leeg je steeds je variabele en dan is eigelijk het hele session-effect weg :)

Verwijderd

Topicstarter
shiitt meen je dat?
*dom dom dom*

dat is echt dooommmm!! :(
Ik heb nu het terugreken scriptje zo goed als af, shiiit dan was ik net ook al bijna klaar ;(

Mega thanx ik ga het zo meteen even testen!!
Als het werkt ga ik het lekker op een rustige middag alsnog implementeren >:)

Verwijderd

Topicstarter
Afbeeldingslocatie: http://forums.rentone.nl/images/smiles/worshippy.gif Grum, Thomaske, ACM Afbeeldingslocatie: http://forums.rentone.nl/images/smiles/worshippy.gif

Het werkt gewoon!! Mijn dank is groot!!
Echt super!! Nu zit ik hier met een big smile achter mijn pc dat wil je niet weten!!

Echt super super super!!!

  • Grum
  • Registratie: Juni 2001
  • Niet online
Kijk hier doe ik het voor.

edit:

Voor de duidelijkheid - dit gaat over de big smile

IceFlame heeft duidelijk veel dingen opgestoken hiervan en dat doet denkik niet alleen mij goed - maar alle mensen die hun kiezeltje hebben bijgedragen aan deze thread.


Zoals je ook wel aan me reageer gedrag kan merken in deze post help ik liever niet als et probleem nog niet gepinpoint is :)

Ik wijs hoogstens op hele foute dingen die de oplossing in de weg zouden kunnen staan.

Nog even wat dingen voor IceFlame.
• Goed doorzettings vermogen, dat kom je weinig tegen.
• Nette code style, kom je nog minder tegen.
• Bereidheid om dingen te proberen/uitzoeken, kom je helemaal zelden tegen :)

Nu heb ik nog 1 vraag - Code je onder error_reporting(E_ALL); ? >:) :+

Verwijderd

Topicstarter
hahaha nee die staat in de phpinfo() op no value, ik ben bang dat ik gewoon veel foutjes maak :P

Maar echt merci voor je hulp! Mijn dag is weer helemaal goed en ik ga straks nog eens handig worden met php :)

En vandaag is het gefikst voor de lunch, ik had me gister gewoon een dag vergist :P

*hahaha een collega van me vroeg net al wat zit je te smilen, hahaha :)*

  • Grum
  • Registratie: Juni 2001
  • Niet online
Ok zet dan voor mij error_reporting(E_ALL); even aan en fix die errors die ie geeft.

Code zonder errors werkt ook nog es sneller :)

Verwijderd

Topicstarter
oohh jaa dat is het magic error command ofzo?
jemig nu staat ie zwaar in de zeurmodes :P

hij valt nu ook over $row["naam"] ipv $row[0] bij query results enzo?
maakt dat trouwens uit dan welke van de 2 je gebruikt?

mhh hij vindt wel een hoop dingen die ik niet netjes heb opgelost zeg, jemig het is net of ik in de spiegel kijk op zondag als ik mega brak ben.

eens kijken wat ik allemaal kan weg werken

Verwijderd

Topicstarter
ooh shit hij valt niet over $row["naam"], maar over $row[naam]

nou als dat alles is dan valt het echt reuze mee, dan is mijn code bijna foutloos!! *D

  • Grum
  • Registratie: Juni 2001
  • Niet online
hij herkent geen slechte code alleen foute code waar de parser eerst 2x over na moet denken.

dus dat je code foutloos is ... geen idee .. hij is iig wel syntactisch 100% correct TE PARSEN! :+

Verwijderd

Topicstarter
hahahaha mijn code is foutloos!! :)
En het is lunchtijd, ik ben echt volmaakt gelukkig, lig weer op schema en heb het gevoel dat ik het weer snap :)

ik heb best wel honger, dus ik ga me maar eens op de lunch storen :9~

[edit:]
Oh shit nouja dan is in dat geval mijn code nu foutloos... TE PARSEN!! ;)
Pagina: 1