Newsgroup: it.comp.www.php
Titolo: Errore inspiegabile: "Undefined index: uid"

Ciao a tutti, sto scrivendo un sito che abbia l'utilizzo dei cookie e
delle sessioni come parametri di accesso per diversi tipi di utenti.
Premetto che lo stesso codice che sto per mostrarvi funziona
tranquillamente e senza dare problemi, sul server web del mio
provider. Purtroppo siccome non voglio fare molto traffico ftp mi sono
ricreato l'ambiente php + mysql sul mio pc di casa. Il problema è che
alcune funzioni non riesce a leggerle in locale il pc mentre sul
server tutto funziona correttamente. Le pagine incriminate sono la
index.php, di seguito il codice:
****************************** INIZIO CODICE PHP INDEX.PHP
*************************************
<?php
include_once("include/config.php");
include_once("include/auth.lib.php");
list($status, $user) = auth_get_status();
if($status == AUTH_LOGGED & auth_get_option("TRANSICTION METHOD") ==
AUTH_USE_LINK){
    $link = "?uid=".$_GET['uid'];
}else    $link = '';
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=windows-1252">
<title>TURISMO SUNRISE: Home Page</title>
</head>
<body>
<center>
<table border=0 width="760" id="table1" cellpadding="2"
cellspacing="0">
<LINK HREF="
http://www.pointweb2000.it/css/style2.css
"
rel="stylesheet" type="text/css">
<tr>
<td valign=top>
<center>
    <table border="0" width="760" id="table1" cellpadding="0"
cellspacing="0">
    <tr>
    <td style="border-left:2px solid #000080; border-right:2px solid
#000080; border-top:2px solid #000080; border-bottom:2px solid
#000080; padding-left = 1px; padding-right = 1px; padding-top = 1px;
padding-bottom = 1px"><center><?include("top.php");?>
    </td>
    </tr>
    </table>
</td>
</tr>
<tr>
<td>
    <table border="0" width="760" id="table1" cellpadding="0"
cellspacing="0">
    <tr>
    <td>
        <table border="0" width="760" id="table1" cellpadding="0"
cellspacing="0">
        <tr>
            <td valign = top>
            <table border="0" bordercolor=000030 width="136"
id="table1" cellpadding="0" cellspacing="0">
            <tr>
            <td style = "border-left:2px solid #000080; border-right:
2px solid #000080; border-top:2px solid #000080; border-bottom:
2px                     solid #000080; padding-left = 1px; padding-
right = 1px; padding-top = 1px; padding-bottom = 1px">
            <?include("sx.php");?>
            </td>
            </tr>
            </table>
            </td>
            <td width = "1">
            &nbsp;
            </td>
            <td valign = top>
            <table border="0" bordercolor=000030 width="470"
id="table1" cellpadding="0" cellspacing="0">
            <tr>
            <td style="border-left:2px solid #000080; border-right:2px
solid #000080; border-top:2px solid #000080; border-bottom:
2px                     solid #000080; padding-left = 1px; padding-
right = 1px; padding-top = 1px; padding-bottom = 1px">
            <?include("centro.php");?>
            </td>
            </tr>
            </table>
            </td>
            <td width = "1">
            &nbsp;
            </td>
            <td valign="top">
            <table border="0" width="136" id="table1" cellpadding="0"
cellspacing="0">
            <tr>
            <td valign="top" style = "border-left:2px solid #000080;
border-right:2px solid #000080; border-top:2px solid #000080; border-
bottom:2px                     solid #000080; padding-left = 1px;
padding-right = 1px; padding-top = 1px; padding-bottom = 1px"><?
include("dx.php");?>
            </td>
            </tr>
            </table>
            </td>
        </tr>
        </table>
    </td>
    </tr>
    </table>
</td>
</tr>
<tr>
<td>
    <table border="0" width="760" id="table1" cellpadding="0"
cellspacing="0">
    <tr>
    <td style = "border-left:2px solid #000080; border-right:2px solid
#000080; border-top:2px solid #000080; border-bottom:
2px                     solid #000080; padding-left = 1px; padding-
right = 1px; padding-top = 1px; padding-bottom = 1px"><?
include("basso.php");?>
    </td>
    </tr>
    </table>
</td>
</tr>
</table>
</body>
</html>
****************************** FINE CODICE PHP INDEX.PHP
*************************************
naturalmente in testa al documento ci sono due file che vengono
inclusi in testa a questo documento che sono:
auth.lib.php e questo sotto è il codice:
****************************** INIZIO CODICE PHP AUTH.LIB.PHP
*************************************
<?php
$_AUTH = array(
    "TRANSICTION METHOD" => AUTH_USE_COOKIE
);
function auth_set_option($opt_name, $opt_value){
    global $_AUTH;
    $_AUTH[$opt_name] = $opt_value;
}
function auth_get_option($opt_name){
    global $_AUTH;
    return is_null($_AUTH[$opt_name])
        ? NULL
        : $_AUTH[$opt_name];
}
function auth_clean_expired(){
    global $_CONFIG;
    $result = mysql_query("SELECT creation_date FROM ".
$_CONFIG['table_sessioni']." WHERE uid='".auth_get_uid()."'");
    if($result){
        $data = mysql_fetch_array($result);
        if($data['creation_date']){
            if($data['creation_date'] + $_CONFIG['expire'] <= time())
{
                switch(auth_get_option("TRANSICTION METHOD")){
                    case AUTH_USE_COOKIE:
                        setcookie('uid');
                    break;
                    case AUTH_USE_LINK:
                        global $_GET;
                        $_GET['uid'] = NULL;
                    break;
                }
            }
        }
    }
     mysql_query("
    DELETE FROM ".$_CONFIG['table_sessioni']."
    WHERE creation_date + ".$_CONFIG['expire']." <= ".time()
    );
}
function auth_get_uid(){
     $uid = NULL;
    switch(auth_get_option("TRANSICTION METHOD")){
        case AUTH_USE_COOKIE:
            global $_COOKIE;
            $uid = $_COOKIE['uid'];
        break;
        case AUTH_USE_LINK:
            global $_GET;
            $uid = $_GET['uid'];
        break;
    }
    return $uid ? $uid : NULL;
}
function auth_get_status(){
    global $_CONFIG;
    auth_clean_expired();
    $uid = auth_get_uid();
    if(is_null($uid))
        return array(100, NULL);
    $result = mysql_query("SELECT U.nome as name, U.cognome as
surname, U.usr as username, U.tipo_cliente as tipo_accesso
    FROM ".$_CONFIG['table_sessioni']." S,".$_CONFIG['table_utenti']."
U
    WHERE S.user_id = U.codice_cliente and S.uid = '".$uid."'") or die
(mysql_error());
    if(mysql_num_rows($result) != 1)
        return array(100, NULL);
    else{
        $user_data = mysql_fetch_assoc($result);
        return array(99, array_merge($user_data, array('uid' =>
$uid)));
    }
}
function auth_login($uname, $passw){
    global $_CONFIG;
    $result = mysql_query("
    SELECT *
    FROM ".$_CONFIG['table_utenti']."
    WHERE usr='".$uname."' and psw='".$passw."'"
    ) or die (mysql_error());
    if(mysql_num_rows($result) != 1){
        return array(AUTH_INVALID_PARAMS, NULL);
    }else{
        $data = mysql_fetch_array($result);
        return array(AUTH_LOGEDD_IN, $data);
    }
}
function auth_generate_uid(){
    list($usec, $sec) = explode(' ', microtime());
    mt_srand((float) $sec + ((float) $usec * 100000));
    return md5(uniqid(mt_rand(), true));
}
function auth_register_session($udata){
    global $_CONFIG;
    $uid = auth_generate_uid();
    mysql_query("
    INSERT INTO ".$_CONFIG['table_sessioni']."
    (uid, user_id, creation_date)
    VALUES
    ('".$uid."', '".$udata['codice_cliente']."', ".time().")
    "
    );
    if(!mysql_insert_id()){
        return array(AUTH_LOGEDD_IN, $uid);
    }else{
        return array(AUTH_FAILED, NULL);
    }
}
function auth_logout(){
    global $_CONFIG;
    $uid = auth_get_uid();
    if(is_null($uid)){
        return false;
    }else{
        mysql_query("
        DELETE FROM ".$_CONFIG['table_sessioni']."
        WHERE uid = '".$uid."'"
        );
        return true;
    }
}
?>
****************************** FINE CODICE PHP AUTH.LIB.PHP
*************************************
ed anche il file config.php che trovate sotto:
****************************** INIZIO CODICE PHP CONFIG.PHP
*************************************
<?php
$_CONFIG['host'] = "localhost";
$_CONFIG['user'] = "root";
$_CONFIG['pass'] = "";
$_CONFIG['dbname'] = "test";
$_CONFIG['table_sessioni'] = "sessioni";
$_CONFIG['table_utenti'] = "cliente";
$_CONFIG['expire'] = 60;
//--------------
define('AUTH_LOGGED', 99);
define('AUTH_NOT_LOGGED', 100);
define('AUTH_USE_COOKIE', 101);
define('AUTH_USE_LINK', 103);
define('AUTH_INVALID_PARAMS', 104);
define('AUTH_LOGEDD_IN', 105);
define('AUTH_FAILED', 106);
$conn = mysql_connect($_CONFIG['host'], $_CONFIG['user'],
$_CONFIG['pass']) or die('Impossibile stabilire una connessione');
mysql_select_db($_CONFIG['dbname']);
?>
****************************** FINE CODICE PHP CONFIG.PHP
*************************************
detto questo, l'errore che mi da non appena carico la home page dal
titolo index.php mi da il seguente errore due volte:
Notice: Undefined index: uid in F:\Gianluca\prove_php\Pointweb\Siti
\sunrise\include\auth.lib.php on line 55
e non è solo questo il problema. Quando cerco di effettuare il login
sulla home page, ovviamente il sito mi porta nella pagina login.php
che ha il seguente codice:
Code:
<?php
include_once("include/config.php");
include_once("include/auth.lib.php");
list($status, $user) = auth_get_status();
if($status == AUTH_NOT_LOGGED){
    $uname = strtolower(trim($_POST['uname']));
    $passw = $_POST['passw'];
    if($uname == "" or $passw == ""){
        $status = AUTH_INVALID_PARAMS;
    }else{
        list($status, $user) = auth_login($uname, $passw);
        if(!is_null($user)){
            list($status, $uid) = auth_register_session($user);
        }
    }
}
switch($status){
    case AUTH_LOGGED:
        header("Refresh: 5;URL=index.php");
        echo '<div align="center">Sei gia connesso ... attendi il
reindirizzamento</div>';
    break;
    case AUTH_INVALID_PARAMS:
        header("Refresh: 5;URL=index.php");
        echo '<div align="center">Hai inserito dati non corretti ...
attendi il reindirizzamento</div>';
    break;
    case AUTH_LOGEDD_IN:
        switch(auth_get_option("TRANSICTION METHOD")){
            case AUTH_USE_LINK:
                header("Refresh: 5;URL=index.php?uid=".$uid);
            break;
            case AUTH_USE_COOKIE:
                header("Refresh: 5;URL=index.php");
                setcookie('uid', $uid, time()+3600*365);
            break;
            case AUTH_USE_SESSION:
                header("Refresh: 5;URL=index.php");
                $_SESSION['uid'] = $uid;
            break;
        }
        echo '<div align="center">Ciao '.$user['cognome'].' ...
attendi il reindirizzamento</div>';
    break;
    case AUTH_FAILED:
        header("Refresh: 5;URL=index.php");
        echo '<div align="center">Fallimento durante il tentativo di
connessione ... attendi il reindirizzamento</div>';
    break;
}
?>
qui invece mi da la sequenza di errore sotto riportata:
Notice: Undefined index: uid in F:\Gianluca\prove_php\Pointweb\Siti
\sunrise\include\auth.lib.php on line 55
Notice: Undefined index: uid in F:\Gianluca\prove_php\Pointweb\Siti
\sunrise\include\auth.lib.php on line 55
Warning: Cannot modify header information - headers already sent by
(output started at F:\Gianluca\prove_php\Pointweb\Siti\sunrise\include
\auth.lib.php:55) in F:\Gianluca\prove_php\Pointweb\Siti\sunrise
\login.php on line 36
Warning: Cannot modify header information - headers already sent by
(output started at F:\Gianluca\prove_php\Pointweb\Siti\sunrise\include
\auth.lib.php:55) in F:\Gianluca\prove_php\Pointweb\Siti\sunrise
\login.php on line 37
e naturalmente non reindirizza nuovamente alla pagina index.php. Ho
provato a settare i cookie sul pc e sono attivi e accettati. Cosa
posso fare per risolvere il problema in locale ?
Vi ringrazio come sempre per l'aiuto che certamente mi darete e vi
auguro buona notte !!

 }
In pratica utilizzi a seconda dei casi $_COOKIE['uid'] o $_GET['uid'], 
ma non è detto che tali parametri siano presenti. Potresti usare un 
isset per prevenire tale notice.
Tra l'altro non c'è bisogno di dichiarare global $_GET e $_COOKIE in 
quanto sono automaticamente globali.
Sul server online non ti dà problemi semplicemente perchè sarà 
disabilitata la visualizzazione dei notice (che sono errorini non 
critici). Il fatto che non vada il redirect è conseguenza della 
visualizzazione del notice.

 auguro buona notte !!
correggi gli errori..
e quando posti.. descrivi il problema in modo sintetico ma chiaro.. fornisci
solo la porzione di codice che presenta il problema e non lasciare messaggi
di 399 righe..
-- 
www.iuz-lab.info