Ocultar celdas de tablas con PHP

Iniciado por Shon, 13 Enero 2011, 17:57 PM

0 Miembros y 1 Visitante están viendo este tema.

Shon

Hola, tengo esto:

Código (php) [Seleccionar]

<table>
<tr>
lo que sea
</tr>

<?php  while ($filas_resultados mysql_fetch_assoc($resultados)) ?>
<tr>
<td> </td>
<td> </td>
.... + php (echo's) + <a> + <img> etc
</tr>
<?php ?>

</table>




como véis, pretendo ocultar la segunda fila de la tabla, si no hay resultados en una busqueda y, si lo hay, que lo muestre.

Pues eso que pongo, no me lo muestra, ni cuando hay ni cuando no hay coincidencias.

A alguien se le ocurre por qué?

Gracias!!!!!

RedZer

lo que debes de hacer es condicionar si el resultado no viene vacio algo asi
Código (php) [Seleccionar]
if($filas_resultados!=' '){
                       se muestra la fila
                                   }else{
                         no se muestra la fila
                                           }
Nacido y criado entre gente que enseño a pensar antes de creer a ciegas, Todo me causa curiosidad en el mundo

Nakp

#2
Cita de: RedZer en 13 Enero 2011, 18:29 PM
lo que debes de hacer es condicionar si el resultado no viene vacio algo asi
Código (php) [Seleccionar]
if($filas_resultados!=' '){
                       se muestra la fila
                                   }else{
                         no se muestra la fila
                                           }


te he visto postear eso varias veces y dejame decirte que NO es correcto... '' != vacio, y mucho menos ' ' (con un espacio dentro) :¬¬ deja de postear eso, ya te lo explique aqui

para eso existe la funcion empty() que comprueba si el array esta vacio sin embargo... en php existe la funcion mysql_num_rows

imprime la segunda fila de tablas si hay resultados :P no la ocultes si no hay :xD cambia tu logica

Código (php) [Seleccionar]
if(myslq_num_rows($resultados) > 0){
  //imprime la fila
  while ($filas_resultados = mysql_fetch_assoc($resultados)){
    //imprime los resultados
  }
}
Ojo por ojo, y el mundo acabará ciego.

RedZer

bueno solo trataba de ayudar a este chavo , ya que nada mas ven el post y no le dicen nada al menos yo le aporte algo ya el decide si lo utiliza o no .
Nacido y criado entre gente que enseño a pensar antes de creer a ciegas, Todo me causa curiosidad en el mundo

Spider-Net


WHK

yo uso ! de plano y me ahorro las funciones

Código (php) [Seleccionar]
if($filas_resultados = mysql_fetch_assoc($resultados)))
echo 'ok';
else
echo 'error';


mysql_fetch_* debuelve un array solamente cuando hay resultados pero no hay ninguna función nativa que te debuelva arrays vacios o strings con un chr(0), asi que false se compara por igual a un string vacio o un array vacio a exepción cuando procesas formulartios, ahi estoy acostumbrado a usar trim() solamente y ! directo en arrays.

no se, es costumbre aunque lo mas correcto es usar empty() como dice nakp.

Diabliyo

#6
RedZer no es que se te insulte o menos aprecie tu intencion, pero vale mas un consejo bien dado que un consejo mal dado.

En tu caso le estas ense~ando a los usuarios una mala forma de programar y a eso yo le llamo: contaminar, ya que creas un vicio, como el usuario lo recvie mal, lo ense~a a otras personas mal.

Lo aconsejable es como lo menciona WHK y los demas, o bien como mi opinion, que primero resuelvo los errores y al final el exito, asi:

Código (php) [Seleccionar]
<?php
$consulta
'haces la consulta mysql';
$consmysql_query$consulta$link ); # metemos los datos a una variable
if( !mysql_num_rows($cons) ) # si esta vacio (sin datos)
    
echo 'Error';
else 
# existen datos, exito
    
{
    echo 
'resultados....';
    
# ... el demas code...
    
}
?>


En lo personal creo que es mucho mejor primero comprobar errores y despues poner el ELSE del exito, ya que si tenemos un formulario tipico de registro de usuario se nos generaria un engendro gigantes de if, else if, else if, else... que a fin de cuentas, los errores (mensajes) quedarian al final y al inicio lo exitos, pero mi consejo es que al principio los erroes y al final el exito, asi podras en un futuro modificar el codigo para mejorarlo o corregirlo sin tanto problema y perderte entre tanto { }.

Ejemplo:

Código (php) [Seleccionar]
<?php
if( !strcmp($_POST["form_email"], "") )
     echo 
'Error: inserta un mail.';
else if( !
validar_mail($_POST["form_email"]) )
     echo 
'Error Mail invalido.';
else if( 
otras variables )
     echo 
'Otros errores';
else
     echo 
'Exito';
?>

WHK

Cita de: Diabliyo en 14 Enero 2011, 18:12 PM
Código (php) [Seleccionar]
<?php
$consulta
'haces la consulta mysql';
$consmysql_query$consulta$link ); # metemos los datos a una variable
if( !mysql_num_rows($cons) ) # si esta vacio (sin datos)
    
echo 'Error';
else 
# existen datos, exito
    
{
    echo 
'resultados....';
    
# ... el demas code...
    
}
?>


Código (php) [Seleccionar]
<?php
if(!$consmysql_query('haces la consulta mysql'$link ))
 echo 
'Error';
else{
 echo 
'resultados....';
}
?>

Diabliyo

#8
Cita de: WHK en 14 Enero 2011, 18:40 PM
Código (php) [Seleccionar]
<?php
if(!$consmysql_query('haces la consulta mysql'$link ))
 echo 
'Error';
else{
 echo 
'resultados....';
}
?>



Jejejeje yo no acostumbro por el { delante y despues abajo el cierre }, me gusta dejar el espacio para poder dicernir en codigos extensos, ya es costumbre.

Ya lo de hacer el mysql_query() dentro del IF, ya es personal, en mi caso lo hago distinto al ejemplo que di, acostumbro tener mi propio framework de mysql, para no hacer mysql_query(), sino algo asi: consultar( $b, $datos); y tengo mas funciones para diversas cosas: consulta indexada, consulta por limites, etc, etc...

Pero la idea es clara...

WHK

#9
yo hace tiempo hize un framework también completo y esta es la clase de mysql por si te sirve, le he hecho como 3 versiones diferentes y cada uno tiene cosas que pulir y cambiar, por eso le he hecho tantos cambios:

Código (php) [Seleccionar]
<?php
if(!$CMS) exit;
/*
Framework-DrawCoders
admin@drawcoders.com

Creado por              : DrawCoders
Nombre del archivo      : class_poo_sql.php
Version del archivo     : 1.1
Fecha de modificación   : 12 Octubre 2010
*/

class sql{
 var 
$handle;
 var 
$host '127.0.0.1';
 var 
$user;
 var 
$pass;
 var 
$bdatos;
 var 
$persistente true;
 
 function 
connect($host$user$pass$bdatos$persistente true){
  
$this->host $host;
  
$this->user $user;
  
$this->pass $pass;
  
$this->bdatos $bdatos;
  
$this->persistente $persistente;
  
  
/* Crea el handle de SQL */
  
if($persistente){ /* Crea una conexión persistente */
   
$handle mysql_pconnect($host$user$pass);
  }else{ 
/* Crea una conexión momentanea */
   
$handle mysql_connect($host$user$pass);
  }
  if(
$handle){ /* Verifica que el handle sea válido */
   
if(mysql_select_db($bdatos$handle)){ /* Selecciona la base de datos del servidor MySQL */
    
return ($this->handle $handle); /* Retorna el handle */
   
}else{ /* No existe la base de datos seleccionada, procede a crear una nueva */
    
if(!mysql_query('CREATE DATABASE '.$bdatos$this->handle)){
     
mysql_close($this->handle); /* Cierra la conexión hacia la base de datos */
     
return false/* Imposible crear la nueva base de datos */
    
}else{
     return 
$handle/* Retorna el handle */
    
}
   }
  }else{
   
/* Imposible conectarse a la abse de datos */
   
return false;
  }
 }

 function 
es_tabla($tabla false){
  
/* Crea la query solicitando el estado de la tabla $tabla */
  
$respuesta $this->selecciona('show table status like '.str::filtro($tabla'sql_comp'), true);
  
/* Un resultado de una tabla existente consta de por lo menos dos columnas */
  
if(count($respuesta) > '2')
   return 
true/* Existe */
  
else
   return 
false/* No existe */
 
}

 function 
obtener_columnas($tabla){
  if(!
$columnas $this->selecciona('show columns from '.$tabla))
   return 
false/* Tabla inexistente */
  
if(is_array($columnas)){
   foreach(
$columnas as $columna){
    
$retorno[] = $columna['Field'];
   }
  }else{
   return 
false/* No hay columnas */
  
}
  return 
$retorno;
 }

 function 
update($tabla$datos_array$where false){
  global 
$CMS;

  if(!
is_array($datos_array))
   return 
false/* No es un array de datos */
  
  /* Obtiene las columnas para su verificación */  
  
$pre_columnas $this->obtener_columnas($tabla);
   
  
/* Creación automatizada de la columna id primaria */
  
if($CMS['MYSQL']['AUTO_ID']){
   if(
is_array($pre_columnas)){
    foreach(
$pre_columnas as $pre_col){
     if(
strtolower($pre_col) == 'id'){
      
$existe_id true;
      break;
     }
     unset(
$pre_col);
    }
   }
   if(!
$existe_id){
    if(!
$datos_array['id']){
     
$datos_array = array('id' => '') + $datos_array;
    }
   }
  }

  
/* Prepara el update */
  
if($where){
   
$query['sql'] = 'update '.str::filtro($tabla'sql_col_comp').' set ';
   foreach(
$datos_array as $columna => $valor){
    
$query['sql'] .= str::filtro($columna'sql_col_comp').' = '.str::filtro($valor'sql_comp').',';
   }
   
$query['sql'] = str::left($query['sql'], strlen($query['sql']) - 1).' where '.$where;
  
/* Prepara el insert */
  
}else{
   
$query['sql'] = sprintf(
    
'insert into %s (%s) values (%s)'
    
$tabla
    
implode(', 'array_map(array('str','filtro'), array_keys($datos_array), explode(';'str::left(str_repeat('sql_col_comp;'count($datos_array)), count($datos_array) * strlen('sql_col_comp;') - 1)))), 
    
implode(', 'array_map(array('str','filtro'), $datos_array,             explode(';'str::left(str_repeat('sql_comp;'count($datos_array)), count($datos_array) * strlen('sql_comp;') - 1))))
   );
  }

  
/* Realiza la query */
  
if(!@mysql_query($query['sql'], $this->handle)){ /* Query fallida */
   
$err_no_sql mysql_errno($this->handle);
  
   
/* Declara los arrays iniciales */
   
$query['agrega_tabla']    = 'create table '.str::filtro($tabla'sql_col_comp').' (';
   
$query['agrega_columnas'] = 'alter table  '.str::filtro($tabla'sql_col_comp').' ';

   if(
$CMS['MYSQL']['AUTO_ID']){ /* Creación automatizada de la columna id primaria */
    
if(!$contiene_id){ /* No existe la columna id en la query */
     
if(is_array($pre_columnas)){
      foreach(
$pre_columnas as $pre_col){
       if(
strtolower($pre_col) == 'id'){
        
$existe_id true;
        break;
       }
      }
     }
     if(!
$existe_id){ /* No existe la columna id en la tabla */
      
$query['agrega_tabla'] .= '`id` INT NOT NULL AUTO_INCREMENT, index ( `id` ),';
      
$query['agrega_columnas'] .= 'ADD `id` INT NOT NULL AUTO_INCREMENT FIRST, ADD index ( `id` ),';
      
$contiene_id true;
     }
    }
   }
   
   
/* Crea el alter table o el create table */
   
foreach($datos_array as $columna => $valor){

    
/* Verifica las tablas existentes e inexistentes */
    
$existe_col false;
    if(
is_array($pre_columnas)){
     foreach(
$pre_columnas as $pre_col){
      if(
$pre_col == str::filtro($columna'sql_col')){
       
$existe_col true;
       break;
      }
     }
    }

    if(!
$existe_col){ /* Solo agrega las columnas necesarias */
     
if(strtolower($columna) == 'id'){ /* id index numerico autoincrement */
      
if(!$contiene_id){
       
$query['agrega_tabla'] .= str::filtro($columna'sql_col_comp').' INT NOT NULL AUTO_INCREMENT, index ( `id` ),';
       
$query['agrega_columnas'] .= 'ADD '.str::filtro($columna'sql_col_comp').' INT NOT NULL AUTO_INCREMENT FIRST, ADD index ( `id` ),';
      }
     }else{
      
$query['agrega_tabla'] .= str::filtro($columna'sql_col_comp').' TEXT NOT NULL,';
      
$query['agrega_columnas'] .= 'ADD '.str::filtro($columna'sql_col_comp').' TEXT NOT NULL,';
     }
    }

   }
   unset(
$columna$valor); /* Se eliminan las variables temporales */
   
   /* Concluye los arrays iniciales */
   
$query['agrega_tabla']    = str::left($query['agrega_tabla'], strlen($query['agrega_tabla']) - 1).' ) engine = InnoDB ';
   
$query['agrega_columnas'] = str::left($query['agrega_columnas'], strlen($query['agrega_columnas']) - 1);
   
// echo $query['agrega_columnas']; exit;
   /* No existe la tabla, por lo tanto se creará una nueva */
   
if($err_no_sql == '1146'){
    
mysql_query($query['agrega_tabla'], $this->handle); /* Agrega la tabla */
    
if($this->es_tabla($tabla)){ /* Verifica que se haya creado la tabla */
     /* Retorna una nueva query con las columnas nuevas ya creadas */
     
return $this->update($tabla$datos_array$where);
    }else{
     return 
false/* Imposible crear la tabla nueva */
    
}

   
/* No existe la columna, por lo tanto se crearán todas nuevas */
   
}elseif($err_no_sql == '1054'){
    @
mysql_query($query['agrega_columnas'], $this->handle); /* Hace la query con la creación de las nuevas columnas */
    /* Verifica que las columnas hayan sido insertadas correctamente */
    
$f 0;
    if(
$columnas $this->obtener_columnas($tabla)){
     foreach(
$datos_array as $columna_ins => $valor_ins){     
      foreach(
$columnas as $columna){
       if(
str::filtro($columna_ins'sql_col') == $columna){
        
$f++;
        break;
       }
      }
     }
     if(
$f == count($datos_array)){
      return 
$this->update($tabla$datos_array$where); /* Hace la query inicial nuevamente */ 
     
}else{
      return 
false/* Imposible insertar las nuevas columnas */
     
}
    }else{
     return 
false/* Imposible seleccionar las columnas */
    
}
   }else{
    return 
false/* Error desconocido */
   
}
  }else{
   return 
true/* Query realizada con éxito */
  
}
 }
 
 function 
crear_columna($tabla$columna){
  if(
$this->es_tabla($tabla)){ /* Verifica si la tabla existe */
   
if(mysql_query('
    ALTER TABLE '
.str::filtro($tabla'sql_comp').
    ADD '
.str::filtro($columna'sql_comp').' TEXT NOT NULL',
$this->handle)){
   return 
true/* Se agregó la nueva columna */
   
}else{
    return 
false/* Imposible agregar la nueva columna */
   
}
  }else{
   
/* Si no existe la tabla entonces la crea nueva */
   
if(mysql_query('
    CREATE TABLE '
.str::filtro($tabla'sql').'(
     '
.str::filtro($columna'sql_comp').' TEXT NOT NULL
    ) ENGINE = InnoDB '
,
$this->handle)){
    return 
true/* Nueva columna agregada */
   
}else{
    return 
false/* Imposible agregar una nueva columna */
   
}
  }
 }
 
 function 
eliminar_tabla($tabla){
  return 
mysql_query('drop table '.$tabla$this->handle);
 }

 function 
eliminar_fila($tabla$where){
  return 
mysql_query('delete from '.$tabla.' where '.$where$this->handle);
 }

 function 
desconectar(){
  if(
$this->handle){
   if(
$CMS['UTILIZAR']['MYSQL']){ /* SQLite no cierra el handle porque no hay desconección */
    
@mysql_close($this->handle);
   }
   return 
true;
  }else
   return 
false;
 }
 
 function 
selecciona($query$un_valor false){
  
/* realiza la query */
  
if(!$query_handle mysql_query($query$this->handle))
   return 
false/* La query ha fallado */

  /* Obtiene los resultados en un array */
  
while($fila mysql_fetch_array($query_handleMYSQL_ASSOC)){
   
$retorno[] = $fila;
  }
  
/* Libera la memoria si es necesario */
  
@mysql_free_result($query_handle);

  
  
/* Se ha solicitado solamente un valor o un array */
  
if($un_valor){
   
$retorno $retorno[0];
   if(
count($retorno) > 1){
    return 
$retorno/* Es un array con mas de una variable */
   
}else{ /* Es un array con una sola variable, por lo tanto debolvemos solamente el string */
    
if(!is_array($retorno))
     return 
false/* No hay datos para devolver debido a que necesitamos un string */
    
foreach($retorno as $variable => $valor){ /* Necesitamos solamente el valor del array debuelto */
     
return $valor;
    }
   }
  }
  return 
$retorno;
 }

}

?>


Código (php) [Seleccionar]
<?php if(!included) exit;

class 
sql{
 var 
$config;
 var 
$handle;
 
 function 
__construct(){
  
$this->config = new configuration(); /* Loaded for system() class */
 
}
 
 function 
connect(){
  if(
$this->handle mysql_pconnect($this->config->sql_host$this->config->sql_username$this->config->sql_password)){
   if(
mysql_select_db($this->config->sql_dbname$this->handle)){
    return 
$this->handle;
   }else{
    return 
false/* DB not exist */
   
}
  }else{
   return 
false/* Server not found */
  
}
 }

 function 
close(){
  return @
mysql_close($this->handle);
 }
 
 function 
raw($query){
  return 
mysql_query($query$this->handle);
 }
 
 function 
fast_select($query$one_valor false){
  
/* Return all data in arrays */
  
if(!$query_handle mysql_query($query$this->handle))
   return 
false;

  while(
$fila mysql_fetch_array($query_handleMYSQL_ASSOC)){
   
$ret[] = $fila;
  }
  @
mysql_free_result($query_handle);

  if(
$one_valor){
   
$ret $ret[0]; /* Less dimension of array */
   
if(count($ret) > 1){
    return 
$ret;
   }else{
    if(!
is_array($ret))
     return 
false/* No data */
    
foreach($ret as $var => $val){ /* Process only one result */
     
return $val;
    }
   }
  }
  return 
$ret;
 }

}

?>


pero en fin, ya no desviemos mas el tema principal xD jajajaja