Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2011
    Messaggi
    24

    [PHP] Ricavare la lista degli utenti online da un Database.

    Salve,

    Espongo in modo semplice e rapido per una consultazione meno noiosa per coloro che dedicheranno una parte del loro tempo per farmi capire la falla nella mia logistica.

    Innanzitutto l'obiettivo è realizzare una chat in stile Gmail, quindi in basso a destra nella pagine che si apre ampliandosi e si chiude tornando alla posizione originaria.

    La chat è utilizzabile dagli utenti registrati, e il nome dell'utente viene prelevato in automatico dal database, e "dovrebbe" anche la lista degli utenti online, quindi chattabili.

    L'algoritmo è preconfezionato, stabile e già testato su ogni browser di versione recente, ma anche piu vecchiotta.

    Arriviamo nel punto diretto del discorso, in ogni pagina in cui desidero visualizzare la chat, bisogna inserire il seguente codice:

    Codice PHP:
    <?php
    // avvio la sessione
    session_start();
    ?>
    <html>
    <head>
    <script type="text/javascript" src="js/jquery.js"></script>
    <script type="text/javascript" src="js/chat.js"></script>
    <link type="text/css" rel="stylesheet" media="all" href="css/chat.css" /> 
    <link type="text/css" rel="stylesheet" media="all" href="css/screen.css" /> 
    <!--[if lte IE 7]> 
    <link type="text/css" rel="stylesheet" media="all" href="css/screen_ie.css" /> 
    <![endif]-->
    </head>
    <body>
    <?php
    // salvo nella sessione l'username dell'utente
    $_SESSION['username'] = "pippo";

    // effettuo una query su un'ipotetica tabella di utenti
    // gli utenti loggati sono contrassegnati dal valore 1 nel campo 'loggato'
    $res mysql_query("SELECT username FROM utenti WHERE loggato = 1");

    while (
    $row mysql_fetch_array($res)){
      
    // creo dinamicamente il link per aprire la chat
      
    echo "<a href=\"javascript:void(0)\" onclick=\"javascript:chatWith('" $row['username'] . "')\">Chatta con " $row['username'] . "</a>";
    }
    ?>
    </body>
    </html>
    Come potete osservare lui imposta il nome dell'utente fisso perchè senza accesso alle pagine protette, mentre io devo far accedere alla chat account registrati e sostituisco quel "pippo" con la mia variabile prelevata dal database.

    Da me spero opportunamente adattato:
    Codice PHP:
    <?php 
    //Inizializzo la sessione
    session_start(); 
    //Includo il pacchetto contenente tutte le funzioni necessarie (connessione al database, //script e fogli di stile della chat incluse)
    require('root_pack.php');

    //Se l'utente è loggato allora procediamo con la raccolta dati
    if ($_SESSION['log'] != 0) {

    //Inizia raccolta dei dati
    $query "SELECT * " .
                
    "FROM user " .
                
    "WHERE user_class = '$qry_class' " .
                
    "AND user_username = '$qry_user' ";

    //Se siamo in mancanza di qualche ritorno diamo un bell'errore.
    $results mysql_query($query) or die (mysql_error());

    if(
    mysql_num_rows($results) != 0)
      { 
       
    $row mysql_fetch_array($results);
       
    $_SESSION['log'] = 1// utente logato
       
    $_SESSION['username'] = $row['user_username'];
       
    $_SESSION['class'] = $row['user_class'];
      }
    //Finisce prelievo informazioni
     
    //Nello script originale prelevano un valore nella tabella "loggato".
    $res $_SESSION['log'];

    //Per accertarmi che venga eseguito il primo contenuto sostituisco while con if e inserisco //un errore.
    if ($row mysql_fetch_array($res)) {  

    echo 
    "<a href=\"javascript:void(0)\" onclick=\"javascript:chatWith('" $row['user_username'] . "')\">Chatta con " $row['user_username'] . "</a>";

    } else {
    echo 
    "Errore"


    }
    ?>
    Bene, il problema: Non visualizza nessuna lista utente online, e non mi stupisco.
    Non ho nel database delle tabelle che mi gestiscono gli utenti online e gli utenti offline.

    Ho provato a realizzare una sorta di soluzione casareccia, ma non era funzionale.

    Mi sono affidato cosi ad una vostra guida, siamo passati tutti dal principio credo no? C=

    Contare gli utenti online con PHP

    Eseguo naturalmente ogni passaggio, mi rendo conto che non funziona, visto che l'id e gli altri dati non possono essere inseriti essendo una tabella non collegata a nulla.
    Nel senso che nessuna pagina gli invia dati.

    Allora ho cominciato a modificare il tutto e spostare le due colonne sessione e timestamp nella mia tabella user dove ci sono tutti i dati essenziali di ogni account, username, password, email, convalidation, ed ID.

    In questo modo lo script dovrebbe aggiornare le due nuove colonne con i tempi stabiliti e quindi avrei finalmente la possibilità di distinguere utenti online da utenti offline, e siccome ci siamo semplificati la vita mettendo tutto nella stessa tabella posso prelevare direttamente la lista degli username.

    Ma non è cosi, innanzitutto appena l'utente mi risulta offline mi cancella tutta la riga e quindi tutto l'account. In secondo luogo quando creo un account, e successivamente lo loggo, mi utilizza due righe, una con tutti i dati dell'account ed un altra con le due colonne sessione e timestamp.

    Avrei bisogno della logistica e se possibile una soluzione con la spiegazione, in fondo il mio obiettivo è capire, imparare, applicare!

    Grazie dell'attenzione, scusate per il disagio.
    Wuston.

  2. #2
    Utente di HTML.it L'avatar di jcsnake
    Registrato dal
    Jun 2010
    Messaggi
    629
    Ciao, leggendo nel link tutorial che hai postato, ho notato che il codice suggerisce una volta terminata la sessione di effettuare una query di tipo cancellazione...visto che tu invece hai incorporato questi due attributi (timestamp e sessione) nella tua tabella generale di utente, non è certo consigliabile continuare con questa scelta.
    Ti consiglierei quindi di cambiare questa parte di codice
    Codice PHP:
    $sql_cancellazione="DELETE FROM utenti_on_line WHERE timestamp<$intervallo"
    con quest'altra
    Codice PHP:
    $sql_modifica="Update utenti_on_line set timestamp=NULL, sessione=NULL WHERE timestamp<$intervallo"
    In modo tale da resettare il campo per una nuova sessione, senza cancellare le intere informazioni su di esso. Ho settato per esempio a NULL e chiamato gli attributi timestap e sessione, ovviamente poi cambiali a seconda della tua esigenza.
    Spero di esserti stato d'aiuto

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.