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.