Newsgroup: it.comp.www.php
Titolo: Repost Errore con Register Globals

Non capisco dov'è l'errore:
(1)-------------------------------------------------------------------------
ho una pagina con il seguente codice:
session_register("autorizer");
 $autorizer = array ("username" => $username, "password" => $password,
"livello" => $livello[0]);
    header("location: admin.php?action=home");
(2)-------------------------------------------------------------------------
admin.php è così strutturata:
<?php
require_once("mainfile.php");        // contiene istruzioni
                                                    // come la funzione
safe_set()
safe_set ($_GET["action"], "");     // inizializa la variabile action
function home() {
include("autorizer/home.php");      // include il file in questione
}
switch($_GET["action"]) {
 case "home":
    home();
    break;
}
?>
(3)-------------------------------------------------------------------------
Questo è il file home.php (nella sua parte che ci interessa)
<?
  $request_livel = 2;
  include "autorizer/auth.php";
?>
// seguono altre istruzioni
(4)-------------------------------------------------------------------------
-------------------------
"autorizer/auth.php" contiene il seguente codice:
<?
  session_register("autorizer");
  if (isset($autorizer["livello"])){                            // ---->
questa if risulta falsa
    if ($autorizer["livello"]<$request_livel){
      require "autorizer/low_livel.htm";
      exit;
    }
  } else {
    header ("location:admin.php?action=login");      // ---> questo è il
risultato
// che genera lo script
  }
?>
(END)-----------------------------------------------------------------------
Lo script mi ritorna a ("location:admin.php?action=login") [vedi punto (4)]
quindi è falsa la if (isset($autorizer["livello"])
questo accade perchè l'array $autorizer non ha la voce 'livello'.
Eppure l'errore non è nel punto (1) altrimenti non si andrebbe avanti con lo
script.
Credo che sia un problema legato alle Register Globals che non vengono
gestite bene nei vari include.
Non ho capito come mi devo comportare con gli include.
In particolare credo che l'array di cui al punto (1):
    $autorizer = array ("username" => $username, "password" => $password,
"livello" => $livello[0]);
non viene passato alle altre pagine.
---------------------------------
Ho cambiato session_register() con session_start ()
poi ho richiamato autorizer in questo modo
session_start();
  $autorizer = $_SESSION["autorizer"];
come ho letto nelle faq e sul sito 
php.net
Aveva funzionato. Ero felice.
Poi ho cambiato qualcosa e non ha funzionato più. Non mi sembra di aver
tolto qualcosa di importante, tant'è che non ricordo cos'era.
Ho letto su 
php.net
 di un problema con IIS che credo sia il server usato dal
provider:
----------------------------------------------------------------------------
----
SESSION LOST ON HEADER REDIRECT (CGI on IIS 5.0)
On the **CGI** version of PHP on IIS 5.0/Windows 2000, the following code
will not work as expected:
/***** sess1.php *****/
session_start();
$_SESSION["key1"] = "testvalue";
header("Location: sess2.php");
/***** sess2.php *****/
session_start();
echo "key1 = '".$_SESSION["key1"]."'";
PROBLEM:
All session data is lost after a header redirect from the first page on
which the session is initialized. The problem is, the PHPSESSID cookie is
not being sent to the browser (ANY browser, IE or Mozilla) on the initial
session page with the header("Location: ...") redirect. This is unrelated to
client cookie settings - the set-cookie: header just isn't sent.
--------------------------------------------------------------------------
non sono sicuro che sia questo il problema.
Un'altro dubbio nasce dal fatto che $autorizer è un array e non so come si
comporta $_SESSION["autorizer"]; con gli array.
                ***********------------------***************
L'ERRORE  è il seguente:
Uninitialized string offset: 0
e si riferisce a questa riga
if (isset($autorizer["livello"])){
Grazie per l'attenzione
Luciano Amodio

 non so come si comporta $_SESSION["autorizer"]; con gli array.
print ($_SESSION["authorizer"]["username"]);
-- 
I'am what I'am, I do what I can
Sei un newbie? Leggi questo 
http://tinyurl.com/2q3o9

 Utilizza gli array super globali e' meglio.
non sono riuscito a trovare nulla sugli array superglobali, cosa significa
esattamente il termine?
è
$_SESSION= array ("username" => $username, "password"
=> $password, "livello" => $livello[0]);
???
Grazie
Luciano

 significa esattamente il termine?
 
http://it2.php.net/manual/en/language.variables.predefined.php
