Ir ao conteúdo
  • Cadastre-se

Colocando imagem em resultado mysql no código php


Posts recomendados

Olá amigos, sou novo no Fórum e preciso muito da ajuda de vocês grato!

 

O código abaixo e um código em php, que achei na internet e uso funciona bem porém quero melhorar para fica mais agradável e não apenas resultados em texto, quero algo alem vou explicar.

A conexão com o mysql funciona bem.

 

xOAh2Ss.png

 

O campo race, que é o meu problema eu quero que cada raça representada por um numero seja uma imagem exemplo: Raça 11 " humano.png".

O campo raça não veio com o código eu adicionei veio o resultado mais queria deixa-lo mais agradável fico muito feliz se alguém poder me ajuda sou bem iniciante.

Tem um outro site que vi que e exatamente o que quero fazer:
iWeMUeL.png

<html><head><title>Ranking Kill - 100</title></head><body><?phpinclude ("config.php");$connect = mysql_connect($host,$user,$pass) OR DIE("'Can't connect with $host");mysql_select_db($characters,$connect) or die(mysql_error());$result = mysql_query("SELECT * FROM `characters` ORDER BY `totalKills` DESC LIMIT 0 , 100 ");?><font color="#FBFBEF"><table align=center cellpadding="0" cellspacing="0" border="0" width=100%><thead><td width="4%"><center><font color="black">Posi.</font></center></td><td width="16%"><font color="black">Nome do Personagem</font></td><td width="16%"><font color="black">Race</font></td><td width="4%"><center><font color="black">Kills</font></center></td><td width="4%"><center><font color="black">Level</font></center></td></thead><tbody><?phpwhile($rows = mysql_fetch_object($result)){$i++;$name = $rows->name;$race = $rows->race;$Total_Kills = $rows->totalKills;$level = $rows->level;echo "<tr><td><center>",$i,"</center></td><td><b>",$name,"</b></td><td><b>",$race,"</b></td><td><center>",$Total_Kills,"</center></td><td><center>",$level,"</center></td></tr>";}?></body>
Link para o comentário
Compartilhar em outros sites

  • Moderador

@leonardofan

 

Isso é bem simples.   NO seu banco de dados na tabela de raças  além do ID e do nome, crie um campo chamado avatar.

 

Neste campo você armazenará apenas o nome da imagem por exemplo humano.png  e jogará a imagem em uma pasta no servidor.

 

E então quando for fazer o select você traz o nome da imagem.. e mostra em tela.. por exemplo:

ID raca    avatar11 Humano  humano.png 

e no php faz isto:

$avatar = "imagens/".$row->avatar;<td><img src='$avatar' alt='$race'/></td>

Lembrando que o ID dos registros precisam ser auto increments. 

 

Fora isso.. tem alguns errinhos.. como no echo.. não pode ter aspas duplas dentro de si mesmo.. nesse caso usa aspas duplas e aspas simples dentro.

Link para o comentário
Compartilhar em outros sites

Ok segui os passos veja o erro:

www.wowpandora.com.br

 

 

o procedimento que fiz:

Substitui: <td width="16%"><font color="black">Race</font></td> ( por: <td><img src='$avatar' alt='$race'/></td> )

 

 

e abaixo não entendi se era para alterar.

while($rows = mysql_fetch_object($result)) { $i++; $name = $rows->name; $race = $rows->race;

Quanto ao banco de dados dentro de characters no final fiz:

 

7DuQcHs.png

 

 

Há aqui esta a parte que n citei a cima que coloquei:

while($rows = mysql_fetch_object($result)) { $i++; $name = $rows->name; $guild = $rows->guild;$guild = $rows->guild;$Total_Kills = $rows->totalKills;$level = $rows->level; $online = $rows->online == 1 ? '<font color="#04B404">On</font>' : '<font color="#DF0101">.</font>';$guild = $rows->guild; $avatar = "imagens/".$row->avatar; 

ERRO FINAL:

http://prntscr.com/8nrwoa

 

 

Só para lembrar que cada numero e uma raça diferente.

Link para o comentário
Compartilhar em outros sites

  • Moderador

@leonardofan

 

O arquivo humano.png está na pasta certa?

 

notei que está aparecendo $race  .. e não  a imagem..  coloca o código completo aqui pra mim ter uma ideia melhor

 

Tens que pensar na seguinte lógica:

 

Tenho uma tabela de raças.  esta tabela deve conter 3 campos:  ID, nome da raça e a imagem que ela representa.

esta tabela vai se relacionar com outras.

 

Se a tabela não estiver recebendo uma chave estrangeira, não tem sentido por o campo raça com números. pois cada raça é identificada por um ID diferente.

 

Para mostrar em tela...  tens que fazer o select nesta tabela e colocar o nome da imagem, concatenada com o caminho do arquivo.. no atributo src.

 

então se no HTML mostramos uma imagem assim:

<img src="imagens/humano.png" alt="Humano" />

No php você mostra assim:

//dentro do whilewhile($row = mysql_fetch_object($consulta):echo"   <img src='imagens/$img' alt='$race' />endwhile; 

Omiti os outros dados para você ver com mais facilidade a parte da imagem.

então se estás usando uma estrutura de tabelas.. você coloca o inicio fora do while .. e as linhas dentro...  

Para entender, recomendo que poste também a imagem da estrutura de como está no banco de dados. por exemplo

<table>  <tr>     <th>Pos</th>     <th>Nome</th>     <th>Raça</th>     <th>Kills</th>     <th>Level</th>   </tr>  <?php        while($row = mysql_object($consulta)):       $i++;       echo"            <tr>                <td>$i</td>                <td>$row->name</td>                <td><img src='imagens/$row->avatar' alt='$row->race'</td>                <td>$row-totalkills</td>                <td>$row->levels</td>              endwhile;       

Para que isso funcione precisas seguir as normas formais do mysql.. e usar a clausula INNER JOIN.. para atribuir a raça ao jogador durante a consulta.

 

 

Então tipo, tens a tabela de raças nela vai conter apenas 3 campos.  ID, nome e avatar.

Na tabela characters,  você recebe a chave estrangeira da tabela raças,, para dizer que aquele jogador X é da raça Y.

Para que isso funcione... as tabelas do banco precisam ser do tipo innoDB e ter um índice na tabela que controlará tudo.. no caso characters.

 

Com tudo isso.. a consulta vai ser:

SELECT characters.*, racas.* FROM characters INNER JOIN racas ON racas.ID = characters.raca_IDORDER BY totalKills DESC LIMIT 0 , 100

O melhor é você escrever por extenso todos os campos que vai trazer de todas as tabelas.. não economize dedos.  exemplo:

SELECT characters.nome,       characters.level,       characters.totalkill,           racas.nome,       racas.avatar FROM characters INNER JOIN racas ON racas.ID = characters.raca_IDORDER BY characters.totalkill DESC LIMIT 0 , 100

é mais trabalhoso... mas é melhor para você visualizar o que estás trazendo do banco de dados.

Link para o comentário
Compartilhar em outros sites

Não entendi nada sei que deve está bem explicado mais baseado no que eu tenho e meu pouco conhecimento esta tudo sem pé e sem cabeça na minha mente. há outra forma de você me ajuda aqui no fórum acho que será impossível mais se não tiver vou tenta mesmo assim. facebook, skyper.

 

por que o banco de dados e pronto veja.

 

http://www.mediafire.com/download/6q324v612730032/banco_de_dados.rar

 

 

o banco e esse e a pagina e esse.

Link para o comentário
Compartilhar em outros sites

  • Moderador

@leonardofan

 

Não tem outro meio a não ser por aqui mesmo. 

Bom eu sei que seu conhecimento é pouco por isso temos que começar desde o início..

 

Não baixei o link posto ali.. só precisava ver a estrutura mesmo em imagem.. mas tudo bem vamos lá

 

Antes de mais nada para que tudo funcione certinho precisas que seu banco de dados esteja modelado conforme as normas formais.. onde diz que uma tabela onde contém muitos campos, deve ser separada em tabelas menores e relacionadas uma com as outras através da chave primária e estrangeira.

 

Então vamos lá

 

Basicamente o banco terá  pelo menos 3 tabelas:

 

usuarios(conterá dados cadastrais dos jogadores)

characters (conterá dados do personagem) 

racas(conterá o nome das raças e o nome da imagem que a representa)

 

A tabela characters será a responsável por controlar o banco de dados.. por isso ela terá os índices das chaves estrangeiras  de cada tabela que irá se relacionar com ela.

 

Cada uma das tabelas tem um campo comum chamado de ID.  este campo deve ser do tipo INT tamanho 11 e ser marcado como auto_increment.. ou seja a cada registro feito nela aumentará em 1.. ou seja se o primeiro registro é 1.. o próximo automaticamente é o 2.

 

Na tabela characters, conterá um campo chamado  ID_racas  onde este campo deve ser do tipo INT tamanho 11. por que ela será o campo Chave estrangeira que receberá o valor da chave primária da tabela raças.

Para criar um índice... pode ser feito em linha de comando ou no phpmyadmin na aba da estrutura. posteriormente eu procuro o um tópico na qual eu mostro como se faz isso..

Continuando,  terá pelo menos 2 índices um para o campo ID_raca e outro para ID_usuario.

 

Com isso podemos fazer o relacionamento de 1:N ( 1 para muitos)  na tabela characters - usuarios e   characters - racas.

 

Agora podemos primeiro testar se está trazendo os dados certos... no phpmyadmin mesmo clique no icone de consulta SQL 

e faz um select parecido com o que postei mais acima, sempre escrevendo os nome da tabela seguida de ponto e o nome do campo.  usando a clausula inner join. 

 

por exemplo:

SELECT characters.nome,       characters.level,       characters.totalkill,           racas.nome,       racas.avatar FROM characters INNER JOIN racas ON racas.ID = characters.raca_IDORDER BY characters.totalkill DESC LIMIT 0 , 100

A clausula que diz onde relacionar a raça com o usuário X é esta:

 

INNER JOIN racas ON racas.ID = characters.raca_ID

 

está dizendo que onde na tabela racas o campo racas.ID seja igual ao campo raca_ID contida na tabela characters.

 

Se assim aparecer por exemplo:

O nome do personagem, level, total de kills, o nome da raça e o nome da imagem da raça... está no caminho certo.

 

Vou parar por aqui. pois vou deixar primeiro você fazer o que disse no banco de dados... que é a primeira coisa..  SE o banco de dados estiver errado..  sua aplicação no php  vai dar errado também.. então é muito importante primeiro que você ajeite o banco e dados...

Link para o comentário
Compartilhar em outros sites

  • Moderador

@leonardofan

 

É uma pena.. mas SE não fizer do jeito que disse...  não tem como associar um número a uma raça..  e uma imagem. precisa seguir regras.

 

1) é uma prática muito errada, copiar e colar algum código da net sem pelo menos entender o que se passa em cada linha.

2) é inevitável re-fazer...  só assim a gente aprende.. fazendo.. errando... e fazendo de novo...

 

 

 Para mim seria fácil baixar o arquivo que postou alterar e mandar de volta.. mas o objetivo não é esse...  eu quero que você aprenda!  por isso escreve os passos aqui

Link para o comentário
Compartilhar em outros sites

Você não precisa necessariamente de uma tabela no BD pra isso, pode fazer algo mais simples, como um vetor com imagens e a chave sendo esse número da raça.

 

Algo como:

// racas.php function getImagemPorRaca($raca) {   $imagensRacas = array(      0 => 'humano.png',      1 => 'orc.png',      ...      10 => 'elfo.png'   );   return 'img/racas/' . $imagensRacas[$raca];}// fim racas.php // na página da tabela faça antes do loop principalrequire_once('racas.php'); // e dentro do loop coloque uma chamada pra função$avatar = getImagemPorRaca($row->race);echo '<img src="' . htmlspecialchars($avatar, ENT_QUOTES, 'utf-8') . '" />';

Mas recomendo que você procure entender um pouco de tabelas e relacionamentos entre elas, vai ajudar bastante e verá que o exemplo do colega acima é bem mais completo, por exemplo se aparecer uma raça nova não precisaria alterar o programa, apenas acrescentar uma linha na tabela de raças.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...