Jump to content
ofx120

[Resolvido] Imagens em lista de resultados

Recommended Posts

ofx120

Olá a todos,

Este é o meu primeiro post aqui no forum e também relacionado com PHP.

Tenho uma página de pesquisa de artigos (dados) de uma tabela em mysql.

Tenho imagens de quase todos os artigos numa pasta no servidor.

A minha questão é se é possível colocar uma imagem junto ao detalhe de artigo.

Share this post


Link to post
Share on other sites
tiago.f

Olá ofx,

a resposta é: sim, é.

O teu php apenas tem que gerar o html correcto para isso.

  • Vote 1

Share this post


Link to post
Share on other sites
ofx120

tiago.f obrigado pela resposta.

Eis o código que uso para apresentar os registos filtrados.

O que pretendo é disponibilizar na net uma base de dados que tenho em access (que estou a passar para um servidor na net MYSQL) para gerenciamento de artigos, digo isto para que saibam que não percebo nada de PHP, sendo que o que tenho conseguido é pelo tradicional sistema do "copy/paste". :(

Por isso agradeço a ajuda e paciência em tentar ajudar.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
   <title>Search results</title>
   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
   <link rel="stylesheet" type="text/css" href="style.css"/>
</head>
<body>
<?php
   $query = $_GET['query'];
   // gets value sent over search form

   $min_length = 3;
   // you can set minimum length of the query if you want

   if(strlen($query) >= $min_length){ // if query length is more or equal minimum length then

    $query = htmlspecialchars($query);
    // changes characters used in html to their equivalents, for example: < to >

    $query = mysql_real_escape_string($query);
    // makes sure nobody uses SQL injection

    $raw_results = mysql_query("SELECT * FROM tblArtigo
	    WHERE (`idArtigo` LIKE '%".$query."%') OR (`DescArtigoPT` LIKE '%".$query."%')") or die(mysql_error());

    // * means that it selects all fields, you can also write: `id`, `title`, `text`
    // articles is the name of our table

    // '%$query%' is what we're looking for, % means anything, for example if $query is Hello
    // it will match "hello", "Hello man", "gogohello", if you want exact match use `title`='$query'
    // or if you want to match just full word so "gogohello" is out use '% $query %' ...OR ... '$query %' ... OR ... '% $query'

    if(mysql_num_rows($raw_results) > 0){ // if one or more rows are returned do following

	    while($results = mysql_fetch_array($raw_results)){
	    // $results = mysql_fetch_array($raw_results) puts data from database into array, while it's valid it does the loop


	    echo "<p><h3>".$results[idArtigo]."</h3>".$results['DescArtigoPT']."</p>";
		    // posts results gotten from database(title and text) you can also show id ($results['id'])
	    }

    }
    else{ // if there is no matching rows do following
	    echo "No results";
    }
   }
   else{ // if query length is less than minimum
    echo "Minimum length is ".$min_length;
   }

?>
</body>
</html>

Share this post


Link to post
Share on other sites
tiago.f

Olá ofx.

Para mostrar a imagem de cada artigo basta que coloques a respectiva tag (<img>) quando "escreves" cada artigo - aqui:

echo "<p><h3>".$results[idArtigo]."</h3>".$results['DescArtigoPT']."</p>";
// posts results gotten from database(title and text) you can also show id ($results['id'])
}

A parte "dificil" é saberes o ur (atributo "src") da imagem....mas isso depende do teu sistema

ps: se facto não percebes nada de php, então, antes de mais, sugiro aprenderes. Copy&paste + Google não é boa política quando corremos o risco de não perceber o que estamos a re-utilizar!

Edited by tiago.f
  • Vote 1

Share this post


Link to post
Share on other sites
ofx120

Olá ofx.

Para mostrar a imagem de cada artigo basta que coloques a respectiva tag (<img>) quando "escreves" cada artigo - aqui:

echo "<p><h3>".$results[idArtigo]."</h3>".$results['DescArtigoPT']."</p>";
// posts results gotten from database(title and text) you can also show id ($results['id'])
}

A parte "dificil" é saberes o ur (atributo "src") da imagem....mas isso depende do teu sistema

ps: se facto não percebes nada de php, então, antes de mais, sugiro aprenderes. Copy&paste + Google não é boa política quando corremos o risco de não perceber o que estamos a re-utilizar!

Olá tiago.f

Obrigado pela resposta.

Embora não perceba nada de PHP, tenho alguns conhecimentos em VBA, pelo que a logica da programação não me é desconhecida.

As minhas imagens estão numa pasta no server.

O nome das imagens é o "IdArtigo" e podem ser em PNG ou JPG.

fiz testes com uma imagem fixa e na lista de resultados não consigo visualizar.

Contudo se a colocar fora dos resultados consigo ver.

Eis o código que uso para a ver a imagem:

<img src="http://softtoyou.com/bs/img/608001000.PNG" width="50" height="50">

Share this post


Link to post
Share on other sites
tiago.f

O código parece-me OK.

Podes mostrar tudo (agora com a imagem fixa)?

Edited by tiago.f

Share this post


Link to post
Share on other sites
ofx120

Aqui está, desta forma consigo visualizar a imagem.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
   <title>Search results</title>
   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
   <link rel="stylesheet" type="text/css" href="style.css"/>
</head>
<body>
<?php
   $query = $_GET['query'];
   // gets value sent over search form

   $min_length = 3;
   // you can set minimum length of the query if you want

   if(strlen($query) >= $min_length){ // if query length is more or equal minimum length then

	    $query = htmlspecialchars($query);
	    // changes characters used in html to their equivalents, for example: < to >

	    $query = mysql_real_escape_string($query);
	    // makes sure nobody uses SQL injection

	    $raw_results = mysql_query("SELECT * FROM tblArtigo
			    WHERE (`idArtigo` LIKE '%".$query."%') OR (`DescArtigoPT` LIKE '%".$query."%')") or die(mysql_error());

	    // * means that it selects all fields, you can also write: `id`, `title`, `text`
	    // articles is the name of our table

	    // '%$query%' is what we're looking for, % means anything, for example if $query is Hello
	    // it will match "hello", "Hello man", "gogohello", if you want exact match use `title`='$query'
	    // or if you want to match just full word so "gogohello" is out use '% $query %' ...OR ... '$query %' ... OR ... '% $query'

	    if(mysql_num_rows($raw_results) > 0){ // if one or more rows are returned do following

			    while($results = mysql_fetch_array($raw_results)){
			    // $results = mysql_fetch_array($raw_results) puts data from database into array, while it's valid it does the loop


			    echo "<p><h3>".$results[idArtigo]."</h3>".$results['DescArtigoPT']."</p>";
					    // posts results gotten from database(title and text) you can also show id ($results['id'])
			    }

	    }
	    else{ // if there is no matching rows do following
			    echo "No results";
	    }
   }
   else{ // if query length is less than minimum
	    echo "Minimum length is ".$min_length;
   }

?>
<img src="http://softtoyou.com/bs/img/608001000.PNG" width="45" height="45">
</body>
</html>

Share this post


Link to post
Share on other sites
tiago.f

Olá,

se não estás a usar mysqli então em vez de

while($results = mysql_fetch_array($raw_results)){

deves ter

while($results = mysql_fetch_assoc($raw_results)){

depois no teu echo faltam algumas plicas em volta do IdArtigo

echo "<p><h3>".$results['IdArtigo']."</h3>".$results['DescArtigoPT']."</p>";

e acrescenta

echo '<img src="/images/' . $results['IdArtigo'] . '.PNG" width="45" height="45">';

logo de seguida (ou antes)

Assumo claro que as tuas imagens estão disponíveis na pasta "images", i.e, acessiveis atraves de

http://<site.pt>/images/<idArtigo>.png

  • Vote 1

Share this post


Link to post
Share on other sites
ofx120

Boa tarde tiago.f,

MUITO OBRIGADO

Como sabes funcionou na perfeição. (ou melhor, quase).

Tenho as seguintes questões;

1. Nalguns atigos não tenho foto, no meu sistema tenho um if que checa se tenho foto, e quando não tenho abre uma foto "sem foto".

2. Tenho fotos em PNG e JPG, é possivel incluir a possibilidade de abrir PNG ou JPG?

3. O resultados aparecem em linhas diferentes, é possivél colocar tudo na mesma linha?

Share this post


Link to post
Share on other sites
tiago.f

Boa tarde tiago.f,

MUITO OBRIGADO

Como sabes funcionou na perfeição. (ou melhor, quase).

Tenho as seguintes questões;

1. Nalguns atigos não tenho foto, no meu sistema tenho um if que checa se tenho foto, e quando não tenho abre uma foto "sem foto".

2. Tenho fotos em PNG e JPG, é possivel incluir a possibilidade de abrir PNG ou JPG?

Tens que validar se o ficheiro existe:

$imagem = null;
if( file_exists($_SERVER["DOCUMENT_ROOT"] . "/images/" . $results['IdArtigo'] . ".jpg" ) {
$imagem = $_SERVER["DOCUMENT_ROOT"] . "/images/" . $results['IdArtigo'] . ".jpg";
}
if( file_exists($_SERVER["DOCUMENT_ROOT"] . "/images/" . $results['IdArtigo'] . ".png" ) {
$imagem = $_SERVER["DOCUMENT_ROOT"] . "/images/" . $results['IdArtigo'] . ".png";
}

if ($imagem) {
echo "<img ......
}

3. O resultados aparecem em linhas diferentes, é possivél colocar tudo na mesma linha?

É só juntar os 2 echos dentro do mesmo <p>...

Edited by tiago.f
  • Vote 1

Share this post


Link to post
Share on other sites
ofx120

Boa tarde tiago.f,

Resolvido, muito obrigado pela ajuda e paciência.

  • Vote 1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.