- Home
- Categorie
- Coding e Sistemistica
- Coding
- Stampare utenti e ip dopo il login
-
Stampare utenti e ip dopo il login
Allora, quello che vorrei fare e un form di login che memorizzi il nick all' interno del db e lo stampa su schermo, compreso il suo IP. Ecco un esempio:
UTENTE1
123.456.78
UTENTE2
456.789.12Ho cominciato a fare
login.php
<html> <div align="center"> <form method="post" action="index.php" id="formlogin"> <br><br><br><br><label for="username">Username</label><input type="text" name="nick" id="username" /><br><br> <left><input type="submit" name="invia" id="login" value="ENTRA" /></form></div> </html>
index.php (dove stamperà nick e ip)
<?php include 'db.php'; session_start(); $nick = htmlspecialchars($_POST['nick']); if($nick != "Nick"){ $_SESSION['Nick'] = $nick; } ?>
db.php
<?php /* CONNESSIONE AL DATABASE */ $mysql['host'] = "localhost"; $mysql['user'] = "user"; $mysql['pass'] = ""; $database = "my_db"; mysql_connect($mysql['host'], $mysql['user'], $mysql['pass']) or die(mysql_error()); mysql_select_db($database) or die(mysql_error()); $time_refresh = 0; ?>
P.S: Per vedere l' ip della propria macchina remota faccio cosi
<?php echo $_SERVER['REMOTE_ADDR']; ?>
Ma io voglio vedere anche l' IP di altri utenti nella index
-
Qualcuno che mi dia una mano??!!??
-
Ciao ralph007,
devi semplicemente fare una query di inserimento nel database o di update a seconda di come organizzi il database.
-
Qualche esempio di codice??
-
Il codice dipende da come strutturi il database, come lo hai strutturato o comunque hai intenzione di strutturarlo?
-
Questa è la tabella che utilizzo per la mia chat
CREATE TABLE IF NOT EXISTS `chat` ( `time` text NOT NULL, `nick` text NOT NULL, `post` text NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
e funziona bene. Appena faccio il login in nick viene inserito nel campo NICK. Ecco io vorrei far in modo che risultino solo i nick presenti nella chat e sotto i lori IP. (ovviamente in una tabella apparte). Poi nella chat ho un logout che dovrebbe distruggere la sessione (è quello mi funziona).
-
Se devi mostrare solo i presenti nella chat la cosa cambia radicalmente in quanto quasi nessuno esegue il logout per uscire di norma, e quindi per sapere se un utente è online devi o basarti sul suo ultimo reflesh o sul tempo trascorso dall'ultimo messaggio inviato.
-
Quindi dal suo ultimo refresh mi sembra la migliore cosa...quindi per la lista utenti online dovrei creare una nuova tabella? Come procedo? Su google quello che ho trovato fin' ora sono tutti contatori.
vorrei qualcosa che si adattasse al mio login, qualcosa di semplice e non di complesso.
-
Allora con il reflesh ti basterebbe aggiungere un campo con data_ultimo_reflesh ed ad ogni aggiornamento della chat fare una query update.
Tieni comunque presente che un numero elevato di utenti con un reflesh ad intervalli molto brevi ti farà fare moltissimi update continui, e quindi accessi continui al disco in scrittura che potrebbero crearti problemi di carico non indifferenti.
-
quindi. Cosa mi consigli?
-
Beh dipende da quanti utenti pensi di avere e ogni quanto avviene un reflesh, se si tratta di numeri piccoli il problema non si pone.
In ogni caso se invece di usare la stessa tabella ti appoggi ad una nuova di tipo MEMORY utilizzi la ram invece del disco, e hai prestazioni nettamente più elevate in scrittura, però se il mysql si riavvia tutto il contenuto della tabella viene perso, trattandosi comunque esclusivamente di una lista degli online non credo comunque sia un problema.
-
Potresti farmi un esempio di script fatto in maniera veloce? Come meglio credi...poi me lo aggiusto io...giusto un esempio...
-
Ecco questo script mi funziona bene. Proprio come lo volevo io...però vorrei anche il nick di ciascun utente affianco all' IP. Come faccio? Ecco il source!
CREATE TABLE IF NOT EXISTS `online_users` ( `id_log` int(11) NOT NULL AUTO_INCREMENT, `key_user` varchar(255) NOT NULL, `data_last_log` datetime NOT NULL, PRIMARY KEY (`id_log`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;
<?php $conn = mysql_connect('localhost', 'ralph007', '') or die(mysql_error()); $selezione_db = mysql_select_db('my_ralph007', $conn) or die(mysql_error()); require_once('index.php'); $onlineIP = New OnlineUsers; ?> <html> <head> <title>Utenti Online</title> </head> <body> <?php // number $numero = $onlineIP->get_count_online(); echo '<h3>IP Utenti collegati: '. $numero .'</h3>'; if($numero>=1){ echo '<ul>'; // ip online $log = $onlineIP->get_online_key(); foreach($log as $log){ echo '<li>' . $log . '</li>'; } echo '</ul>'; } ?> </body> </html> <?php Class OnlineUsers{ protected $key; protected $minute_finish = 10; public function __construct(){ $this->key = $this->get_key(); // otteniamo la key $this->clear_table(); // eliminiamo gli utenti "scaduti" if(!$this->isset_key()){ // non esiste la key $this->insert_key(); // allora la inseriamo } else{ $this->update_data_key(); // altrimenti aggiorniamo il timestamp } } protected function isset_key(){ $query = "SELECT * FROM online_users WHERE key_user='" .mysql_real_escape_string($this->key). "'"; $result = mysql_query($query) or die(mysql_error()); if(mysql_num_rows($result)>=1){ return TRUE; } return FALSE; } protected function update_data_key(){ $query = "UPDATE online_users SET data_last_log=NOW() WHERE key_user='" . mysql_real_escape_string($this->key) . "'"; $result = mysql_query($query) or die(mysql_error()); return TRUE; } protected function insert_key(){ $query = "INSERT INTO online_users SET key_user='" . mysql_real_escape_string($this->key) . "', data_last_log=NOW()"; $result = mysql_query($query) or die(mysql_error()); return mysql_insert_id(); } protected function clear_table(){ $query = "DELETE FROM online_users WHERE data_last_log<=DATE_SUB( NOW() , INTERVAL ". intval($this->minute_finish) ." MINUTE )"; $result = mysql_query($query) or die(mysql_error()); return TRUE; } protected function get_key(){ $ip = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : 'undefined'; return $ip; } public function get_count_online(){ $query = "SELECT COUNT(*) AS num_user FROM online_users ORDER BY data_last_log ASC"; $result = mysql_query($query) or die(mysql_error()); $fetch = mysql_fetch_array($result); return $fetch['num_user']; } public function get_online_key(){ $query = "SELECT key_user FROM online_users ORDER BY data_last_log ASC"; $result = mysql_query($query) or die(mysql_error()); $online = array(); while($row = mysql_fetch_array($result)){ $online[] = stripslashes($row['key_user']); } return $online; } } ?>
-
Aggiungi un campo con l'id dell'utente nel database, e modifica le query di inserimento per mettere anche l'id dell'utente.
-
Quindi modifico la tabella aggiungendo nick
CREATE TABLE IF NOT EXISTS `online_users` ( `nick` text(30) NOT NULL, `id_log` int(11) NOT NULL AUTO_INCREMENT, `key_user` varchar(255) NOT NULL, `data_last_log` datetime NOT NULL, PRIMARY KEY (`id_log`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;
POI??