Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bom dia!!!
Estou com problemas na impressão de dados.
Tenho duas tabelas, noticias e not_fotos, na primeira guardo os dados da notícia e na outra as fotos.
Preciso imprimir uma lista com as noticias cadastradas, porém só está imprimindo a primeira notícia, na segunda imprimi somente até a foto e mais nada.
Segue o código abaixo:
<?
include "conecta_mysql.inc";
$sql=mysql_query("SELECT * FROM noticia WHERE validar='s' and destaque='1' order by id DESC LIMIT 0,4");
$linha=mysql_num_rows($sql);
if($linha > 0){
while($res=mysql_fetch_array($sql)){?>
<div class="smtitulo"><?php echo $res['titulo'];?></div>
<div class="smNave"><?php echo $res['descricao'];?></div>
<? $id_foto = $res[id];
$sql_foto=mysql_query("SELECT * FROM not_fotos WHERE id_not='$id_foto' and posicao='1'");
$linha_foto=mysql_num_rows($sql_foto);
if($linha_foto > 0){
while($res_foto=mysql_fetch_array($sql_foto)){
if($res_foto['foto'] <> ""){ ?>
<div class="smtexto"><img src="../fotos_noticia/<?php echo $res_foto['foto'];?>" width="150" border="0"/>
<?
}
}
}
function limita_caracteres($texto, $limite, $quebra = true){
$tamanho = strlen($texto);
if($tamanho <= $limite){ //Verifica se o tamanho do texto é menor ou igual ao limite
$novo_texto = $texto;
}else{ // Se o tamanho do texto for maior que o limite
if($quebra == true){ // Verifica a opção de quebrar o texto
$novo_texto = trim(substr($texto, 0, $limite))."...";
}else{ // Se não, corta $texto na última palavra antes do limite
$ultimo_espaco = strrpos(substr($texto, 0, $limite), " "); // Localiza o útlimo espaço antes de $limite
$novo_texto = trim(substr($texto, 0, $ultimo_espaco))."..."; // Corta o $texto até a posição localizada
}
}
return $novo_texto; // Retorna o valor formatado
}
echo limita_caracteres( $res['texto'], 150, false); ?>
</div><br /><hr />
<?
}
}
?>Não é preciso duas consultas.
Siga a dica do Marcos.
Para verificação de campo em "branco" utilize a função empty();
if(!empty($var))
Passe a utilizar o MySQLi. mysql_ vai sumir.
testei o joins e achei bem interessante, mas não consegui resolver o problema.
Tenho duas tabelas:
notícias de onde quero imprimir os campo "titulo", "descricao" e parte do "texto.
E not_foto de onde quero imprimir o campo "foto" mas somente a que o campo "posição" seja igual a 1. Essa tabela not_foto é onde estou armazenando as fotos, para isso armazeno o id da notícia no campo id_not.
Quando o uso o código abaixo imprime somente os registros da tabela noticia que tem foto, e as que tem mais de uma foto imprime várias vezes, conforme a quantidade de fotos.
SELECT * FROM noticia n INNER JOIN not_fotos nf ON n.id=nf.id_not order by n.id DESC LIMIT 0,4
Tente colocar o nome das colunas na query, tipo.
SELECT titulo, descricao, texto, foto, posicao FROM noticia n INNER JOIN not_fotos nf ON n.id=nf.id_not order by n.id DESC LIMIT 0,4
Correto:
SELECT * FROM noticia n INNER JOIN not_fotos nf ON n.id=nf.id_not WHERE nf.posicao=1 order by n.id DESC LIMIT 0,4
Você não especificou o posição.
Agora está funcionando perfeitamente.
Obrigada pela ajuda.
Disponha :flores:
Você resolve isso praticamente com SQL (joins)
Algo como:
SELECT * FROM noticia n
INNER JOIN
not_fotos nf
ON n.id= nf.id_not order by n.id DESC LIMIT 0,4
Faz o teste diretamente no admin do MySql.
Faça testes com INNER JOIN,LEFT JOIN e RIGHT JOIN e perceba a
funcionalidade de cada um dos JOINS.