[PHP] Array registreren in een session

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Kaastosti
  • Registratie: Juni 2000
  • Laatst online: 14:09

Kaastosti

Vrolijkheid alom!

Topicstarter
Ik heb verscheidene topics gelezen over dit onderwerp, maar helaas wilden de daar aangedragen oplossingen mijn probleem niet verhelpen. Even een schets van de situatie:

Ik heb een site met daarbij voor de administrator een admin-functie voor gebruikers. Hierin kunnen dingen als gebruikersnaam, wachtwoord, stad, leeftijd en rechten ingesteld worden.

Uiteraard wil ik, als er dingen veranderd zijn en men op wil slaan, een aantal checks uitvoeren of de wijzigingen kloppen en er bijvoorbeeld geen dubbele gebruikersnamen in de database gaan komen.

Hiervoor gebruik ik momenteel 2 bestanden:
update.php
- Deze controleert per variabele of deze verschilt van de waarde die op dit moment in de database zit. Is dit zo, dan wordt een controle-functie aangeroepen.
functions.php
- Hierin zitten dus die controlefuncties.

Voor iedere variabele heb ik (indien nodig) een aparte functie ter controle. Deze zetten als er een fout voorkomt, een string in een array ($error[] = "Fout bij ...";). Het uitlezen van deze array met een for-statement is geen probleem, alleen moet ik dan dus wel binnen dat bestand blijven. Ook zou ik dan alle checks als 1 lange actie na elkaar uit moeten voeren. Daarom ben ik met sessies gaan spelen...

Het probleem is nu dat ik die array $error[] in de sessie op wil bergen. Zo kan ik bij iederen controle-functie strings toevoegen aan de array en deze aan het einde allemaal tegelijk uitlezen. Het opslaan van de array in de sessie wil alleen echt niet.

Omgevingsspecs:
Windows XP
Apache 2.0.43
PHP 4.3.0

Wat doe ik en heb ik geprobeerd:
In update.php:
session_start();
if(username is anders){ check_username($_POST['username']); }

Hierop wordt het volgende gedaan in check_username in functions.php:
$_SESSION['errors'] = $error['The username you entered already exists'];
$_SESSION['errors'] = $error['OVERSCHRIJFT IE DE VORIGE?'];

Terug in update.php roep ik errors(); aan in functions.php:
if(er staat iets in de array){
for($i=0;$i<sizeof($_SESSION['errors']);$i++){ echo "Fout:".$_SESSION['errors']."<br>"; }

En uiteraard daarna netjes session_destroy in update.php

Hehe het einde
Sorry voor het lange verhaal, maar ik ben er nu al een paar uur mee bezig en kom er echt niet meer uit. Allerlei notaties voor het registreren in de sessie zijn voorbijgekomen en alle mogelijkheden die ik kon vinden op sites zijn geprobeerd. Ik ben een sessie-newbie, dus misschien is het wel te simpel... ik ben in ieder geval compleet met m'n informatieverstrekking :)

Een vergissing is menselijk, maar om er echt een puinhoop van te maken heb je een computer nodig.


Acties:
  • 0 Henk 'm!

Verwijderd

probeer eens dit

$my_array[] = "Bla bla error 1"
session_register("my_array");

toewijzen als $_SESSION["my_array"] = ""; werkt niet!

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Je code stopt iig geen array in de sessie...

Enige wat je doet is twee keer een sessie variabele een waarde geven (waarbij je hem de tweede keer overschrijft).

Als je de $error-array in je sessie wilt plaatsen moet je dat gewoon zo doen:
$_SESSION['error'] = $error;

en niet door de waarden uit je array te pakken en die op de plek van 'error' plakken... Dat is in gewone php-code ook fout als je een array denkt mee te geven...

Btw, print_r is je vriend bij dit soort dingen debuggen:
print_r($_SESSION); is erg nuttig.

[ Voor 10% gewijzigd door ACM op 10-01-2003 23:28 ]


Acties:
  • 0 Henk 'm!

  • Kaastosti
  • Registratie: Juni 2000
  • Laatst online: 14:09

Kaastosti

Vrolijkheid alom!

Topicstarter
Tot zover iig geen resultaat. Dit zijn stukjes code die uitgevoerd worden:

PHP:
1
2
3
4
5
while($row = mysql_fetch_object( $result )){
    if($username == $row->username){ $error[] = "The username you entered already exists"; }
}
$error[] = "OVERSCHIJFT IE DE VORIGE?";
session_register('error');


En deze voor het uitlezen van de array:

PHP:
1
2
3
4
5
6
if(isset($error) && sizeof($error) != 0){
    for($i=0;$i<sizeof($error);$i++){ echo "Error: ".$error[$i]."<br>"; }
}
else{
    echo "Information updated.";
}


Nou zul je iets gaan zeggen als 'idioot, maar natuurlijk doet dat het niet!', maar zoals ik al zei ben ik sessie-noob :) Ik verwacht dat ik ook bij het uitlezen van de uiteindelijke array iets met die sessie zal moeten doen om er info uit te krijgen, maar wat precies kan ik niet achter komen.

Een vergissing is menselijk, maar om er echt een puinhoop van te maken heb je een computer nodig.


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Doe je wel voor beide stukken code een session_start ?

Acties:
  • 0 Henk 'm!

  • Kaastosti
  • Registratie: Juni 2000
  • Laatst online: 14:09

Kaastosti

Vrolijkheid alom!

Topicstarter
Maakt niet uit... ik krijg gewoon Information updated. te zien alsof er nix fout is. Toch verander ik een username naar een bestaande. Ik heb ipv $_POST['username'] nu ook een gebruiker ingevuld die bestaat, zodat het niet aan het posten/refreshen kan liggen :)

Ik heb nu onder iedere functie en onderaan update.php die print_r gezet met als output:
Array ( [error] => ) check_username:1
Array ( [error] => ) errors:1
Array ( [error] => ) update.php:1
ik heb er een echo bijgezet van welke waar staat, vandaar die check_username, errors en update.php

Misschien probeer ik wel iets wat helemaal niet het meest efficient/mooi is hoor, in dat geval ook graag responce met uitleg, want het gaat me in deze niet echt om de sessies :)

[ Voor 54% gewijzigd door Kaastosti op 11-01-2003 00:04 ]

Een vergissing is menselijk, maar om er echt een puinhoop van te maken heb je een computer nodig.


Acties:
  • 0 Henk 'm!

  • Selachii
  • Registratie: April 2000
  • Laatst online: 05-07-2020

Selachii

gamedev

Ik schop deze weer even omhoog omdat ik een vraagje heb in deze trand...

Ik schrijf ook een array weg in een session

session_register("ResultList");

en als ik

print_r($_SESSION);

uitvoer dan zie ik hem er ook tussen staan

Array( [ResultList] )

Maar als ik in een willekeurige function echo $ResultList[0]; doe dan is hij leeg. (terwijl ik hem in een andere function dus specifiek gevuld heb)
Moet ik hem nog op een speciale manier ophalen???

ik zoek al een tijdje ...

* Selachii si n00b =)

...gamen blijft leuk...


Acties:
  • 0 Henk 'm!

  • beetle71
  • Registratie: Februari 2003
  • Laatst online: 09-09 15:24
Het ging toch zo :?

Opslaan:

PHP:
1
2
3
4
5
6
$x=array();
$x[]='een';
$x[]='twee';
//enz...

$_SESSION['store_x']=$x;



en terughalen:
PHP:
1
2
$x=$_SESSION['store_x'];
echo $x[0]; // of zo..


Beetle71

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Selachii schreef op 03 maart 2003 @ 12:26:
Maar als ik in een willekeurige function echo $ResultList[0]; doe dan is hij leeg. (terwijl ik hem in een andere function dus specifiek gevuld heb)
Moet ik hem nog op een speciale manier ophalen???

Wel eens naar het hoofdstukje over 'scope' enzo gekeken in de php-manual?

De feature global enzo.

Acties:
  • 0 Henk 'm!

  • Selachii
  • Registratie: April 2000
  • Laatst online: 05-07-2020

Selachii

gamedev

bedankt beetle71, werkt als een trein!

manual heb ik gelezen jah (don't get me wrong, nofi), maar ik kan vanuit een function (local) toch geen globale variabele declareren/bewerken en die daarbuiten gebruiken zonder 'return' te gebruiken?

...gamen blijft leuk...


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Selachii schreef op 03 March 2003 @ 13:29:
bedankt beetle71, werkt als een trein!

manual heb ik gelezen jah (don't get me wrong, nofi), maar ik kan vanuit een function (local) toch geen globale variabele declareren/bewerken en die daarbuiten gebruiken zonder 'return' te gebruiken?

Euh...
Je doet een session register en verwacht dat de session-variabele zomaar ineens in je functie beschikbaar is later?
Daarvoor moet je nou net global gebruiken...

Acties:
  • 0 Henk 'm!

  • beetle71
  • Registratie: Februari 2003
  • Laatst online: 09-09 15:24
Euh...
Je doet een session register en verwacht dat de session-variabele zomaar ineens in je functie beschikbaar is later?
Daarvoor moet je nou net global gebruiken...
Klopt niet.... zie hieronder. in principe maakt een session_register een GLOBALE variabele aan. Muv. PHP 4.3.0 als register-globals (in php.ini) uit staat) maar als dat uit staat hoor je zowieso $_SESSION te gebruiken en $_SESSION is ALTIJD globaal
Zie www.php.net
If you want your script to work regardless of register_globals, you need to use the $_SESSION array. All $_SESSION entries are automatically registered. If your script uses session_register(), it will not work in environments where register_globals is disabled.


This registers a global variable. If you want to register a session variable from within a function, you need to make sure to make it global using the global keyword or the $GLOBALS[] array, or use the special session arrays as noted below.
Beetle71
Pagina: 1