• ModSenior

    L'ip cambia solo quando riconnetti ad internet, quindi non si presenta il problema, ma dovresti rpendere i nick delle persone che hanno aggiornato di recente e usando un file di testo non mi sembra nemmeno facile...


  • User Attivo

    @Thedarkita said:

    L'ip cambia solo quando riconnetti ad internet, quindi non si presenta il problema, ma dovresti rpendere i nick delle persone che hanno aggiornato di recente e usando un file di testo non mi sembra nemmeno facile...

    mi aiutate a scrivere del codice, mi piacerebbe tanto fare questa cosa😊


  • User Attivo

    mi aiutate a fare questa cosa? :bho:


  • User

    Ciao,
    Volevo provare ad aiutarti ma volevo capire inanzitutto che dati hai di base. Leggevo che un utente si logga ma non si slogga? cioè si autentifica per i suoi messaggi intendi giusto? Il nome dell'utente poi che si è loggato: vuol dire che hai una lista di utenti registrati nel sito?
    Cmq io farei cosi:
    File:

    1. testo_chat.txt
    2. post_utenti.txt

    Quando un utente posta qualcosa salvi il suo testo nel file che contiene i log della chat (testo_chat.txt), al tempo stesso dentro a "post_utenti.txt" salvi un record che ti identifica che quell'utente ha postato a tot ora (vedi fine post per esempio concreto). Ogni qual volta un utente posta si avvia un metodo che controlla la data e ora dell'ultimo post e se questa è > di un certo lasso di tempo cancelli il record. Il metodo deve ovviamente controllare data e ora di tutti gli utenti che trova dentro il file "post_utenti.txt".In questo modo il file conterrebbe solo gli utenti "online" (piu che altro gli utenti che han postato qualcosa nel lasso di tempo <= del lasso di tempo deciso da te). Il problema resta che se non si posta piu per un bel po' non viene chiamato il metodo di controllo e puo' sembrare che ci siano tanti utenti attivi anche se in realtà non cè nessuno 😃

    post_utenti.txt : immagino un file del tipo
    UTENTE | DATA

    Solo un'idea! Penso che con l'uso di altri linguaggi si possa fare qualcosa di molto piu serio cmq per provare va bene 😃

    Ciao!


  • Bannato User Attivo

    realizza il tuo sito con mkportal cms, è possibile in modo molto facile e potrai vedere anche la posizione dei tuoi utenti, non solo se sono in chat, ma anche se stanno controllando altre pagine o moduli.


  • User Attivo

    a me interesserebbe fare uscire sul sito il nome degli utenti connessi...
    alla fine credo sia lo stesso che per te riguardo la chat...


  • User Attivo

    @temp said:

    CiaoVolevo provare ad aiutarti ma volevo capire inanzitutto che dati hai di base. Leggevo che un utente si logga ma non si slogga? cioè si autentifica per i suoi messaggi intendi giusto? Il nome dell'utente poi che si è loggato: vuol dire che hai una lista di utenti registrati nel sito?
    Ciao!

    ciao e grazie guarda di php poco ne so per le tue domande allora si l'utente si logga ma poi non c'è il logout e si autentifica per i suoi messaggi che scrive... per via della lista si la lista deigli utenti è contenuta nel file dei dati dell'utente che contiene il nick la password e altri dati, leggendo quello che vuoi fare tu, mi pare la stessa cosa più o meno che esiste già nella mia chat solo che invece di comparire il nome delgli utenti mi appare solo il numero degli utenti on-line, adesso mi piacerebbe anche avere il nome degli utenti come si fa?: ti posto intanto il file online.txt

    [php]<html>
    <head>
    <title>Persone online</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <script language="javascript">
    function apri(nick_ut)
    {
    window.open("profilo.php?nick=" + nick_ut,nick_ut,"width=500, height=280, left=200");
    }
    </script>
    </head>
    <body bgcolor="#E7E9FA">
    <?
    include("config.php");
    $ar_online=file($file_online);
    $dim=count($ar_online);
    for ($i=0;$i<$dim;$i++)
    {
    $ut_online=chop($ar_online*);
    $utente=explode("|",$ut_online);
    $nick_ut=$utente[0];
    $data=$utente[1];
    $orario=$utente[2];
    $parti_data=explode("/",$data);
    $giorno=$parti_data[0];
    $mese=$parti_data[1];
    $anno=$parti_data[2];
    $parti_orario=explode(":",$orario);
    $ora=$parti_orario[0];
    $minuti=$parti_orario[1];
    $secondi=$parti_orario[2];
    $ts=mktime($ora,$minuti,$secondi,$mese,$giorno,$anno);
    $diff=time()-$ts;
    $min_trascorsi=$diff/60;
    if ($min_trascorsi<$min_online)
    {
    $array_on[]=$nick_ut;
    }
    }
    $ar_unico=array_unique($array_on);
    $dim_unico=count($ar_unico);
    echo "<font face="Verdana" size="1">$dim_unico persone online</font>";
    ?>
    </body>
    </html>
    [/php]


  • User

    Ciao 😃
    Mi pare che nel file alla fine vedo un
    $array_on[]=$nick_ut;
    Cioè $array_on è un array che contiene una lista di utenti. Ok allora se cosi è vero per test prova questo codice
    Prima o in mezzo all 'echo metti
    print_r($array_on);
    Questo metodo stampa e visualizza bene tutto l'array. Se dentro ci trovi gli utenti online il gioco è fatto! fai un ciclo for che per ogni utente nell'array stampa a video il suo nick!

    Ciao 😃


  • User Attivo

    ho controllato...


  • User Attivo

    @temp said:

    Ciao 😃
    un ciclo for che per ogni utente nell'array stampa a video il suo nick!

    Ciao 😃

    si è come dici tu....
    ehm come faccio a farlo quindi? mi aiuteresti? :mmm:

    c'è da dire però che questo modo non è che mi vada molto a genio perchè quando un utente scrive il messaggio ok è online però poi se rimane online ma non scrive più me lo da non online però, come posso fare?


  • User Attivo

    Beh ma almeno non fa refresh di una pagina come lo vedi? puoi sempre condizionare l'individuazione non alla scrittura di qualcosa ma al caricamento della pagina e cmq poi l'unico modo per tenerne traccia è impostare una sorta di time_out passato il quale l'utente si presume off-line, time-out che viene resettato ad ogni nuova cosa che scrive... poi dovresti "captare" in qualche modo quando se ne va...

    Senza un database tutta sta roba la devi salvare o in una sessione (forse la cosa migliore) o come si diceva nel log.txt, ma è un discreto sbatti... è assolutamente da escludere che implementi una chat open source già attrezzata?

    keiske


  • User Attivo

    @Privacy-Impresa said:

    Beh ma almeno non fa refresh di una pagina come lo vedi? puoi sempre condizionare l'individuazione non alla scrittura di qualcosa ma al caricamento della pagina e cmq poi l'unico modo per tenerne traccia è impostare una sorta di time_out passato il quale l'utente si presume off-line, time-out che viene resettato ad ogni nuova cosa che scrive... poi dovresti "captare" in qualche modo quando se ne va...

    keiske

    eh mi piacerebbe fare come dici ma il php non lo conosco, come devo fare per condizionare la cosa al caricamento della pagina e poi non potrei tenere conto dell'ip per vedere quando c'è o non è on-line


  • User Attivo

    Tutto dipende da cosa hai a disposizione... tecnicamente hai il supporto php? se non ce l'hai è anche inutile provare a farci qualcosa... se ce l'hai cercando un po' in rete gli script buoni per fare tutte queste cose li trovi e qui magari trovi qualche aiuto per capirci qualcosa in più...

    keiske


  • User

    Per risponderti:

    echo "<font face="Verdana" size="1">$dim_unico persone online</font>";
    Sostituisci con
    echo "<font face="Verdana" size="1">Online:";
    for($i=0;$i<count( $array_on);$i++)
    {
    echo $array_on*. ",";
    // Oppure se l'array è multidimensionale metti
    // echo $array_on*[Z];
    // con al posto di Z l'indice corretto in modo che esca il nick
    }
    echo "</font>";

    Poi discorso utente loggato che non posta : ad ogni pagina caricata nel tuo sito da un utente loggato dovresti fare il controllo se tale utente è loggato o meno..anche pagine dove cè solo da leggere nn solo la chat. Macchinoso ma mi viene in mente questo per ora.
    Per logout mi viene in mente un metodo java "OnUnload" che si innesca se un utente cambia pagina: potresti usarlo per capire quando gli utenti se ne vanno dal tuo sito e in quel caso sloggarli.


  • User Attivo

    @temp said:

    Poi discorso utente loggato che non posta : ad ogni pagina caricata nel tuo sito da un utente loggato dovresti fare il controllo se tale utente è loggato o meno..anche pagine dove cè solo da leggere nn solo la chat. Macchinoso ma mi viene in mente questo per ora.
    Per logout mi viene in mente un metodo java "OnUnload" che si innesca se un utente cambia pagina: potresti usarlo per capire quando gli utenti se ne vanno dal tuo sito e in quel caso sloggarli.

    e sapresti indicarmi come fare questa cosa?, ti dico il login lo farei solo sulla chat se mi aiuti ti ringrazio davvero tantissimo!:)


  • User Attivo

    Beh dipende da come fai il login... se il login lo fai memorizzando delle variabili di sessione basta che controlli se la sessione è attiva per quell'utente e esegui un'azione (mostri un bollino verde ad esempio) ma forse la complicazione è che le varibili di sessione (come i cookie) sono solo per chi è al pc... dovresti appoggiarti a un database mi sa, flaggando l'utente online e caricando chi è flaggato nella lista dei connessi...

    keiske


  • User Attivo

    @Privacy-Impresa said:

    Beh dipende da come fai il login... se il login lo fai memorizzando delle variabili di sessione basta che controlli se la sessione è attiva per quell'utente e esegui un'azione (mostri un bollino verde ad esempio) ma forse la complicazione è che le varibili di sessione (come i cookie) sono solo per chi è al pc... dovresti appoggiarti a un database mi sa, flaggando l'utente online e caricando chi è flaggato nella lista dei connessi...

    keiske

    questo è il codice che riguarda il login alla chat:
    [PHP]<?
    include("config.php");
    $nick=$_GET['nick'];
    $nick=strtolower($nick);
    $nick=stripslashes($nick);
    $password=$_GET['password'];
    $password=strtolower($password);
    $password_cr=crypt($password,$nick);
    $password_cr=str_replace("|","*",$password_cr);

    if (!(file_exists($file_reg)))
    {fopen($file_reg,"w");}
    $utente=$nick."|".$password;
    $utente_ok=0;
    $ut_regist=file($file_reg);
    $dim_reg=count($ut_regist);
    for ($i=0;$i<$dim_reg;$i++)
    {
    $dati_ut=explode("|",$ut_regist*);
    $nick_ut=$dati_ut[0];
    $pass_ut=$dati_ut[1];
    if (($nick==$nick_ut) & ($password_cr==$pass_ut)) $utente_ok=1;
    }
    if ($utente_ok==1)
    {
    if (!(file_exists($file_online)))
    {fopen($file_online,"w");}
    $dim_file=filesize($file_online);
    $dim_max=14000; // Dimensione in bytes massima per ricreare il file online
    if ($dim_file>$dim_max)
    fopen($file_online,"w");
    $ar_orario=getdate();
    $ora=$ar_orario['hours'];
    $minuti=$ar_orario['minutes'];
    $secondi=$ar_orario['seconds'];
    if (strlen($minuti)==1) $minuti="0".$minuti;
    if (strlen($secondi)==1) $secondi="0".$secondi;
    $data=date("d/m/Y");
    $orario=$ora.":".$minuti.":".$secondi;
    $utente=$nick."|".$data."|".$orario."\n";
    $ins_online=fopen($file_online,"a+");
    fputs($ins_online,$utente);
    fclose($ins_online);
    }
    else
    {
    echo "<center><b>E' STATO INSERITO<br>UN NICK O UNA PASSWORD<br>NON
    CORRETTI,<br>OPPURE NON SEI<br>ANCORA REGISTRATO.</b>b></i> ";
    echo "<a href="javascript:history.back();"><br><br>TORNA AL LOGIN</a></center>";
    exit;
    }
    ?>[/PHP]


  • User Attivo

    Quindi confronti la password con quella dell'utente che hai su un file al quale accedi con fopen()? Non ti appoggi a un database mysql per gestire i registrati?

    Se ti appoggi a un file teoricamente dovresti aggiungere un "campo" all'utente (che ora almeno ha nick e password, ma forse ha anche nome, cognome, mail e altre info) e in questo campo ci metti un flag (0 o 1)

    Al momento del login "scrivi" nel file un 1 in quel campo e al momento del logout (da definire ancora la modalità) lo fai tornare 0.

    A questo punto fai una funzione che dove vuoi tu controlli tutti i nick che sono in quel momento associati a un 1 e li mostri...

    Se usi un db mysql diventa più semplice ma la logica è la stessa

    keiske


  • User Attivo

    @Privacy-Impresa said:

    Quindi confronti la password con quella dell'utente che hai su un file al quale accedi con fopen()? Non ti appoggi a un database mysql per gestire i registrati?

    Se ti appoggi a un file teoricamente dovresti aggiungere un "campo" all'utente (che ora almeno ha nick e password, ma forse ha anche nome, cognome, mail e altre info) e in questo campo ci metti un flag (0 o 1)

    Al momento del login "scrivi" nel file un 1 in quel campo e al momento del logout (da definire ancora la modalità) lo fai tornare 0.

    A questo punto fai una funzione che dove vuoi tu controlli tutti i nick che sono in quel momento associati a un 1 e li mostri...

    Se usi un db mysql diventa più semplice ma la logica è la stessa

    keiske

    esattamente quello che vorrei fare, solo che di php non sono una cima😢 la chat è scaricata e adesso vorrei farle questa modifica sempre usando fogli di testo senza database so che è più difficile ma voglio riuscirci!!!, mi aiuti tu?:)


  • User Attivo

    Beh non servono molte modifiche, ma io non scrivo mai su file quindi fopen() e similari proprio non li conosco e non conosco come si gestisce il file .txt

    Se spieghi un po' come e dove avviene la "scrittura" o "lettura" sul file .txt vediamo come fare...

    keiske