Jump to content
  • 3
NetinhOO

Código SQL Tempo Online.

Question

Guys, eu não tô conseguindo fazer a conversão do tempo online para deixar no painel do usuário, não tô acertando o código corretamente, alguém dá uma forcinha?

 

Assim que o código fica exibindo na página

Spoiler

q3lnszr.png

 

Aqui está o código completo

Spoiler
<?php if(!isset($pro)){echo 'Página protegida!'; exit;};?>
<?php if(!isset($_SESSION[Servername."login"])){
	echo '<div class="alert alert-danger">
        <strong>Acesso Restrito!</strong> Você precisa estar logado para acessar esta pagina.
    </div>';
}else{?>
  <?php
  function times($out){
	
	
	$divisao = time() - (time() - $out);
	$calculo1 = ($divisao % 86400);
	$calculo2 = ($divisao % 3600);
	
	$dias = floor($divisao / 86400);
	$horas = floor($calculo1 / 3600);
	$minutos = floor($calculo2 / 60);
	
	$result = "$dias Dias $horas Horas e $minutos Minutos";
	
	return $result;
	
}

$sql = $conexao->prepare("SELECT ,(SELECT onlinetime FROM characters) as FROM characters by onlinetime ");
$sql->execute();



?>
<span class="admin"><span class="username">Perfil de:</span>  <?php echo $_SESSION[Servername."login"]; ?></span>
<table class="ranking">
	<tr>
		<tr><td>Personagens na conta:</td><td> <?php echo $user->rowCount(); ?></td></tr>
		<tr><td>Acesso da conta:</td><td> <?php echo number_format($res_user['access_level']); ?></td></tr>
		<tr><td>Last IP:</td><td> <?php echo $res_user['lastIP'] ?></td></tr>
		<tr><td>Last Server:</td><td> <?php echo $res_user['lastServer']; ?></td></tr>
		<tr><td>E-mail:</td><td> <?php echo $res_user['email'] ?></td></tr>
		<tr><td>Nome:</td><td> <?php echo $res_user['nome']?></td></tr>
		<tr><td>Meu tempo online:</td><td><?php echo times($res['onlinetime']);?></td></tr>
		
	</tr>
</table>
<?php
}
?>

 

 

Edited by NetinhOO
Informações incompletas do código

spacer.png

 

Share this post


Link to post
Share on other sites

10 answers to this question

Recommended Posts

  • 4

Além do erro de syntax da sua SQL o cálculo também não está correto. vc não precisa executar uma sub-query para extrair o tempo online dos personagens de uma conta.

Sua condição where também está incorreta, espera-se após "account_name" possua um dígito de operação, nesse caso de igualdade e com um valor compatível ao tipo do campo, no caso uma "string" veja o exemplo abaixo:

 

<?php

$limit = 10; //O limite é redundante nesse caso, mas estou deixando aqui só para caso alguém queira adaptar e fazer um top10 online rs
$accountname = "grundor"; //Nome da conta anteriormente obtida

$sql = "SELECT * FROM characters 
		WHERE 
		accesslevel = '0'  
		AND account_name = '{$accountname}'
		ORDER BY onlinetime DESC , 
		char_name ASC
		LIMIT {$limit}"; 

 

Só explicando para caso outra pessoa chegue a essa pergunta, para calcular do unix_time para dia,horas e minutos você precisa sempre usar para as unidades menores com o resto da divisão da unidade superior:

<?php


function onlinetime_to_human_redable($onlinetime){
	$dias = intval($onlinetime / 86400);
	$resto = $onlinetime % 86400;
	$hora = intval($resto / 3600); 
	$resto = $resto % 3600;
	$minutos = intval($resto / 60);
	//$segundos = $resto % 60; //O resto do resultado de minutos são os segundos, caso deseja exibir também.. rsrs
	
	return "{$dias} dia(s) , {$hora} hora(s) , {$minutos} as minuto(s) ";
}

 

 

Dessa forma teríamos:

<?php
 //... conexão com o banco, obtenção do nome da conta,etc.
$limit = 10;
$accountname = "grundor";


$sql = "SELECT char_name, onlinetime FROM characters 
		WHERE 
		accesslevel = '0'  
		AND account_name = '{$accountname}'
		ORDER BY onlinetime DESC , 
		char_name ASC
		LIMIT {$limit}"; 

$statement = $conexao->prepare($sql)
$charactersbyonlinetime = $statement->execute(); // result: [["char_name" => "Grundor","onlinetime" => 1299446702 ]]

if(count($charactersbyonlinetime) > 0):
	foreach($charactersbyonlinetime as $char ):
	
	 echo $char['char_name']," ", onlinetime_to_human_redable($char['onlinetime']),PHP_EOL;
	 
	endforeach; 
endif; //if(count($charactersbyonlinetime) > 0)


function onlinetime_to_human_redable($onlinetime){
	$dias = intval($onlinetime / 86400);
	$resto = $onlinetime % 86400;
	$hora = intval($resto / 3600); 
	$resto = $resto % 3600;
	$minutos = intval($resto / 60);
	//$segundos = $resto % 60; //O resto do resultado de minutos são os segundos, caso deseja exibir também.. rsrs
	
	return "{$dias} dia(s) , {$hora} hora(s) , {$minutos} minuto(s) ";
}

 

vZ0QPKS.png

 

 

  • Thanks 1

EJoOSOj.gif

Share this post


Link to post
Share on other sites
  • 0

Aqui campeão, tenta assim no cálculo da função times:

time = time();               // you have 1299446702 in time
$year = $time/31556926 % 12;  // to get year
$week = $time / 604800 % 52;  // to get weeks
$hour = $time / 3600 % 24;    // to get hours
$minute = $time / 60 % 60;    // to get minutes
$second = $time % 60;         // to get seconds

Não sei como está o seu inglês, mas de toda forma, irei deixar traduzido abaixo:

time = current timestamp (timestamp atual);

year = ano;

week = semana;

hour = hora;

minute = minuto;

second = segundo;

 

  • Like 1
  • Thanks 1

Share this post


Link to post
Share on other sites
  • 0
1 minuto atrás, vert disse:

Aqui campeão, tenta assim no cálculo da função times:

time = time();               // you have 1299446702 in time
$year = $time/31556926 % 12;  // to get year
$week = $time / 604800 % 52;  // to get weeks
$hour = $time / 3600 % 24;    // to get hours
$minute = $time / 60 % 60;    // to get minutes
$second = $time % 60;         // to get seconds

Não sei como está o seu inglês, mas de toda forma, irei deixar traduzido abaixo:

time = current timestamp (timestamp atual);

year = ano;

week = semana;

hour = hora;

minute = minuto;

second = segundo;

 

Sem sucesso, acredito que a linha de código errada seja essa:

 

$sql = $conexao->prepare("SELECT ,(SELECT onlinetime FROM characters where account_name) by onlinetime ");
$sql->execute();

 

Quando eu apago essas duas linhas por inteiro no site mostra assim:

Spoiler

q3lnszr.png

 

Quando eu as adiciono não mostra, some tudo.

Fiquei mt tempo sem mexer com código e tô apanhando em algumas coisas uahuahahu. Mas de qualquer forma obrigado pela ajuda, bro


spacer.png

 

Share this post


Link to post
Share on other sites
  • 0
$dias = intval($query['onlinetime'] / 86400); 

$marcador = $query['onlinetime'] % 86400; 

$hora = intval($marcador / 3600); 

$marcador = $marcador % 3600; 

$minuto = intval($marcador / 60);

 

 

Meu velho manda esse site ai zipado que tu ta mexendo que eu vou olhar ele na hora do almoço. Pois com toda certeza ele está com diversos erros. Dai eu corrijo e te devolvo. E pela interface que eu vi eu sei até quem fez ele. 

  • I love it 1
  • Thanks 1

Share this post


Link to post
Share on other sites
  • 0
53 minutos atrás, TurtleLess disse:
$dias = intval($query['onlinetime'] / 86400); 

$marcador = $query['onlinetime'] % 86400; 

$hora = intval($marcador / 3600); 

$marcador = $marcador % 3600; 

$minuto = intval($marcador / 60);

 

 

Continua sem pegar, como eu falei mais acima, quando eu removo essa linha...

$sql = $conexao->prepare("SELECT ,(SELECT onlinetime FROM characters where account_name) by onlinetime ");
$sql->execute();

...com o código do post volta a aparecer, porém as informações ficam zeradas.


spacer.png

 

Share this post


Link to post
Share on other sites
  • 0
20 horas atrás, TurtleLess disse:

(...)

Meu velho manda esse site ai zipado que tu ta mexendo que eu vou olhar ele na hora do almoço. Pois com toda certeza ele está com diversos erros. Dai eu corrijo e te devolvo. E pela interface que eu vi eu sei até quem fez ele. 

Link do site:

 

Faz mt tempo, mais mt tempo mesmo que eu não mexia nisso, tô apanhando um bocado dnv ainda, mas por essa explicação sua ai já me deu uma noção do que eu devo e que não devo fazer. Pra ser sincero vou tentar adaptar seu script ao meu site, valeu.

4 horas atrás, Grundor disse:

vZ0QPKS.png

 


spacer.png

 

Share this post


Link to post
Share on other sites
  • 0
1 hora atrás, NetinhOO disse:

Link do site:

 

Faz mt tempo, mais mt tempo mesmo que eu não mexia nisso, tô apanhando um bocado dnv ainda, mas por essa explicação sua ai já me deu uma noção do que eu devo e que não devo fazer. Pra ser sincero vou tentar adaptar seu script ao meu site, valeu.

 

 

Entendi! que bom que voltou a mexer, significa que daqui a pouco tem novidade vindo por ai? rsrs

Um detalhe que editei agora na minha resposta, é que eu adicionei o accesslevel para remover os personagens admins da seleção usando o "accesslevel = 0", removendo essa condição irá trazer todos os personagens sem restrição.


EJoOSOj.gif

Share this post


Link to post
Share on other sites
  • 0
20 horas atrás, Grundor disse:

 

Entendi! que bom que voltou a mexer, significa que daqui a pouco tem novidade vindo por ai? rsrs

Um detalhe que editei agora na minha resposta, é que eu adicionei o accesslevel para remover os personagens admins da seleção usando o "accesslevel = 0", removendo essa condição irá trazer todos os personagens sem restrição.

Rapaz, quem sabe? UHAUuahha

 

Eu vi, isso é bom pra um rank online, pra não meter o gm no bolo todo


spacer.png

 

Share this post


Link to post
Share on other sites
  • 0
1 hora atrás, NetinhOO disse:

Rapaz, quem sabe? UHAUuahha

 

Eu vi, isso é bom pra um rank online, pra não meter o gm no bolo todo

E possivel, mandar um backup do banco de dados que você usa, e o usuario que você esta usando ?  

  • Like 1

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...




     



  • Recently Browsing

    No registered users viewing this page.

  • Posts

    • Precisar de ajuda, me recrute!
    • é melhor ter vários posts informando e arrumando erros e manter o post " Ativo " do que ficar como está agora sem meus posts. pelo menos comigo tinha alguém tentando resolver e arrumar, agora veja ai se tem 1 pessoa arrumando alguma coisa, NÃO TEM! Eles ficam apenas esperando para clicar em download e depois ctrl C + ctrl V. Eu continuo arrumando as coisas aqui mais não vou postar pra não consumir recursos do site e pra não incomodar vc e nem os outros. kkk ( afinal é muita coisa para escrever e não quero causar " FLOOD " ) kkkkkkk o fato é que não sigo ordens nem na vida real e não vai ser aqui que vou começar a obedecer pessoas que eu nem conheço. mais blz, vc tem razão talvez a comunidade não seja para mim e não mereça meu esforço. xD e tbm vou começar a usar videos e microfone explicando as coisas com minha voz pq afinal não adianta escrever enormes textos se muitas vezes não fica bem explicado e muitos não entendem ou tem preguiça de ler...e tbm eu não preciso dos outros para fazer oque eu quero, basta me dedicar e nunca desistir que sozinho eu consigo. se tem algo que eu aprendi foi isso. bom dia a todos. dexa a foto da minha community de lembrança 😛 legacy é apenas um nome fictício como exemplo. aaa lembrei mais uma coisa que quero dizer... eu postava as coisas para tentar animar a galera a fazer o mesmo que eu... encontrar erros, tentar arrumar e postar algo que conseguiu fazer ou ver se sabia como arrumar o erro citado e ensinar os demais. eu jamais postaria algo que me gerou trabalho e horas a fio no PC a troco de nada, apenas para os outros copiar, a minha intenção era que todos ajudassem em algo. ou pelo menos tentassem. foi mal se pareci um pouco agressivo mais pensei que fosse necessário para as pessoas pararem de ficar esperando e começarem a agir e tentar ajudar um pouco.
    • Obrigado pelo projeto, achei a idéia interessante! Precisar de qualquer coisa estamos ai. Baixei todos os arquivos e vou baixando os updates. Semana que vem começo a testar e reportar. Se tiver algum lugar específico pra eu postar os reports só avisar.
    • fico indi guinado com wallace e os de mais l2jdream que estão criando outros projetos ou sei la oque e deixaram o projeto de lado como fez o leandro da vote games que so pensou em dinheiro, voce estao fazendo pior ainda que cada epoca inventa uma coisa pra arrecadar  dinheiro de nos consumidor isso e uma falta de respeito inventaram a dream depois agora a dream plus e agora estao inventando outra coisa totalmente diferente isso e uma falta de respeito cade a atualização ate agora nada paguei 70, e ja foram 60 dias e nada de atualização e outra ja si passaram mais de 60 dias e atualização ainda estar 170 nao passa disso e o pack estar cheio de bugs.  
    • Larga de ser egoísta. simples, se quer compartilhar e ajudar, faça de bom grado como a maioria faz assim. Se você não se encaixa nas regras da comunidade ela não foi feita para você, vá para uma aonde o seu rage será aplaudido e admirado. Reconheço suas contribuições no tópico mas tinham 5 postagens seguidas sua apenas criticando quem não fazia nada... eu juntei 1.. 2..3..4.. na quinta eu tive que postar. É simples, estou pedindo muito ? Vc consegue ao menos respeitar as regras? Meu trabalho aqui é moderar e vigiar a comunidade para que ela funcione da melhor forma possível, quando vc flooda vc gera pertubação para as pessoas que assinam esse tópico e consome recursos do site de forma leviana.  PS: Não precisava ter feito a pirraça de apagar todos seus posts, eu só chamei sua atenção para que justamente soubesse que sua atitude foi errada, mesmo tendo boas intenções, não é assim que se faz.  
    • @EstouOff voce precisa pagar 100 Euros pra comprar o primeiro acesso +20 mensalmente pra ter as atualizações diárias de todos packs, sim voce pode passar os erros la e dentro do possivel ele vai atualizando e tu atualiza teu pack. 
    • @EstouOff vamos reduzir o rage manolo.. se não tem nada de concreto para acrescentar recomendo não comentar nada até que novos comentários sejam feitos.  
    • tem um problema com angelic icon quando ativa trava gameserver todo ai nao equipa arma nem ativa efeito das skill.............depois de um tempo volta sozinho........mais esta muito dahora ultima vez que testei nao equipava broche etc mais agora ta equipando tudo muito fluido pra jogar ta top  intendi o elemento adquire xp dos mobs que sao fortes contra eles........referencia a CDZ Omega ou Avatar kkkkkkkkkkkkkkkkkkk
    • É assim mesmo que funciona, ao matar um mob elemental a exp adquirida é do elemento que eles chamam de elemento dominador       Fire  (Forge of the Gods) XP for Water Spirit                               Water (Garden of Eva)  XP for Earth Spirit  Wind (Land of Winds) XP for Fire Spirit  Earth (Wall of Argos) XP for Wind Spirit
×
×
  • Create New...