Pagina 1 din 1

problema utilizatori online

Scris: Mie Aug 31, 2011
de trif
salut, am si eu o mica problema si nu stiu cum sa o rezolv, am tot incercat si am tot modificat pe acest cod

Cod: Selectaţi tot

<?php 
include("conectare.php");
 function update_last_seen($id) { 
$time = time(); 
$query = mysql_query ("UPDATE utilizatori SET last_seen='$time' WHERE id='$id'") or die ("Nu se poate face update"); 
 }
echo update_last_seen($id);
echo 'Utilizatori online sunt: ';
$scope = time() - 10*60; 
 $on = 0; 
 if ($user['last_seen'] > $scope) 
      $on = 1;
	  echo '<b><br>';
 $query = mysql_query ("SELECT * FROM utilizatori WHERE last_seen>'$scope'") or die ("Nu se poate conecta la baza de date!");  
 while($online = mysql_fetch_array ($query)){
echo $online['utilizator'];
echo ', ';
 }	  
 ?>
pana mi-a venit acru. am intampinat urmatoarele probleme:
1. nu imi face update-ul
2. nu imi ia bine din bd time si nu imi calculeaza bine (eu in bd am asa: last_seen timestamp on update CURRENT_TIMESTAMP Nu CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP) si dupa imi afiseaza nu mai mi si sterge ci ramana acolo.
Nu stiu ce sa le mai fac. astept raspuns, multumesc aniticpat, cu stima trif

problema utilizatori online

Scris: Mie Aug 31, 2011
de MarPlo
Ca sa retii utilizatorii online in tabel MySQL si apoi sa-i selectezi, trebuie 3 interogari SQL, iar daca folosesti time() din PHP, coloana in care e retinut Timestamp-ul ar trebui de tip INT, si $time adaugat ca numar (nu ca sir intre ghilimele simple).
Cele trei comenzi SQL sunt:
1. DELETE inregistrarile mai vechi decat un anumit timp.
2. INSERT INTO ... cu ON DUPLICATE KEY UPDATE , ca sa adauge utilizatorii noi, sau sa actualizeze timpul daca utilizatorul e deja in tabel (printre cei ramasi dupa Delete).
3. SELECT pt. selectare cei aflati in tabel.

Poate parea complicat, mai bine vezi cum e aplicat acest principiu in scriptul de la pagina Utilizatori - Inregistrare si Autentificare / Logare, in fisierul "class.Logare.php", la metoda "usersOn()".

problema utilizatori online

Scris: Dum Sep 04, 2011
de trif
salut, am mai intampinat o problema si nu stiu cum sa o rezolv, am codul acesta:

Cod: Selectaţi tot

include("conectare.php");
$data = time();
$data_expir = $data-301;
echo '<br>Utilizatori online sunt: ';
$query = ("SELECT * FROM online WHERE data>$data_expir") or die ("Nu se poate conecta la baza de date!");  
$res=mysql_query($query);
while($rand = mysql_fetch_array ($res)){
if($rand['data']>$data_expir)
{ 
echo '<b>';
echo $rand['nume'];
echo ', </b>';
}
}
if($rand['data']<$data_expir)
{
echo '<b> 0 </b>';
}
echo '(date care se bazeaza pe utilizatorii activi în ultimele 5 minute) <br>';
momentan imi arata asa:
1. cand sunt utilizatori online -->
Utilizatori online sunt: admin, 0 (date care se bazeaza pe utilizatorii activi în ultimele 5 minute)
2. cand nu sunt utilizatori online -->
Utilizatori online sunt: 0 (date care se bazeaza pe utilizatorii activi în ultimele 5 minute) asta este problema.
eu vreau ca atunci cand sunt utilizatori online sa imi apara Utilizatori online sunt: admin (date care se bazeaza pe utilizatorii activi în ultimele 5 minute) fara 0 si cand nu sunt utilizatori online sa imi apara Utilizatori online sunt: 0.
am tot incercat sa il modific si sa pun conditiile in fel si fel de moduri dar nu imi face cum vreau eu. va uitati sa vedeti ce are si sa faceti asa cum doresc eu. va multumesc anticipat, cu stima trif

problema utilizatori online

Scris: Dum Sep 04, 2011
de MarPlo
Incearca codul acesta (nu e testat, daca e vreo eroare sau nu merge, prinzi ideea si il faci cum vrei):

Cod: Selectaţi tot

include("conectare.php");
$data = time();
$data_expir = $data-301;
$reout = '<br>Utilizatori online sunt: ';

$query = ("SELECT * FROM online WHERE data>$data_expir") or die ("Nu se poate conecta la baza de date!"); 
$res=mysql_query($query);

if (mysql_num_rows($res) == 0) {
  $reout .= '<b> 0 </b>';
}
else {
  while($rand = mysql_fetch_array ($res)){
    if($rand['data']>$data_expir){
      $reout .= '<b>'. $rand['nume']. ', </b>';
    }
  }
  $reout .= '(date care se bazeaza pe utilizatorii activi în ultimele 5 minute) <br>';
}

echo $reout; 
- Un script asemanator, dar care afiseaza numarul, nu si numele, e la pagina Inregistrare, Afisare numar vizitatori si utilizatori Online, poate iti e de folos, sau explicatiile din cod.

problema utilizatori online

Scris: Dum Sep 04, 2011
de trif
salut, merge, multumesc frumos. o sa ma uit si la scriptul acela. multumesc inca o data. cu stima trif

problema utilizatori online

Scris: Dum Sep 11, 2011
de trif
salut, a mai intervenit o problema, am facut cum ai zis u ca sa folosesc login si acolo sunt cele trei DELETE, SELECT, INSERT. dar aici vine problema. daca ma loghez imi insereaza in bd utilizatorul si data si imi arata ca sunt online, dar problema este ca daca introduc un utilizator gresit si imi zice ca este gresit si nu exista in bd atunci imi insereaza si pe acesta in tabela online si imi afiseaza ca 'utilizator online' care nu este corect. cum as putea sa fac ca sa nu mai fac asa, ci sa comare cu tabela 'utilizatori' si daca este acolo sa introduca iar daca nu sa nu introduca. va multumesc anticipat. cu stima trif

problema utilizatori online

Scris: Lun Sep 12, 2011
de MarPlo
Utilizatorul logat ar trebui sa aibe o sesiune cu numele sau id.
Inainte de a efectua comenzile SQL se poate verifica daca exista acea sesiune,.

Cod: Selectaţi tot

if(isset($_SESSION['nume'])) {
  // instructiuni pt. adaugare la utilizatori online
} 

problema utilizatori online

Scris: Mar Sep 13, 2011
de trif
salut, ceea ce face aceste DELETE, SELECT, INSERT este in login.php adica in fisierul acela pe care mi-ai zis sa il folosesc (varianta mai veche) si atunci cand introduc in casuta 'nume' atunci indiferent daca este sau utilizator scriptul mi-l ia ca si cand s-a logat chit ca el nu s-a logat deloc. sursa este aici:

Cod: Selectaţi tot

<?php
// De la https://marplo.net
/**
 * Urmatoarea functie sterge randurile din tabelul user_temp mai vechi de 10 min
 * verifica daca utilizatorul a incercat de mai multe ori autentificarea
 * daca a incercat deja de 3 ori fara utilizator-parola confirmate
 * solicita incercarea unei noi autentificari dupa 10 min
 */

 function temp_user($utilizator) {
  GLOBAL $conn;
  $data = time();
  $data_expir = $data-601;
  $ip = $_SERVER['REMOTE_ADDR'];

  /* Sterge randurile din tabelul user_temp mai vechi de 10 min */
  $sql = "DELETE FROM `user_temp` WHERE `data`<$data_expir";
  mysql_query($sql,$conn);

  /* Adauga slashuri (pentru utilizator), daca PHP nu e setat sa adauge implicit */
  if(!get_magic_quotes_gpc()) { $utilizator = addslashes($utilizator); }

  /* Verifica daca numle este in tabelul user_temp */
  $sql1 = "SELECT `utilizator`, `incercari`, `data` FROM `user_temp` WHERE `utilizator`='$utilizator'";
  $result = mysql_query($sql1,$conn);

  if(!$result || (mysql_numrows($result)<1)) {
	$sql1 = "INSERT INTO `user_temp` (utilizator, ip, data) VALUES ('$utilizator', '$ip', '$data')";
	mysql_query($sql1,$conn);
	return 'continua'; 
  }
  else {
	/* Gaseste nr. incercari asociata utilizatorlui */
	$tbarray = mysql_fetch_array($result);
	$incercari = $tbarray['incercari'];
	if ($incercari<3) {
	  $incercari++;
	  // incrementeaza nr. incercari cu 1 si actualizeaza data
	  $sql1 = "UPDATE `user_temp` SET `incercari`='$incercari', `data`='$data' WHERE `utilizator`='$utilizator'";
	  $result = mysql_query($sql1);
	  return 'continua';
	}
	else if ($incercari>=3) {
	  $timp = 600 - ($data - $tbarray['data']);
	  return $timp;		// Indica nr. incercari depasit si returneaza timpul pt. calculare asteptare
	}
  }
}
 
/**
 * Urmatoarea functie verifica daca utilizatorle exista in baza de date
 * daca da, verifica daca parola se potriveste cu cea din baza de date
 * daca utilizatorle sau parola nu sunt corecte, returneaza eroarea (1 sau 2).
 * pentru utilizator si parola confirmate returneaza 0.
 */
function confirmUser($utilizator, $parola) {
 GLOBAL $conn;
  /* Adauga slashuri daca este necesar (pentru query) */
  if(!get_magic_quotes_gpc()) {
	$utilizator = addslashes($utilizator);
	$parola = addslashes($parola);
  }

  /* Verifica daca numle este in baza de date */
  $q = "SELECT parola, aprobat from `utilizatori` WHERE `utilizator`='$utilizator'";
  $result = mysql_query($q,$conn);
  if(!$result || (mysql_numrows($result)<1)) {
	return 1; //Indica utilizator neconfirmat
  }
  else {
	/* Gaseste parola asociata utilizatorlui */
	$dbarray = mysql_fetch_array($result);
	$dbarray['parola']  = stripslashes($dbarray['parola']);
	
	// Verifica daca utilizatorul este confirmat (aprobat 1)
	if ($dbarray['aprobat']==0) {
	  return 3;	// Inregistrarea nu a fost aprobata
	}
	/* Verifica daca parola scrisa este aceeasi cu cea gasita in baza de date */
	else if($parola==$dbarray['parola']) {
	  return 0; // utilizator si parola confirmate
	}
	else {
	  return 2; // indica parola neconfirmata
	}
  }
}

/**
 * Verifica autentificarea prin sesiune - daca utilizatorul este deja autentificat
 * verifica daca utilizatorul a fost memorat in cookie 
 * adaug o sesiune ca utilizatoru este logat
 * Apeleaza functia ce verifica daca datele din sesiune sunt corecte cu cele din baza de date
 * returneaza TRUE daca utilizatorul este autentificat.
 */
function checkLogin() {
  /* verifica daca utilizatorul este memorat in cookie */
  if(isset($_COOKIE['cookname']) && isset($_COOKIE['cookpass'])) {
	$_SESSION['utilizator'] = $_COOKIE['cookname'];
	$_SESSION['parola'] = $_COOKIE['cookpass'];
  }

  /* verifica daca exista in sesiune utilizatorle si parola setate */
  if(isset($_SESSION['utilizator']) && isset($_SESSION['parola'])) {
	/* Confirma daca utilizatorle si parola sunt valide */
	if(confirmUser($_SESSION['utilizator'], $_SESSION['parola'])===0) { $result = 'logat'; }
	else {
	  /* daca variabilele sunt incorecte, sterge sesiunea, utilizatorul nu este logat */
	  unset($_SESSION['utilizator']);
	  unset($_SESSION['parola']);
	  $result = 'nelogat';
	}
	return $result;
  }
  /* Utilizatorul nu este logat */
  else { return 'nelogat'; }
}

/**
 * Determina daca va fi sau nu afisat formularul de autentificare
 * arata ca utilizatorul este autentificat, bazat pe variabilele din sesiune, sau mesajele de eroare
 */
function displayLogin($mesaj) {
  if(isset($_SESSION['utilizator']) && $mesaj=='logat') {
  $confirm_message_iesire = "'Ati ales sa parasiti PANOUL DE ADMINISTRARE. Doriti sa continuati?'";
	$result = '';
  }
  else if($mesaj=='nelogat') {
	// Afiseaza formularul
	$result = '<script src="verific.js"></script><!--/ https://marplo.net /-->
<form action="'. $_SERVER['PHP_SELF']. '" method="post" onsubmit="return regcheck(this)">
<table align="center" border="0" cellspacing="0" cellpadding="1" width="270" style="border:1px solid #888888; padding:1px;">
  <tr><th colspan="2" align="center">Autentificare</th></tr>
  <tr><td><label for="utilizator">Utilizator:&nbsp; </label><input type="text" name="utilizator" size="14" maxlength="30" id="utilizator" /></td>
  <td align="center"> &nbsp; <input type="submit" name="sublogin" value="Autentifica-te" /></td></tr>
  <tr><td><label for="pass">Parola: </label><input type="password" name="pass" size="14" maxlength="30" id="pass" /></td>
  <td align="center"><input type="checkbox" name="remember" /><font size="2">Tine-ma minte</font></td></tr>
</table>
</form>';
  }
  else {
	$result = '<table align="center" bordercolor="red" border="1" cellspacing="0" cellpadding="2" width="270"><tr><td align="center">'. $mesaj. '</td></tr></table>';
  }
  return $result;
}

/**
 * Verifica daca utilizatorle si parola au fost trimise prin formularul de logare
 * daca da, verifica lungimea utilizatorlui si parolei, 
 * apoi datele in baza de date si creaza sesiunea
 */
if(isset($_POST['sublogin']) && isset($_POST['utilizator']) && isset($_POST['pass'])) {
  // Retinerea adresei (preluata din form) pt. revenire la pagina anterioara
  $inapoi = '<br /><b><a href="#" onClick="history.back()">Reveniti</a></b> la pagina anterioara.';

  // Elimina spatiile din marginile utilizatorlui si parolei
  $_POST['utilizator'] = trim($_POST['utilizator']);
  $_POST['pass'] = trim($_POST['pass']);

  /* verifica daca toate campurile au fost completate */
  if(!$_POST['utilizator'] || !$_POST['pass']){
	$eroare='Nu ati completat toate campurile'. $inapoi;
  }

  /* verifica lungimea utilizatorlui */
  else if(strlen($_POST['utilizator'])<3 || strlen($_POST['utilizator'])>32) {
	$eroare='utilizatorle trebuie sa contina intre 3 si 32 caractere'. $inapoi;
  }

  /* verifica lungimea parolei */
  else if(strlen($_POST['pass'])<3 || strlen($_POST['pass'])>18) {
	$eroare='Parola trebuie sa contina intre 3 si 18 caractere.'. $inapoi;
  }
  else {
	// Verifica si adauga incercarea de logare in tabelul user_temp
	$continua = temp_user($_POST['utilizator']);

	if ($continua=='continua') {
	  $md5pass = md5($_POST['pass']);		// Cripteaza parola
	  /* verifica daca utilizatorle este in baza de date si parola este corecta */
	  $result = confirmUser($_POST['utilizator'], $md5pass);

	  /* Seteaza mesajul in cazul in care utilizator sau parola sunt incorecte */
	  if($result==1) {
		$eroare='utilizatorle <b>'. stripslashes($_POST['utilizator']). '</b> nu este inregistrat.'. $inapoi. '<br />';
	  }
	  else if($result==2) {
		$eroare='Parola incorecta.'. $inapoi. '<br/>';
	  }
	  else if($result==3) {
		die('<center><br /><br /><font color="red"><h3>Inregistrarea pt. <u>'. stripslashes($_POST['utilizator']). '</u> este neconfirmata.</h3></font> Verificati contul de e-mail folosit la inregistrare (inclusiv in Spamm) pt. mesajul cu link-ul de confirmare.<br /><br /> Daca doriti sa solicitati un nou e-mail de confirmare, <a href="recuper.php?confirm=1">Click Aici</a></center>');
	  }
	  else {
		/* daca utilizatorle si parola sunt corecte, inregistreaza variabilele in sesiune */
		$_SESSION['utilizator'] = $_POST['utilizator'];
		$_SESSION['parola'] = $md5pass;

		/** Aici utilizatorul alege sa fie retinute datele pt.urmatoarea vizita
		* seteaza doua cookie-uri, unul care pastreaza utilizatorle si al doilea pt. parola
		* acestea expira in 100 de zile */
		if(isset($_POST['remember'])) {
		  setcookie("cookname", $_SESSION['utilizator'], time()+60*60*24*100, "/");
		  setcookie("cookpass", $_SESSION['parola'], time()+60*60*24*100, "/");
		}

		/* Auto redirect pentru a evita retrimiterea datelor cand da inapoi sau la refresh */
		echo '<meta http-equiv="Refresh" content="1;url='.$_SERVER['PHP_SELF'].'">';
		exit;
	  }
	}
	else {
	  // Seteaza mesajul cu timpul ramas pana la o noua incercare de autentificare
	  $continua = floor($continua/60). ' minute, '. ($continua%60). ' secunde';
	  $eroare = 'Ati depasit nr. incercari permise pt. autentificare. Puteti reincerca dupa <br /><b>'. $continua. '</b>'. $inapoi. '<br />';
	}
  }
}
/* Seteaza variabila logged_in, care poate fi folosita in site pt. afisearea 
 * valoarea ei reprezinta ce va afisa in pagina, prin apelarea functiei displayLogin()
 * Daca exista vreo eroare, apeleaza functia cu acea eroare, altfel, o apeleaza cu rezultatul altei functii checkLogin(), care verifica autentificarea */
$logged_in = (isset($eroare)) ? displayLogin($eroare) : displayLogin(checkLogin());

@mysql_close();
?>
astept raspuns, multumesc anticipat, cu stima trif

problema utilizatori online

Scris: Mie Sep 14, 2011
de MarPlo
DELETE, SELECT, INSERT la tabelul "user_temp" nu e pt. utilizatori online, ci pt. verifcare numar incercari de logare, ca sa nu incerce de prea multe ori.
Varianta veche nu e cu utilizatori online.
Daca vrei sa amesteci /adaptezi ceva din versiunea noua la cea veche, e mai greu.
Deci, pt. utilizatori online trebuie creat alt tabel, cu alte instructiuni DELETE, SELECT, INSERT. Daca studiezi amanuntit versiunea noua, poate intelegi.