Newsgroup: it.comp.www.php
Titolo: variabili globalio caos globale?...

ma come si fa ad avere una variabile globale tipo un array e a modificarla
internamente a funzioni senza passarla come parametri...
attualmente io ho fatto così.
1) $userdata=aray()
2) function a( $data)
{
    $characterCount=0;
    $GLOBALS["userdata"]["characters"][$characterCount]["NAME"]= $dta
}
3) echo $userdata["characters"][0]["NAME"];
Non viene prodotto nessun output....
Necessariamente deve sfuggirmi qualcosa di marchiano, ma non riesco proprio
ad uscirne... (precedentemente avevo provato col dichiarare global la
varaibile userdata internamente alla funzione ma senza risultato)...
Non è che all'inizio devo fare qualcosa per far finire le variabili che creo
a livello di globali???
Grazie Trini...
----------TAF----------
Se ti disegnassi una linea in faccia sembreresti proprio un culo
Trini alla frutta aka potenza del pesante (abbonato nord n°833)
ICQ number 15461418
Homepage 
http://utenti.lycos.it/triniallafrutta

 a livello di globali???
Hai chiamato la funzione a()?
questo script dovrebbe funzionare:
<?php
$userdata=array();
function a($data)
{
    $characterCount=0;
    $GLOBALS["userdata"]["characters"][$characterCount]["NAME"]= $data;
}
a("ciao");
echo $userdata["characters"][0]["NAME"];
?>

 ?>
ma è effettivamente impostato in questo modo, solo non funge,,,,
cioè la funzione a() è i realtà una callback per il parser di un ocumento
XML, dunque viene chiamata in funzione degli eventi di parsing... (e ciò
avviene) solo che i dati che io registro nell'array, appena si esce dalla
funzione a() si dissolvono nel nulla, quasi come se $userdata fosse
inizializzato ogni volta...
Grazie, Trini.

Allego la parte php della mia pagina, magari ho fatto un errore banale, ma
non riesco proprio a capire perchè quel cavolo di $userdata non mantiene i
suoi valori...
<?php
if (!($fp=@fopen("prova.xml", "r"))) die ("Couldn't open XML.");
$characterCount=0;
$objectCountCount=0;
$isCharacterStage= false;
$isObject= false;
$userdata = array();
$state='';
//ecco le funzioni callback utilizzate dal parser per gli eventi elementi e
dati...
function startElementHandler ($parser,$element,$attrib){
 echo $element." ";
 switch ($element) {
  case "CHARACTERS" : {$GLOBALS["isObject"]=false;break;}
  case "OBJECTS" : {$GLOBALS["isObject"]=true;break;}
  case "CHARACTER_STAGE" : {$GLOBALS["isCharacterStage"]= true;break;}
  //for the element with text....
  default: {$GLOBALS["state"]=$element;break;}
 }
}
function endElementHandler ($parser,$element){
 if($element=="OBJECT") {$GLOBALS["objectCount"]++;}
 if($element=="CHARACTER") {$GLOBALS["characterCount"]++;}
 if($element=="CHARACTER_STAGE") {$GLOBALS["isCharacterStage"]=false;}
}
function characterDataHandler ($parser, $data) {
 if (!$GLOBALS["state"]) {return;}
 if ($GLOBALS["isObject"])
 {
  if ($GLOBALS["state"]=="NAME") {
$GLOBALS["userdata"]["OBJECTS"][$GLOBALS["objectCount"]]["NAME"] = $data;}
  if ($GLOBALS["state"]=="INFO") {
$GLOBALS["userdata"]["OBJECTS"][$GLOBALS["objectCount"]]["INFO"] = $data;}
  if ($GLOBALS["state"]=="IMAGE") {
$GLOBALS["userdata"]["OBJECTS"][$GLOBALS["objectCount"]]["IMAGE"] = $data;}
  if ($GLOBALS["state"]=="POSITION_X") {
$GLOBALS["userdata"]["OBJECTS"][$GLOBALS["objectCount"]]["POSITION_X"] =
$data;}
  if ($GLOBALS["state"]=="POSITION_Y") {
$GLOBALS["userdata"]["OBJECTS"][$GLOBALS["objectCount"]]["POSITION_Y"] =
$data;}
 }
 else
 {
  if($GLOBALS["isCharacterStage"])
  {
   if ($GLOBALS["state"]=="TEXT") {
$GLOBALS["userdata"]["CHARACTERS"]["CHARACTER_STAGE"]["TEXT"] = $data;}
   if ($GLOBALS["state"]=="IMAGE") {
$GLOBALS["userdata"]["CHARACTERS"]["CHARACTER_STAGE"]["IMAGE"] = $data;}
   echo "pippo:
".$GLOBALS["userdata"]["CHARACTERS"]["CHARACTER_STAGE"]["IMAGE"];
  }
  else
  {
     if ($GLOBALS["state"]=="NAME") {
$GLOBALS["userdata"]["CHARACTERS"][$GLOBALS["characterCount"]]["NAME"] =
$data;}
     if ($GLOBALS["state"]=="IMAGE") {
$GLOBALS["userdata"]["CHARACTERS"][$GLOBALS["characterCount"]]["IMAGE"] =
$data;}
     if ($GLOBALS["state"]=="INFO") {
$GLOBALS["userdata"]["CHARACTERS"][$GLOBALS["characterCount"]]["INFO"] =
$data;}
     if ($GLOBALS["state"]=="BEGIN_NODE_ID") {
$GLOBALS["userdata"]["CHARACTERS"][$GLOBALS["characterCount"]]["BEGIN_NODE_I
D"] = $data;}
  }
 }
}
//creiamo il parser e definiamo le funzioni di call-back per il suo event
handling...
if (!($xml_parser = xml_parser_create())) die("Couldn't create parser.");
xml_set_element_handler( $xml_parser, "startElementHandler",
"endElementHandler");
xml_set_character_data_handler( $xml_parser, "characterDataHandler");
//finalmente effettuiamo il parsing del file xml...
while( $data = fread($fp, 4096)){
if(!xml_parse($xml_parser, $data, feof($fp))) {
break;}}
//questa mi è oscura...
xml_parser_free($xml_parser);
echo "ecco lo sfondo del character
stage".$userdata["CHARACTERS"]["CHARACTER_STAGE"]["IMAGE"];
echo "ecco ilnome del personaggio".$userdata["CHARACTERS"][1]["NAME"];
echo "ecco ll nome dell'oggetto".$userdata["CHARACTERS"][0]["NAME"];
echo $GLOBALS;
?>
se trovate qualcosa di erroneo fatemelo sapere.. io proprio non capisco....

 internamente a funzioni senza passarla come parametri...
prova questo ...
$var[0]="pippo";
$var[1]="topolino";
cambia();
echo $var1;
function cambia() {
   global $var;
   $var[1]="pluto";
}
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

suoi valori...
Ho provato a semplificare la funzione characterDataHandler, che mi pareva
un po' ingarbugliata. Fammi sapere come va, ammesso che non esploda.
function characterDataHandler ($parser, $data)
{
	if (!$GLOBALS['state'])
		return;
	$u = $GLOBALS['userdata'];
	$x = 'CHARACTERS';
	$y = $GLOBALS['objectCount'];
	// Warning - isObject and isCharacterStage might be
	// simultaneously set - try using a single (binary)
	// value
	if ($GLOBALS['isObject'])
		$x = 'OBJECTS';
	else if ($GLOBALS['isCharacterStage'])
		$y = 'CHARACTER_STAGE';
	$z = $GLOBALS['state'];
	$u[$x][$y][$z] = $data;
	print "<TT>userdata[$x][$y][$z] = $data</TT><BR/>";
	$GLOBALS['userdata'] = $u;
}
Leonardo
-- 
Time's angles, mages tell, conceal a place
incredible, beyond the mundane mind;
night-shrouded and between the seas of space
dread creatures drift in the ageless winds.

 Leonardo
Grazie per l'ottimizzazione..
ho sgamato il baco che era nella endElementHandler(..) in cui mancava
un'istruzione per settare a "" lo $state, altrimenti con un comportamento
strano la funzione characterDataHandle veniva richiamata con $data vuoto e
riscriveva tutti i parametri archiviati con un bel blank....
Grazie per l'aiuto, Trini