Ir para conteúdo

POWERED BY:

Arquivado

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

Chirlison

[Resolvido] Pular índice do array caso ele esteja vazio

Recommended Posts

Então com este código é só você mandar imprimir apenas os valores que não são vazios;

 

include "config/config.php";
$busca=mysql_query("SELECT * FROM campeonatos WHERE id='$id_campeonato'");
if(!mysql_num_rows($busca)){ 
echo 'Nenhum dado cadastrado na base de dados';
}else{
       echo "<select name=\"categoria\" id=\"categoria\">";
       while($ver=mysql_fetch_row($busca)){
                       $id=$ver[0];
                                       $categorias=$ver[10];

                                       }}

                                       $categorias=unserialize($categorias);   
                                       $array = array_filter($categorias);
                                       foreach($array as $valor){
$valor=$valor; 

                                       if ( $valor != "" ){
                                            echo "<option value='$valor'>$valor</option>"; 
                                       }
                                       }

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, quem nunca respondeu um tópico com sono que atire a primeira pedra.

 

Agora dei uma olhada melhor no seu tópico original, lá atrás e notei uma coisa.

 

As categorias vêm do formulário, via POST e você simplesmente as adiciona num array, sem verificar nem nada.

 

Oras, você deveria ter verificados antes:

 

$categoria1 = $_POST['categoria1'];
$categoria2 = $_POST['categoria2'];
$categoria3 = $_POST['categoria3'];
$categoria4 = $_POST['categoria4'];
$categoria5 = $_POST['categoria5'];

$categorias = array();

if( ! empty( $categoria1 ) ) {
   $categorias[] = $categoria1;
}

// E continua para as outras 4 restantes

Ou aplicar array_filter() depois de montado a matriz:

 

$categorias=array_filter( array($categoria1,$categoria2,$categoria3,$categoria4,$categoria5) );

Daí já cadastrava "limpo" no banco de dados.

 

Claro, ainda não esclarece o porquê de array_filter() não ter funcionado lá embaixo, depois de resgatadas as informações, mas pelo menos você faz certo.

 

if( $busca !== FALSE ) {

 

Esta intrução está errada!

 

Teste assim;

if ( ! $busca ) {

 

Mesma coisa para $data.

Você sabe o tamanho da dor de cabeça que usar APENAS o operador de nagação pode causar?

 

Jura que você nunca viu no Manual do PHP uns alertas de atenção gigantes, em vermelho, como esse?

 

Por acaso você leu a documentação de mysql_query() e mysql_fetch_assoc() que especificam que um dos valores de retorno é FALSE?

 

O único complemento que eu faria ao código que você se referiu na mensagem supra citada seria o de incluir mysql_num_rows(), ficando, no final, assim:

 

$busca = mysql_query( "SELECT `nome_do_campo` FROM campeonatos WHERE id='58'" );

if( $busca !== FALSE ) {

   if( (int) mysql_num_rows() > 0 ) {

       $data = mysql_fetch_assoc( $busca );

       if( $data !== FALSE ) {

           // O arroba suprime o E_NOTICE indesejado

           $data = @unserialize( $data );

           if( $data !== FALSE ) {

               // Descomentar a linha abaixo se ainda tiver dados em branco
               // $data = array_filter( $data );

               print '<pre>'; print_r( $data );
           }

       } else {

           echo 'Nenhum dado cadastrado na base de dados';
       }

   } else {

       echo 'Nenhum dado cadastrado na base de dados';
   }
}

O Manual é seu amigo.

 

Não precisa ter medo de lê-lo com mais cuidado. ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

[extract]Você sabe o tamanho da dor de cabeça que usar APENAS o operador de nagação pode causar?

 

Jura que você nunca viu no Manual do PHP uns alertas de atenção gigantes, em vermelho, como esse?

 

Por acaso você leu a documentação de mysql_query() e mysql_fetch_assoc() que especificam que um dos valores de retorno é FALSE?[/extract]

 

A resposta é não para as três perguntas.

 

Eu uso a classe PDO para conexão com BD, então não conheço bem o recurso específico para o mysql, logo, nunca vi tais alertas de atenção gigantes em vermelho

 

A respeito de ler o manual do PHP, eu o leio frequentemente mas apenas as partes que me interessam.

 

No mais, peço desculpas aos usuarios do fórum pela informação errada que postei.

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sem problemas, mas cuidado com isso de ler apenas o que te interessa.

 

Falo por experiência prórpia. No começo também achava que se eu soubesse só aquilo que me interessava estava tranquilo. Com o passar do tempo fui vendo cada peculiaridade de cada função, e que cada pequena coisa exigia uma verificação diferente para que não houvesse problemas.

 

Quanto ao uso das funções mysql_ é, de fato, o usuários está beeeem atrasado nesse ponto. Já fica o alerta, essa extensão está em vias de ser descontinuada. Portanto ou passe a usar a PDo (se houver a possibilidade de migração de BD) ou a MySQLi que é a "sucessora", digamos assim, da MySQL.

Compartilhar este post


Link para o post
Compartilhar em outros sites

No começo também achava que se eu soubesse só aquilo que me interessava estava tranquilo. Com o passar do tempo fui vendo cada peculiaridade de cada função, e que cada pequena coisa exigia uma verificação diferente para que não houvesse problemas.

 

 

Eu também. :huh:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu leio o manual do PHP, tenho alguns livros e pesquiso frequentemente sobre o assunto.

 

Acho que ninguém, nem mesmo o Rasmus Leedorf saiba de cabeça todas as funções e métodos do PHP.

 

Então, particularmente, não vejo necessidade prática de se decorar o manual e guardar na cabeça tudo sobre a linguagem.

 

 

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde a todos!

Pessoal, depois de fazer a verificação das categorias antes de colocá-las no array, agora esta tudo funcionando corretamente.

Muito agradecido aos colegas: jhrhp, Bruno Augusto, Bezerk e Carlos Coelho.

O meu muito abrigado a vocês, pois me ajudaram bastante.

Vlw pessoal.

t+.

Abaixo, segue o código final:

//Aqui, eu pego as categorias que vieram do formulário via  método post
$categoria1 = $_POST['categoria1'];
$categoria2 = $_POST['categoria2'];
$categoria3 = $_POST['categoria3'];
$categoria4 = $_POST['categoria4'];
$categoria5 = $_POST['categoria5'];

$categorias = array();

if( ! empty( $categoria1 ) ) {
   $categorias[] = $categoria1;
}

if( ! empty( $categoria2 ) ) {
   $categorias[] = $categoria2;
}
if( ! empty( $categoria3 ) ) {
   $categorias[] = $categoria3;
}

if( ! empty( $categoria4 ) ) {
   $categorias[] = $categoria4;
}

if( ! empty( $categoria5 ) ) {
   $categorias[] = $categoria5;
}

//Aqui é para gravar o array em uma tabela mysql 

$todas_categorias = serialize($categorias);

//Aqui, eu insiro as categorias no banco dedados

mysql_query("INSERT INTO campeonatos (categorias) values ('$todas_categorias')")or die("ERRO  ENCONTRADO: '.mysql_error()");

//Aqui, eu recupero as categorias no banco de dados e as imprimo dentro de um Select
include "config/config.php";
$busca=mysql_query("SELECT * FROM campeonatos WHERE id='$id_campeonato'");
if(!mysql_num_rows($busca)){ 
echo 'Nenhum dado cadastrado na base de dados';
}else{
 	echo "<select name=\"categoria\" id=\"categoria\">";
 	while($ver=mysql_fetch_row($busca)){
               	$id=$ver[0];
				$categorias=$ver[10];

				}}

  				//Aqui é para recuperar o array em uma tabela mysql 
 				$categorias=unserialize($categorias); 

				foreach($categorias as $valor){
				$valor=$valor;
				if ( $valor != "" ){
        									echo "<option value='$valor'>$valor</option>"; 
                                   	}
                                   	}

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.