Sessionvariablen in Funktionen?

PetraB

Mitglied
Hallo,

ich wüsste gerne ob es möglich ist, Sessionvariablen innerhalb einer Funktion zu deklarieren. Ich arbeite mit PHP 4.3.4, falls das von Bedeutung ist. Außerdem möchte ich in dieser Variablen ein mehrdimensionales Array abspeichern. Ist das möglich und wenn ja, wie muss ich das umsetzen?

Schöne Grüße,

PetraB
 
Original geschrieben von PetraB
ich wüsste gerne ob es möglich ist, Sessionvariablen innerhalb einer Funktion zu deklarieren.
Klar, warum auch nicht?

Außerdem möchte ich in dieser Variablen ein mehrdimensionales Array abspeichern. Ist das möglich und wenn ja, wie muss ich das umsetzen?
Auch das ist problemlos möglich.
PHP:
$deinarray = array(array(2,3),array(12,3));
$_SESSION['var'] = $deinarray;
Sprich, ganz normal. ;)
 
Wenn Du eine PHP-Version größergleich 4.2.0 einsetzt, dann kannst Du mit dem superglobalen Session-Array ($_SESSION) arbeiten. Superglobal bedeutet, dass Du auch in jeder Funktion darauf zugreifen kannst.
PHP:
session_start();
$arTemp[0][0] = 'Wert';
$arTemp[0][1] = 'Wert';
$arTemp[1][0] = 'Wert';
$arTemp[1][1] = 'Wert';
$_SESSION['mehrdimensionalesArray'] = $arTemp;
$arTemp ist im oberen Beispiel ein mehrdimensionales Array, das der Session hinzugefügt wird. Es gibt auch andere Arten mehrdimensionale Arrays zu erstellen:
PHP:
$arTemp = Array(Array(1,2,3,4), Array('A','B','C'));

snuu
 
Kann es in der Funktion mit den Session-Variablen Probleme geben, wenn ich dort auf eine eine globale Variable zugreifen muss?

Code:
<?
function dumpQueryResults()
{
  GLOBAL $map;
  //$map = $_SESSION["map"];
	
  $numResultsTotal = 0;

  for ($iLayer=0; $iLayer < $map->numlayers; $iLayer++)
  {
    $oLayer = $map->GetLayer($iLayer);

    $numResults = $oLayer->getNumResults();

    if ($numResults == 0) {
			continue;  // Keine Ergebnisse in diesem Layer
    }
    // Öffnet die Layertabelle und liest die Liste der Felder aus, die
    // im Metadatenteil des Layers unter "HEADERRESULT_FIELDS" angegeben sind
    $oLayer->open();

    $selFields = explode(" ", $oLayer->getMetaData("RESULT_FIELDS"));
		
    for ($iRes = 0; $iRes < $numResults; $iRes++) {
	$oRes = $oLayer->getResult($iRes);
	$oShape = $oLayer->getShape($oRes->tileindex, $oRes->shapeindex);
			
	for ($iField = 0; $iField < sizeof($selFields); $iField++) {
	  $result[$iRes][$iField] = $oShape->values[$selFields[$iField]];
	} 
	$oShape->free();
	$numResultsTotal++;
    }
    $oLayer->close();
  }
	
  if ($numResultsTotal == 0) {
    $result[0][0]= "Hier sind keine Informationen verfügbar.";
  }
  $_SESSION["array"] = $result;
}
?>

Wenn ich dieses Script aufrufe, bekomme ich "Hier sind keine Informationen verfügbar.", da in der ersten for-Schleife $map->numlayers leer zu bleiben scheint. Kann es sein, dass er halt nicht auf diese globale Variable zugreifen kann?
 
Original geschrieben von PetraB
Wenn ich dieses Script aufrufe, bekomme ich "Hier sind keine Informationen verfügbar.", da in der ersten for-Schleife $map->numlayers leer zu bleiben scheint. Kann es sein, dass er halt nicht auf diese globale Variable zugreifen kann?
Ähm ... $map = $_SESSION['map'] ist a) auskommentiert und b) wenn es funktionieren würde, würde er doch die globale $map Variable wieder überschreiben?
Hast du die Session gestartet und mal überprüft ob in den Session-Variablen überhaupt was drinsteht?
 
Leider muss ich sagen, dass das so, wie ich es gerade gepostet habe, nicht funktioniert, die Session-Variable scheint gar nicht belegt zu sein. Was hab ich denn dabei noch verkehrt gemacht?
 
Zurück