Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

ZUCOLLI

[Resolvido] IF ELSE não funciona

Recommended Posts

Boa noite pessoal...

 

 

Acho que é uma dúvida irrelevante para alguns, mas quando eu tento várias vezes e não consigo...

 

Se no banco de dados na coluna FOTO existe algo (caminho da imagem) ele coloca a imagem, se não tem nada ou seja é vazio ele coloca uma imagem padrão.

 

O que estou fazendo de errado, sendo que o PHP só está trazendo a foto do IF, do ELSE não.

 

 

if (isset($row['foto'])) {$html .= "<li class='foto'><img src='".$row['foto']."'/></li>";}
else { $html .= "<li class='foto'><img src='images/foto-padrao.jpg'/></li>"; };

 

 

 

Código inteiro

<body>
<div id="geral">
 <div id="cima"><h1 id="logo_perfil">Pefil <span class="nuato">NuAto</span></h1></div>
 <div id="esquerda">texto</div>
 <div id="direita">
<?php
  require_once('coneccoes/descricoes_db.php');

  $strSql = "SELECT * FROM usuarios ORDER BY RAND() LIMIT 3";
  $consulta = mysql_query($strSql) or die (mysql_error());


  while ($row = mysql_fetch_assoc($consulta)) {

  $html .= "<ul class='usuario'>";
  if (isset($row['foto'])) {$html .= "<li class='foto'><img src='".$row['foto']."'/></li>";}
  else { $html .= "<li class='foto'><img src='images/foto-padrao.jpg'/></li>"; };
  $html .= "<li class='nome'> ".$row['nome']. "</li>";
  $html .= "<li class='funcao'> ".$row['grupo']. "</li>";
  $html .= "<li class='tel'>Telefone: ". $row['tel_casa'] ."</li>";
  $html .= "<li class='tel'>Celular: ". $row['tel_cel'] ."</li>";
  $html .= "</ul>";
  echo $html;
  }

  mysql_free_result($consulta);
   ?>
 </div>
 <div id="rodape"></div>
</div>
</body>

 

 

Outra coisa e porque esta linha me devolve 5 registros e não 4, se o LIMIT está como 3?

$strSql = "SELECT * FROM usuarios ORDER BY RAND() LIMIT 3";

 

 

Obrigado

 

ZUCOLLI

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode tentar:

 

if( isset( $row['foto'] ) && file_exists( $row['foto'] ) ){
   $html .= "<li class='foto'><img src='".$row['foto']."'/></li>"
}
else{
   $html .= "<li class='foto'><img src='images/foto-padrao.jpg'/></li>"
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu acho que é o caso do "null" do banco ser diferente do "null" do php, da um var_dump($row) e ve se não vai vir uns campos com string(7) e valor " "

 

se for isso, basta fazer uma variável receber um trim($row['campo_da_foto']) antes de testar o isset();

 

é uma possibilidade, mas de qualquer jeito o var_dump vai te dizer alguma coisa ja

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia...

 

Trocando por EMPTY ficou ao contrário, onde é a foto certa ele trouxe a foto padrão e as outras ele continua não trazendo (quando deveria ser a foto padrão).

 

 

Obrigado.

 

 

ZUCOLLI

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia,

 

Veja se algo assim ajuda:

 

PHP


<ul>

<?php

require_once('coneccoes/descricoes_db.php');

$strSql = "SELECT * FROM imagem ORDER BY RAND() LIMIT 0,3";

$consulta = mysql_query($strSql) or die (mysql_error());

while ($row = mysql_fetch_array($consulta)) {

 if(!$row["caminho"]){
   ?>
     <li><img src="img/em-breve.png" /></li>
   <?php
 }
 else{

?>

 <li><img src="<?php echo $row["caminho"]; ?>" /></li>

<?php

 }
}

mysql_free_result($consulta);

?>  

</ul>

<?php

/*

require_once('coneccoes/descricoes_db.php');

$strSql = "SELECT * FROM usuarios ORDER BY RAND() LIMIT 3";

$html .= "<ul class='usuario'>";
if (isset($row['caminho'])) {$html .= "<li class='foto'><img src='".$row['caminho']."'/></li>";}
else { $html .= "<li class='foto'><img src='img/em-breve.png'/></li>"; };
$html .= "<li class='nome'> ".$row['id']. "</li>";
$html .= "<li class='funcao'> ".$row['id']. "</li>";
$html .= "<li class='tel'>Telefone: ". $row['id'] ."</li>";
$html .= "<li class='tel'>Celular: ". $row['id'] ."</li>";
$html .= "</ul>";
echo $html;

*/

?>

 

DICA: A cláusula LIMIT precisa ter inicio e fim.

 

Exemplo:

 

SQL

LIMIT 0,3

 

Espero que ajude.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia...

 

Trocando por EMPTY ficou ao contrário, onde é a foto certa ele trouxe a foto padrão e as outras ele continua não trazendo (quando deveria ser a foto padrão).

 

 

Obrigado.

 

 

ZUCOLLI

Se ficou ao contrário, inverta o operador:

 

printf( '<img src="%s" alt="Profile" />',
   ( ! empty( $variável_da_foto ) ? $variável_da_foto : 'path/da/imagem/padrão.jpg' ) );

Se sabe ou não, isso é um operador condicional ternário. A sintaxe é aseguinte:

 

( TESTE_LOGICO ? CONDIÇÃO_SE_VERDADEIRO : CONDIÇÃO_SE_FALSO )

Nosso teste é verificar se o campo NÃO está vazio.

 

Se NÃO ( ! ) estiver (TRUE), usamos o valor presente. Se estiver (FALSE), usamos a imagem padrão.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente inverter, o negativo dele é !empty.

 

Bom dia...

 

Trocando por EMPTY ficou ao contrário, onde é a foto certa ele trouxe a foto padrão e as outras ele continua não trazendo (quando deveria ser a foto padrão).

 

 

Obrigado.

 

 

ZUCOLLI

 

outra coisa q você pode fazer é testar se a condição está correta (se ele está entrando na condição), assim:

 if (condicao1){
   echo "condição 1";
 } else {
   echo "outra condição";
 }

 

Bem, se ele estiver entrando nas duas condições certinho, você deve estar colocando ou o caminho ou o nome da foto errada, verifique isso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde a todos...

 

Deu certo da seguinte forma... alterando para !EMPTY

 

if (!empty($row['foto'])) {$html .= "<li class='foto'><img src='".$row['foto']."'/></li>";}
else { $html .= "<li class='foto'><img src='images/foto-padrao.jpg'/></li>"; };

 

Já a consulta com LIMIT ainda não dá certo... alguém pode me ajudar? Não sei se está na ordem errada ou se a consulta não está feita corretamente. Está trazendo 5 registros e só quero 4, e assim mesmo na tabela só tem 3 registros... Dá para trazer só os 4 registros que eu preciso e se tiver menos que 4 só trazer quantos existir?

$strSql = "SELECT * FROM usuarios ORDER BY RAND() LIMIT 0,3";

 

Obrigado

 

ZUCOLLI

Compartilhar este post


Link para o post
Compartilhar em outros sites

olha.. o tema "LIMIT" é MySQL.. n tem mt a ver c/ PHP, ok? enfim..

o limit aceita 1 ou 2 parametros (ou argumentos);

se você usar apenas 1 (ex: limit 3), serão retornados apenas 3 registros (ou 3 linhas).

se você usar os 2, o 1º (que é opcional) passa a ser o nº d linhas q você deseja ocultar..

e o 2º o nº maximo de linhas que você deseja exibir.

ex: digamos que você deseja ordenar seus registros pela data + recente, mas não exibir o registro mais recente, usando por exemplo order by data desc

usando limit 1,1 vai te retornar o penultimo.. e apenas esse registro;

falando assim fica meio confuso, mas veja 1 exemplo concreto aqui:

http://www.canaldev.com.br/topico/1923-tutorial-destaque-o-registro-mais-recente-com-dreamweaver/

assim:

Está trazendo 5 registros (...) e assim mesmo na tabela só tem 3 registros

tem certeza?? mas na verdade, não importa quantos registros a tabela tem... se a tabela só tem 3 registros, pode por limit 500000000; ele vai t retornar todos os registros até o máximo de 500000000, ok?

e só quero 4

então tente limit 4

Compartilhar este post


Link para o post
Compartilhar em outros sites

se você usar os 2, o 1º (que é opcional) passa a ser o nº d linhas q você deseja ocultar..

Não é bem isso que diz a documentação.

 

Se você usar dois argumentos na cláusula LIMIT, o primeiro define o offset e o segundo o número de registros a serem retornados.

 

Por offset, já que não temos uma tradução plausível para o termo, temos como um delimitador para que a limitação seja aplicada. Ex:

 

Uma tabela com 10 registros:

 

  • Nome 1
  • Nome 2
  • Nome 3
  • Nome 4
  • Nome 5
  • Nome 6
  • Nome 7
  • Nome 8
  • Nome 9
  • Nome 10

Usar LIMIT 2,3 retornará:

 

  1. Nome 4
  2. Nome 5
  3. Nome 6

Lembrando que, assim como nos arrays, do PHP e de outras linguagens, o offset inicia em zero.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia

 

Eu entendi, porém se eu usar apenas o 1° valor vai me trazer a quantidade de linhas desejada a contar da primeira linha do resultado da busca certo?

 

Não está acontecendo.

Se coloco LIMIT 2 ele traz 3 registros, se coloco LIMIT 3 para trazer o resultado que preciso que é 4 registros ele traz 6...

 

é isso. Erro

 

Zucolli

Compartilhar este post


Link para o post
Compartilhar em outros sites
Uma tabela com 10 registros:

 

* Nome 1

* Nome 2

* Nome 3

* Nome 4

* Nome 5

* Nome 6

* Nome 7

* Nome 8

* Nome 9

* Nome 10

 

Usar LIMIT 2,3 retornará:

* Nome 4

* Nome 5

* Nome 6

 

Bruno.. na boa.. fiz esse teste.. comigo n rolou n.. rolou normal:

 

   * Nome 3
   * Nome 4
   * Nome 5

 

mas n usei nenhum order by.. seria isso??

agora fiquei curioso, se puder me explicar melhor..

e desde já agradeço, claro..

 

obs: se p/ acaso você quiser t passo 1 print da tela

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não faz sentido. Manda duas screenshots uma antes do LIMIT, que mostre uns cinco registros mais ou menos e outra depois dele.

 

Eu testei aqui antes de responder, já que eu nunca usei um LIMIT com offset, e funcionou certinho, sem ORDER nem nada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia,

 

Aqui também rodou a partir do terceiro registro com LIMIT 2,3.

 

Veja os testes:

 

Banco:

bancoe.jpg

 

Sql:

$sql = "SELECT caminho FROM imagem LIMIT 2,3";

 

Exibindo Imagens:

listandoimagensbanco.jpg

Compartilhar este post


Link para o post
Compartilhar em outros sites

Igual à primeira imagem, poste uma depois de usar o LIMIT.

 

Como eu não sei qual o nome de cada imagem presente na segunda, fica menos fácil de identificar.

 

Ms numprimeiro momento parece estar correto.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.