Salve ragazzi,
ho finito da un bel po' l'accesso degli utenti al sito che sto facendo, ma succede una cosa strana... ora vi incollo un po' di codice:
Questo è il codice del form di accesso (quello classico nome utente e password) con un checkbox <input type="checkbox" name="ricorda" value="mem"> per non dover riscrivere i dati al prossimo accesso quindi per sfruttare i cookie:
<?php
include "server.php";
define("ERRORE", "ATTENZIONE: I dati inseriti non sono corretti");
if(isSet($_POST['nickname']) && isSet($_POST['password']))
{
$enter = login();
if($enter == 0)
echo "
<font color='#b61f24'>" . ERRORE . "</font>";
}
?>
************************************************** *********
Questo di seguito invece è la funzione login() richiamata dal codice precedente:
function login()
{
global $num_res;
global $utente;
testnick();
if($num_res != 0)
{
if(isset($_POST['nickname']) && isset($_POST['password']))
{
$pwdcrypt = md5($_POST['password']);
$query = "SELECT user_nickname, user_password FROM user WHERE user_nickname='".mysql_real_escape_string ($_POST['nickname'])."' and user_password='".mysql_real_escape_string ($pwdcrypt)."' ";
$result = mysql_query($query)
or die(mysql_error());
if(mysql_num_rows($result) == 1)
{
if(isset($_POST['ricorda']))
{
$utente = $_POST['nickname'];
setcookie("sav_user", $utente, time()+60*60*24*7);
session_start();
$_SESSION['authuser'] = 1;
refresh_user();
}
else
{
session_start();
$_SESSION['nickname'] = $_POST['nickname'];
$_SESSION['password'] = $_POST['password'];
$_SESSION['authuser'] = 1;
refresh_user();
}
}
else
{
$_SESSION['authuser'] = 0;
}
$access = $_SESSION['authuser'];
return ($access);
}
}
}
Quindi si può notare che il codice non fa altro che verificare i dati inseriti (nome utente e password) e se è stato selezionato il checkbox "ricorda" e in questo caso procede l'accesso utilizzando i cookie setcookie("sav_user", $utente, time()+60*60*24*7); e poi procede con refresh_user() che incollo qui di seguito:
function refresh_user()
{
if(isset($_COOKIE['sav_user']))
{
$nick = $_COOKIE['sav_user'];
}
else
{
if(!(isset($_COOKIE['sav_user'])) && ($_SESSION['authuser'] == 1))
{
$nick = $_SESSION['nickname'];
}
}
/* Aggiorniamo il numero di accessi dell utente */
$update="UPDATE user SET user_accessi=user_accessi+1 WHERE user_nickname='$nick'";
$start = mysql_query($update)
or die(mysql_error());
$query = "SELECT user_accessi FROM user WHERE user_nickname='$nick'";
$go = mysql_query($query)
or die(mysql_error());
$row = mysql_fetch_array($go);
Non ho incollato tutto il codice della funzione ma solo quello necessario al mio problema.
Come potete vedere qui aggiorno il numero di accessi che ha effettuato l'utente che effettua l'accesso, quindi incremento un numero (user_accessi) di 1. Se utilizzo la sessione temporanea $_SESSION['nickname'], e vado sul server mysql noto che gli accessi si sono incrementati di 1, ma se invece utilizzo il cookie $_COOKIE['sav_user'], quando vado a controllare sul server noto che i dati non sono cambiati, non sono state effettuate modifiche al database ma è rimasto tutto com'era prima di accedere. Il codice mi sembra giusto anche perchè l'if che uso all'inizio della funzione lo utilizzo anche altrove e funziona, non capisco...
Per piacere aiutatemi ho cercato di essere più chiaro possibile nella spiegazione, non so cos'altro fare.
Grazie in ogni caso
Ciao!
![]()