![]() |
![]() |
|
| Condividi questo contenuto nei Social Network: |
|
Tweet |
|
|
|
Ti stiamo aspettando: Registrati subito e gratis. Entra a far parte di una delle comunità più attive in Italia. Se hai dimenticato i tuoi dati li puoi recuperare subito. |
||||
|
|||||||||
|
|
LinkBack | Strumenti di discussione |
|
|
#1 (permalink) |
|
Esperto
Data di registrazione: Aug 2006
Messaggi: 281
|
Facciamo sul serio - gestire i miei utenti
Salve a tutti e buon anno.
Spero di non creare problemi con la mia domanda e che sia il posto giusto per postarla. e da poco che sono del mondo php e cerco sempre di arrivare un po piu in la con il mio sito. Quello che chiedo è se il mio raggionameto e poi applicabile in pratica: Io ho un sito dove ho degli utenti si loggano ad un area riservata che elenca una serie di link. Io voglio tacciare i movimenti degli utenti, cioe sapere su quali link l'utente pino clicca. All'inizio della mia carriera di webmaster avrei creato una pagina personale per ogni utente e avrei monitorato ogni link con un contalink Ma adesso, com quasi mille utenti, non e proprio il caso. Quindi arriviamo al succo della domanda. per risolvere il problema ho pensato a questo: 1.Dopo il login, reindirizzo a una pagina tipo utenti.php?id=nomeutente 2.l'utente, dopo essersi loggato, accede all'area riservata che contiene una serie di link e su ogni link implemento il nome dell'utente ( non so come) Cosi secondo me, sempre tramite una sorta di conta click dovrei riuscire a capire che l'utente XXX ha cliccato su quei link. ora vi chiedo se questo ragionamento fila o è una ca...ta. ciao a tutti e auguri. ----------------- scusate ma non so perche il messaggio è stato postato 2 volte |
|
__________________
--> Soluzioni professionali per il tuo Joomla! <-- Ultima modifica di fre2004 : 02-01-07 18:59. |
|
|
|
|
|
|
|
|
#2 (permalink) |
|
User
Data di registrazione: May 2006
Messaggi: 31
|
Ciao fre2004, buon anno a te.
Io piu' che usare una variabile GET utilizzerei una SESSIONE. Quando l'user esegue il login salvi sulla sessione un campo con il suo username,in modo tale che: 1. Controllando se la sessione esiste, puoi anche controllare che l'user abbia eseguito il login. 2. L'utente non puo' manomettere come nel caso delle variabile GET il tuo counter inserendo un nome di un altro username nell'indirizzo. Poi al posto dell'indirizzo vero e propio potresti crearti un "get_link.php?id=ID" che: 1. Riporti nel tuo database il click dell'utente 2. Redirecti l'utente nel sito Naturalmente questo metodo necessita di un database. |
|
__________________
` www.voiceofthesoul.tk In tribute of Chuck Schuldiner Ultima modifica di dea7h : 02-01-07 19:58. |
|
|
|
|
|
|
#3 (permalink) |
|
Esperto
Data di registrazione: Aug 2006
Messaggi: 281
|
un esempio pratico, se non è troppo lungo?
|
|
__________________
--> Soluzioni professionali per il tuo Joomla! <-- |
|
|
|
|
|
|
#4 (permalink) |
|
User
Data di registrazione: May 2006
Messaggi: 31
|
Hmn... facciamo un esempio;
Partiamo dal principio. Crei sul tuo database le tabelle che ci servirranno per farti il tuo piccolo sistema di contaclick. Ci servono due tabelle. Una `click` dove andiamo a inserire tutti i click effettuati dagli utenti, mentre nella seconda tabella chiamata `link` andiamo a inserire i link. La struttura di click è questa: - ID (Non credo debba aggiungere altro:P) - Utente (contiene il nome dell'utente che effettua un click) - Sito (Servirà a definire su quale link ha cliccato) - Timestamp (Ho inserito anche questo campo nel caso tu voglia vedere in un determinato arco di tempo quante volte questo user ha cliccato su un link) Codice:
SQL: CREATE TABLE `click` ( `id` INT( 5 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY , `utente` VARCHAR( 5 ) NOT NULL , `link` VARCHAR( 5 ) NOT NULL , `timestamp` INT( 20 ) UNSIGNED NOT NULL ) ENGINE = MYISAM ; - ID - Link (qui puoi aggiungerci anche altri campi come per esempio una descrizione al link o qualsiasi altra cosa vuoi) Codice:
SQL: CREATE TABLE `link` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY , `link` VARCHAR( 255 ) NOT NULL , UNIQUE ( `link` ) ) ENGINE = MYISAM ; Percui crea la tua pagina go_url.php e ci inserisci Codice:
<?php $config['host'] = 'localhost'; $config['user'] = ''; $config['pass'] = ''; $config['database'] = ''; if(!$_SESSION['user'] || empty($_SESSION['user'])) {echo 'Devi prima seguire il login'; return 0;} if(!$_GET['id'] || !is_numeric($_GET['id'])) {echo 'L\'i deve essere numerico'; return 0;} $m_d = mysql_connect($config['host'],$config['user'],$config['pass']); if(!$m_d) { echo 'Connessione al database mysql non stabilita';return 0;} mysql_select_db($config['database']); $r_h = mysql_query('SELECT link FROM `link` WHERE id = '.$_GET['id']) or die('Query non valida'); if(mysql_num_rows($r_h) === 1) { $r = mysql_fetch_assoc($r_h); $q = 'INSERT INTO `click`(utente,link,timestamp) VALUES(\''.$_SESSION['user'].'\',\''.$_GET['id'].'\',UNIX_TIMESTAMP())'; $r_h = mysql_query($q) or die('Query non valida'); if(mysql_affected_rows() === 1) header('Location: '.$r['link']); // Qui puoi gestirti il redirect come vuoi se via php o via JS } else { echo 'Link inesistente o rimosso dall\'admin'; } mysql_close(); ?> Bhè...alla fine non è piu' un esempio..è il code vero e propio; P.S: Dò per scontato che sai eseguire query su MYSQL se cosi' fosse nn avrai difficoltà a farti il codice per stampare nella pagina i link 'http://tuodominioblabla/go_url.php?id=numero'; Il numero dovrai prendertelo con una semplice select nella tabella `link`. |
|
__________________
` www.voiceofthesoul.tk In tribute of Chuck Schuldiner Ultima modifica di dea7h : 02-01-07 21:05. |
|
|
|
|
|
|
#5 (permalink) |
|
Esperto
Data di registrazione: Aug 2006
Messaggi: 281
|
ok. ora ci provo,
grazie mille. |
|
__________________
--> Soluzioni professionali per il tuo Joomla! <-- |
|
|
|
|
|
|
#6 (permalink) |
|
Esperto
Data di registrazione: Aug 2006
Messaggi: 281
|
ho fatto tutto e fatto una prova, mi dice che devo eseguireil login.
intuisco che è unproblema di sessioni. io ho gia una pagina dove gli utenti si loggano. il problema è che uso dreamwaver per creare il codice. dimmi se ci ho preso: la sessione sulla pagina di login ha un nome che non combacia con quello del codice che mi hai dato, giusto? quindi, devo cambiare qualcosa alla sessione? allego il codice del form per il login: <?php // *** Validate request to login to this site. if (!isset($_SESSION)) { session_start(); } $loginFormAction = $_SERVER['PHP_SELF']; if (isset($_GET['accesscheck'])) { $_SESSION['PrevUrl'] = $_GET['accesscheck']; } if (isset($_POST['username'])) { $loginUsername=$_POST['username']; $password=$_POST['password']; $MM_fldUserAuthorization = ""; $MM_redirectLoginSuccess = "welcome.php"; $MM_redirectLoginFailed = "errore-login.html"; $MM_redirecttoReferrer = false; mysql_select_db($database_gcv, $gcv); $LoginRS__query=sprintf("SELECT username, password FROM user WHERE username='%s' AND password='%s'", get_magic_quotes_gpc() ? $loginUsername : addslashes($loginUsername), get_magic_quotes_gpc() ? $password : addslashes($password)); $LoginRS = mysql_query($LoginRS__query, $gcv) or die(mysql_error()); $loginFoundUser = mysql_num_rows($LoginRS); if ($loginFoundUser) { $loginStrGroup = ""; //declare two session variables and assign them $_SESSION['MM_Username'] = $loginUsername; $_SESSION['MM_UserGroup'] = $loginStrGroup; if (isset($_SESSION['PrevUrl']) && false) { $MM_redirectLoginSuccess = $_SESSION['PrevUrl']; } header("Location: " . $MM_redirectLoginSuccess ); } else { header("Location: ". $MM_redirectLoginFailed ); } } ?> |
|
Ultima modifica di fre2004 : 02-01-07 21:55. |
|
|
|
|
|
|
#7 (permalink) |
|
User
Data di registrazione: May 2006
Messaggi: 31
|
Codice:
$_SESSION['MM_Username'] = $loginUsername; Un altra,devi riprendere la vecchia sessione,questo puoi farlo inserendo dopo il <?php il comando session_start(); |
|
__________________
` www.voiceofthesoul.tk In tribute of Chuck Schuldiner |
|
|
|
|
|
|
#8 (permalink) |
|
Esperto
Data di registrazione: Aug 2006
Messaggi: 281
|
ho risolto anche qui.
ancora grazie. |
|
__________________
--> Soluzioni professionali per il tuo Joomla! <-- |
|
|
|
|
|
|
#9 (permalink) |
|
User Attivo
Data di registrazione: Dec 2004
Ubicazione: abito sulla luna e ogni volta che mi telefono è un'interrurbana
Messaggi: 2,413
|
se vuoi creare un sistema di gestione utenti efficace dai una sbirciata alle pillole in rilievo in questa sezione, è stata sviluppata una discussione su come fare il login in modo veramente figo.
![]() |
|
__________________
bilancio familiare |
|
|
|
|
|
|
#10 (permalink) |
|
User Newbie
Data di registrazione: Feb 2011
Ubicazione: mestre
Messaggi: 4
|
Ciao a tutti,
spero che mi possiate trovare una soluzione, visto che è da due settimane che ci sto sbattendo la testa. Ho seguito questa discussione, ho risolto il problema che ha riscontrato "fre2004" ma mi è comparso un altro: if(!$_GET['id'] || !is_numeric($_GET['id'])) {echo 'L\'i deve essere numerico'; return 0; Sulla browser continua a dirmi che "L'i deve essere numerico" Non capisco il motivo, ho provato di tutto ma continuo a non capire.. Vi posto anche login.php.. --------------------------------------- <?php include 'dbc.php'; $err = array(); foreach($_GET as $key => $value) { $get[$key] = filter($value); //get variables are filtered. } if ($_POST['doLogin']=='Login') { foreach($_POST as $key => $value) { $data[$key] = filter($value); // post variables are filtered } $user_email = $data['usr_email']; $pass = $data['pwd']; if (strpos($user_email,'@') === false) { $user_cond = "user_name='$user_email'"; } else { $user_cond = "user_email='$user_email'"; } $result = mysql_query("SELECT `id`,`pwd`,`full_name`,`approved`,`user_level` FROM users WHERE $user_cond AND `banned` = '0' ") or die (mysql_error()); $num = mysql_num_rows($result); // Match row found with more than 1 results - the user is authenticated. if ( $num > 0 ) { list($id,$pwd,$full_name,$approved,$user_level) = mysql_fetch_row($result); if(!$approved) { //$msg = urlencode("Account not activated. Please check your email for activation code"); $err[] = "Account not activated. Please check your email for activation code"; //header("Location: login.php?msg=$msg"); //exit(); } //check against salt if ($pwd === PwdHash($pass,substr($pwd,0,9))) { if(empty($err)){ // this sets session and logs user in session_start(); session_regenerate_id (true); //prevent against session fixation attacks. // this sets variables in the session $_SESSION['user_id']= $id; $_SESSION['user_name'] = $full_name; $_SESSION['user_level'] = $user_level; $_SESSION['HTTP_USER_AGENT'] = md5($_SERVER['HTTP_USER_AGENT']); //update the timestamp and key for cookie $stamp = time(); $ckey = GenKey(); mysql_query("update users set `ctime`='$stamp', `ckey` = '$ckey' where id='$id'") or die(mysql_error()); //set a cookie if(isset($_POST['remember'])){ setcookie("user_id", $_SESSION['user_id'], time()+60*60*24*COOKIE_TIME_OUT, "/"); setcookie("user_key", sha1($ckey), time()+60*60*24*COOKIE_TIME_OUT, "/"); setcookie("user_name",$_SESSION['user_name'], time()+60*60*24*COOKIE_TIME_OUT, "/"); } header("Location: myaccount.php"); } } else { //$msg = urlencode("Invalid Login. Please try again with correct user email and password. "); $err[] = "Invalid Login. Please try again with correct user email and password."; //header("Location: login.php?msg=$msg"); } } else { $err[] = "Error - Invalid login. No such user exists"; } } ?> Vi prego, per un neofita come me essere arrivato fin qui con le proprie mani è stato un miracolo. Spero di trovare una soluzione. Grazie a tutti in anticipo! Ciao! |
|
|
|
|
|
#11 (permalink) |
|
User Newbie
Data di registrazione: Feb 2011
Ubicazione: mestre
Messaggi: 4
|
Sono di nuovo io
![]() Qualcuno riuscirebbe a sistemarmelo? Sono anche disposto ad offrire una ricompensa a chi riesce a sistemarlo, credo che sia il minimo per il vostro aiuto.A ciascuno il suo, insomma ![]() Grazie ragazzi! |
|
|
|