Ir para conteúdo
  • 0

julhinhuu

Pergunta

Olá galera bom dia;

 

Preciso de uma ajuda de vocês para mostrar a 'GUILD' do personagem em WhoisOnline (Jogadores Online) do meu server.

Espero que vocês me ajudem já tentei mais para adicionar em SQL não sou muito bom. Talvez com a ajuda de vocês aprenderei algo. 

 

Meu WhoisOnline (jogadores Online) :

Spoiler

<img id="ContentBoxHeadline" class="Title" src="layouts/tibiacom/images/header/headline-whoisonline.gif" alt="Contentbox headline">
<?php
if(!defined('INITIALIZED'))
    exit;

$orderby = 'name';
if(isset($_REQUEST['order']))
{
    if($_REQUEST['order']== 'level')
        $orderby = 'level';
    elseif($_REQUEST['order'] == 'vocation')
        $orderby = 'vocation';
}
$players_online_data = $SQL->query('SELECT ' . $SQL->tableName('accounts') . '.' . $SQL->fieldName('flag') . ', ' . $SQL->tableName('players') . '.' . $SQL->fieldName('name') . ', ' . $SQL->tableName('players') . '.' . $SQL->fieldName('vocation') . ', ' . $SQL->tableName('players') . '.' . $SQL->fieldName('level') . ', ' . $SQL->tableName('players') . '.' . $SQL->fieldName('skull') . ', ' . $SQL->tableName('players') . '.' . $SQL->fieldName('looktype') . ', ' . $SQL->tableName('players') . '.' . $SQL->fieldName('lookaddons') . ', ' . $SQL->tableName('players') . '.' . $SQL->fieldName('lookhead') . ', ' . $SQL->tableName('players') . '.' . $SQL->fieldName('lookbody') . ', ' . $SQL->tableName('players') . '.' . $SQL->fieldName('looklegs') . ', ' . $SQL->tableName('players') . '.' . $SQL->fieldName('lookfeet') . ' FROM ' . $SQL->tableName('accounts') . ', ' . $SQL->tableName('players') . ', ' . $SQL->tableName('players_online') . ' WHERE ' . $SQL->tableName('players') . '.' . $SQL->fieldName('id') . ' = ' . $SQL->tableName('players_online') . '.' . $SQL->fieldName('player_id') . ' AND ' . $SQL->tableName('accounts') . '.' . $SQL->fieldName('id') . ' = ' . $SQL->tableName('players') . '.' . $SQL->fieldName('account_id') . ' ORDER BY ' . $SQL->fieldName($orderby))->fetchAll();
$number_of_players_online = 0;
$vocations_online_count = array(0,0,0,0,0); // change it if you got more then 5 vocations
$players_rows = '';
foreach($players_online_data as $player)
{
    $vocations_online_count[$player['vocation']] += 1;
    $bgcolor = (($number_of_players_online++ % 2 == 1) ?  $config['site']['darkborder'] : $config['site']['lightborder']);
    $skull = '';
    if ($player['skull'] == 4)
        $skull = "<img style='border: 0;' src='./images/skulls/redskull.gif'/>";
    else if ($player['skull'] == 5)
        $skull = "<img style='border: 0;' src='./images/skulls/blackskull.gif'/>";

    $players_rows .= '<TR BGCOLOR='.$bgcolor.'><TD WIDTH=65%><A HREF="?subtopic=characters&name='.urlencode($player['name']).'">'.htmlspecialchars($player['name']).$skull.'<TD WIDTH=10%>'.$player['level'].'</TD><TD WIDTH=20%>'.htmlspecialchars($vocation_name[$player['vocation']]).'</TD></TR>';
}        
if($number_of_players_online == 0)
{
    //server status - server empty
    $main_content .= '<TABLE BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=100%><TR BGCOLOR="'.$config['site']['vdarkborder'].'"><TD CLASS=white><B>Server Status</B></TD></TR><TR BGCOLOR='.$config['site']['darkborder'].'><TD><TABLE BORDER=0 CELLSPACING=1 CELLPADDING=1><TR><TD>Currently no one is playing on <b>'.htmlspecialchars($config['server']['serverName']).'</b>.</TD></TR></TABLE></TD></TR></TABLE><BR>';
}
else
{
    //server status - someone is online
    $main_content .= '<TABLE BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=100%><TR BGCOLOR="'.$config['site']['vdarkborder'].'"><TD CLASS=white><B>Server Status</B></TD></TR><TR BGCOLOR='.$config['site']['darkborder'].'><TD><TABLE BORDER=0 CELLSPACING=1 CELLPADDING=1><TR><TD>Currently '.$number_of_players_online.' players are online on <b>'.htmlspecialchars($config['server']['serverName']).'</b>.</TD></TR></TABLE></TD></TR></TABLE><br>';
    //list of players
    $main_content .= '<TABLE BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=100%><TR BGCOLOR="'.$config['site']['vdarkborder'].'"><TD><A HREF="?subtopic=whoisonline&order=name" CLASS=white>Name</A></TD><TD><A HREF="?subtopic=whoisonline&order=level" CLASS=white>Level</A></TD><TD><A HREF="?subtopic=whoisonline&order=vocation" CLASS=white>Vocation</TD></TR>'.$players_rows.'</TABLE>';
    //search bar
    $main_content .= '<BR><FORM ACTION="?subtopic=characters" METHOD=post>  <TABLE WIDTH=100% BORDER=0 CELLSPACING=1 CELLPADDING=4><TR><TD BGCOLOR="'.$config['site']['vdarkborder'].'" CLASS=white><B>Search Character</B></TD></TR><TR><TD BGCOLOR="'.$config['site']['darkborder'].'"><TABLE BORDER=0 CELLPADDING=1><TR><TD>Name:</TD><TD><INPUT NAME="name" VALUE="" SIZE="29" MAXLENGTH="29"></TD><TD><INPUT TYPE="image" NAME="Submit" SRC="'.$layout_name.'/images/buttons/sbutton_submit.gif" BORDER=0 WIDTH=120 HEIGHT=18></TD></TR></TABLE></TD></TR></TABLE></FORM>';
}

 

Se não quiser ter tanto trabalho é só adicionar no SQL que faço o restante.

Obrigado a todos que me ajudarem.

#TMJ

Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0

Tem que fazer um join na guilds e guild_ranks, para poder retornar o id e nome da guild

SELECT p.name AS player_name, p.level AS player_level, g.name AS guild_name, p.level, gr.guild_id AS guild_id, gr.level AS guild_levelFROM players pINNER JOIN guilds g ON p.rank_id = g.idINNER JOIN guild_ranks gr ON g.id = gr.guild_idLIMIT 0 , 30

Seria mais ou menos isso dai, acrescendo mais os campos que for usar das tabelas, como looktype e etc

Link para o comentário
Compartilhar em outros sites

  • 0
7 horas atrás, julhinhuu disse:

Terá que criar outro $SQL no caso ? 

Não, tu so precisa alterar a que tem, e adiciona nessa ai os campos que a outra pega

Link para o comentário
Compartilhar em outros sites

  • 0
9 horas atrás, dalvorsn disse:

Não, tu so precisa alterar a que tem, e adiciona nessa ai os campos que a outra pega

Tendeu pae, chegar em casa faço as alterações e falarei se funcionou ou se for o caso de algum erro também falarei.

@dalvorsn Não consegui adicionar de forma alguma .. 

 

ERRO:

Spoiler

Fatal error: Uncaught Error: Call to a member function fetchAll() on boolean in C:\xampp\htdocs\pages\whoisonline.php:20 Stack trace: #0 C:\xampp\htdocs\system\load.page.php(7): include() #1 C:\xampp\htdocs\site.php(37): include_once('C:\\xampp\\htdocs...') #2 {main} thrown in C:\xampp\htdocs\pages\whoisonline.php on line 20

Poderia adicionar na tabela para mim?

 

AQUI:

Spoiler

$players_online_data = $SQL->query('SELECT ' . $SQL->tableName('accounts') . '.' . $SQL->fieldName('flag') . ', ' . $SQL->tableName('players') . '.' . $SQL->fieldName('name') . ', ' . $SQL->tableName('players') . '.' . $SQL->fieldName('vocation') . ', ' . $SQL->tableName('players') . '.' . $SQL->fieldName('level') . ', ' . $SQL->tableName('players') . '.' . $SQL->fieldName('skull') . ', ' . $SQL->tableName('players') . '.' . $SQL->fieldName('looktype') . ', ' . $SQL->tableName('players') . '.' . $SQL->fieldName('lookaddons') . ', ' . $SQL->tableName('players') . '.' . $SQL->fieldName('lookhead') . ', ' . $SQL->tableName('players') . '.' . $SQL->fieldName('lookbody') . ', ' . $SQL->tableName('players') . '.' . $SQL->fieldName('looklegs') . ', ' . $SQL->tableName('players') . '.' . $SQL->fieldName('lookfeet') . ' FROM ' . $SQL->tableName('accounts') . ', ' . $SQL->tableName('players') . ', ' . $SQL->tableName('players_online') . ' WHERE ' . $SQL->tableName('players') . '.' . $SQL->fieldName('id') . ' = ' . $SQL->tableName('players_online') . '.' . $SQL->fieldName('player_id') . ' AND ' . $SQL->tableName('accounts') . '.' . $SQL->fieldName('id') . ' = ' . $SQL->tableName('players') . '.' . $SQL->fieldName('account_id') . ' ORDER BY ' . $SQL->fieldName($orderby))->fetchAll();

 

Editado por julhinhuu
Completar a resposta.
Link para o comentário
Compartilhar em outros sites

  • 0
7 horas atrás, julhinhuu disse:

Tendeu pae, chegar em casa faço as alterações e falarei se funcionou ou se for o caso de algum erro também falarei.

@dalvorsn Não consegui adicionar de forma alguma .. 

 

ERRO:

  Ocultar conteúdo

Fatal error: Uncaught Error: Call to a member function fetchAll() on boolean in C:\xampp\htdocs\pages\whoisonline.php:20 Stack trace: #0 C:\xampp\htdocs\system\load.page.php(7): include() #1 C:\xampp\htdocs\site.php(37): include_once('C:\\xampp\\htdocs...') #2 {main} thrown in C:\xampp\htdocs\pages\whoisonline.php on line 20

Poderia adicionar na tabela para mim?

 

AQUI:

  Ocultar conteúdo

$players_online_data = $SQL->query('SELECT ' . $SQL->tableName('accounts') . '.' . $SQL->fieldName('flag') . ', ' . $SQL->tableName('players') . '.' . $SQL->fieldName('name') . ', ' . $SQL->tableName('players') . '.' . $SQL->fieldName('vocation') . ', ' . $SQL->tableName('players') . '.' . $SQL->fieldName('level') . ', ' . $SQL->tableName('players') . '.' . $SQL->fieldName('skull') . ', ' . $SQL->tableName('players') . '.' . $SQL->fieldName('looktype') . ', ' . $SQL->tableName('players') . '.' . $SQL->fieldName('lookaddons') . ', ' . $SQL->tableName('players') . '.' . $SQL->fieldName('lookhead') . ', ' . $SQL->tableName('players') . '.' . $SQL->fieldName('lookbody') . ', ' . $SQL->tableName('players') . '.' . $SQL->fieldName('looklegs') . ', ' . $SQL->tableName('players') . '.' . $SQL->fieldName('lookfeet') . ' FROM ' . $SQL->tableName('accounts') . ', ' . $SQL->tableName('players') . ', ' . $SQL->tableName('players_online') . ' WHERE ' . $SQL->tableName('players') . '.' . $SQL->fieldName('id') . ' = ' . $SQL->tableName('players_online') . '.' . $SQL->fieldName('player_id') . ' AND ' . $SQL->tableName('accounts') . '.' . $SQL->fieldName('id') . ' = ' . $SQL->tableName('players') . '.' . $SQL->fieldName('account_id') . ' ORDER BY ' . $SQL->fieldName($orderby))->fetchAll();

 

Como ficou quando tu tentou fazer? A proposito, to olhando bem aqui, ta pessimo o jeito que fizeram isso, ta fazendo um join entre tabelas direto no from, isso e pessimo e não deve ser feito. Daqui a pouco eu faço e edito aqui, mas tu ao menos tentou fazer? Se sim como ficou a query

 

#edit

 

Fiz aqui, tirei essa viadagem toda ai da classe query, só tem necessidade de validar o que vem da aplicação, o restante é estatico não tem porque usar isso ai.

$players_online_data = $SQL->query('SELECT 
  p.name, p.vocation, p.level, p.skull, p.looktype, p.lookadons, p.lookhead, p.lookbody, p.lookfeet, p.looklegs
  g.name AS guild_name, a.flag, gr.guild_id, gr.level AS guild_level
FROM players p
  INNER JOIN players_online po 
    ON p.id = po.player_id
  INNER JOIN accounts a 
    ON a.id = p.account_id
  INNER JOIN guilds g 
    ON p.rank_id = g.id
  INNER JOIN guild_ranks gr 
    ON g.id = gr.guild_id
ORDER BY ' . $SQL->fieldName($orderby) )->fetchAll();

E a proposito, não é legal fazer esse metodos direto nas paginas de exibição, mas como não sei como é estruturada essa aplicação não da pra opinar muito. Porém é aconselhavel o uso de um mvc caso exista já

Editado por dalvorsn
Link para o comentário
Compartilhar em outros sites

  • 0
18 horas atrás, dalvorsn disse:

Como ficou quando tu tentou fazer? A proposito, to olhando bem aqui, ta pessimo o jeito que fizeram isso, ta fazendo um join entre tabelas direto no from, isso e pessimo e não deve ser feito. Daqui a pouco eu faço e edito aqui, mas tu ao menos tentou fazer? Se sim como ficou a query

 

#edit

 

Fiz aqui, tirei essa viadagem toda ai da classe query, só tem necessidade de validar o que vem da aplicação, o restante é estatico não tem porque usar isso ai.

$players_online_data = $SQL->query('SELECT   p.name, p.vocation, p.level, p.skull, p.looktype, p.lookadons, p.lookhead, p.lookbody, p.lookfeet, p.looklegs  g.name AS guild_name, a.flag, gr.guild_id, gr.level AS guild_levelFROM players p  INNER JOIN players_online po     ON p.id = po.player_id  INNER JOIN accounts a     ON a.id = p.account_id  INNER JOIN guilds g     ON p.rank_id = g.id  INNER JOIN guild_ranks gr     ON g.id = gr.guild_idORDER BY ' . $SQL->fieldName($orderby) )->fetchAll();

E a proposito, não é legal fazer esse metodos direto nas paginas de exibição, mas como não sei como é estruturada essa aplicação não da pra opinar muito. Porém é aconselhavel o uso de um mvc caso exista já

 

- Então pae, deu o erro seguinte:

Spoiler

Fatal error: Uncaught Error: Call to a member function fetchAll() on boolean in C:\xampp\htdocs\pages\whoisonline.php:32 Stack trace: #0 C:\xampp\htdocs\system\load.page.php(7): include() #1 C:\xampp\htdocs\site.php(37): include_once('C:\\xampp\\htdocs...') #2 {main} thrown in C:\xampp\htdocs\pages\whoisonline.php on line 32

Está linha é:

ORDER BY ' . $SQL->fieldName($orderby) )->fetchAll();

 

Creio que o mesmo erro que se deu no que tentei colocar.

Link para o comentário
Compartilhar em outros sites

  • 0
3 horas atrás, julhinhuu disse:

 

- Então pae, deu o erro seguinte:

  Ocultar conteúdo

Fatal error: Uncaught Error: Call to a member function fetchAll() on boolean in C:\xampp\htdocs\pages\whoisonline.php:32 Stack trace: #0 C:\xampp\htdocs\system\load.page.php(7): include() #1 C:\xampp\htdocs\site.php(37): include_once('C:\\xampp\\htdocs...') #2 {main} thrown in C:\xampp\htdocs\pages\whoisonline.php on line 32

Está linha é:

ORDER BY ' . $SQL->fieldName($orderby) )->fetchAll();

 

Creio que o mesmo erro que se deu no que tentei colocar.

Isso já tinha antes no código, eu só repassei, onde voce configura a variavel $orderby?

Link para o comentário
Compartilhar em outros sites

  • 0
2 minutos atrás, dalvorsn disse:

Isso já tinha antes no código, eu só repassei, onde voce configura a variavel $orderby?

Pae ai você me complica falando tão complicado '(rs)'.

Já veio junto com website então está da mesma forma que veio.

Link para o comentário
Compartilhar em outros sites

  • 0
7 minutos atrás, julhinhuu disse:

Pae ai você me complica falando tão complicado '(rs)'.

Já veio junto com website então está da mesma forma que veio.

$players_online_data = $SQL->query("SELECT   p.name, p.vocation, p.level, p.skull, p.looktype, p.lookadons, p.lookhead, p.lookbody, p.lookfeet, p.looklegs  g.name AS guild_name, a.flag, gr.guild_id, gr.level AS guild_levelFROM players p  INNER JOIN players_online po     ON p.id = po.player_id  INNER JOIN accounts a     ON a.id = p.account_id  INNER JOIN guilds g     ON p.rank_id = g.id  INNER JOIN guild_ranks gr     ON g.id = gr.guild_idORDER BY {$orderby}")->fetchAll();

Faz o seguinte, deixa ele assim entao, porque eu também não sei e nem quero ler agora essa classe sql pra ver porque, ta seguro fazer com o orderby direto usa assim que vai funcionar provavelmente

Editado por dalvorsn
Link para o comentário
Compartilhar em outros sites

  • 0
4 minutos atrás, dalvorsn disse:
$players_online_data = $SQL->query("SELECT   p.name, p.vocation, p.level, p.skull, p.looktype, p.lookadons, p.lookhead, p.lookbody, p.lookfeet, p.looklegs  g.name AS guild_name, a.flag, gr.guild_id, gr.level AS guild_levelFROM players p  INNER JOIN players_online po     ON p.id = po.player_id  INNER JOIN accounts a     ON a.id = p.account_id  INNER JOIN guilds g     ON p.rank_id = g.id  INNER JOIN guild_ranks gr     ON g.id = gr.guild_idORDER BY {$orderby}")->fetchAll();

Faz o seguinte, deixa ele assim entao, porque eu também não sei e nem quero ler agora essa classe sql pra ver porque ta seguro fazer com o orderby direto usa assim que vai funcionar provavelmente

Está dando o erro anterior na mesma linha 32, creio que teria que adiciona na tabela $SQL o que está já está no mesmo. Mas não tenho um conhecimento igual ao seu. :\

Editado por julhinhuu
Link para o comentário
Compartilhar em outros sites

  • 0

Qual site tu ta usando e me manda um link dele, nao vai ter jeito, vou ter que ler porque isso nao ta indo, e tem certeza que o erro é o mesmo? nao faz muito sentido ser o mesmo

Link para o comentário
Compartilhar em outros sites

  • 0
13 minutos atrás, dalvorsn disse:

Qual site tu ta usando e me manda um link dele, nao vai ter jeito, vou ter que ler porque isso nao ta indo, e tem certeza que o erro é o mesmo? nao faz muito sentido ser o mesmo

Agradeço por está me ajudando =):

Editado por julhinhuu
Link para o comentário
Compartilhar em outros sites

  • 0
19 minutos atrás, julhinhuu disse:

Agradeço por está me ajudando =):

Nossa, esqueci uma virgula na query kk

Antes de rodar isso no php vai no phpmyadmin e roda isso e ve la se da algum erro, se tem algum campo com nome errado e etc, se rodar ok eu boto pro php

SELECT   p.name, p.vocation, p.level, p.skull, p.looktype, p.lookaddons, p.lookhead, p.lookbody, p.lookfeet, p.looklegs,  g.name AS guild_name, a.flag, gr.guild_id, gr.level AS guild_levelFROM players p  INNER JOIN players_online po     ON p.id = po.player_id  INNER JOIN accounts a     ON a.id = p.account_id  INNER JOIN guilds g     ON p.rank_id = g.id  INNER JOIN guild_ranks gr     ON g.id = gr.guild_idORDER BY name

 

Link para o comentário
Compartilhar em outros sites

  • 0
6 minutos atrás, dalvorsn disse:

Nossa, esqueci uma virgula na query kk

Antes de rodar isso no php vai no phpmyadmin e roda isso e ve la se da algum erro, se tem algum campo com nome errado e etc, se rodar ok eu boto pro php

SELECT   p.name, p.vocation, p.level, p.skull, p.looktype, p.lookaddons, p.lookhead, p.lookbody, p.lookfeet, p.looklegs,  g.name AS guild_name, a.flag, gr.guild_id, gr.level AS guild_levelFROM players p  INNER JOIN players_online po     ON p.id = po.player_id  INNER JOIN accounts a     ON a.id = p.account_id  INNER JOIN guilds g     ON p.rank_id = g.id  INNER JOIN guild_ranks gr     ON g.id = gr.guild_idORDER BY name

 

teste2.pngteste1.pnguma pequena coisa atrapalha muito :\ kkk

teste2.thumb.png.8d4daffccaae655497e2d4ffdecf6d55.png

teste1.thumb.png.0d521e467e25d4fcec7ddc1eb5088226.png

Editado por julhinhuu
Link para o comentário
Compartilhar em outros sites

  • 0
11 minutos atrás, julhinhuu disse:

teste2.pngteste1.pnguma pequena coisa atrapalha muito :\ kkk

EU fiz a query baseada em versoes diferentes, vou ver o schema sql do tfs aqui e remontar, pode ter bastante coisa diferente, amanha eu te mando isso

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...