PHP-Hispano.net Comunidad hispana de desarrollo web
Darse de alta en la web | Recuperar password   
Inicio / Foros / PHP / Mostrar registros popr columnas...

Mostrar registros popr columnas... [SOLUCIONADO]

15 respuestas 3410 visitas Categoría PHP

Mostrar registros popr columnas...

Avatar de mty28q

Nivel 2 (48 posts)

* * * * * * *

0 Agradecimientos

#0 Offline mty28q 01 may 09
Buen día!
Disculpen si es molesta mi consulta, solo que llevo algunos días buscando y probando y no he podido con lo siguiente:

Tengo una base de datos la cual al consultarla (mostrarla en la web) muestra los resultados de esta forma:
------------------------------------------
EMPLEADO : 05488601
FIRST NAME : Juan
LAST NAME : Gomez
SECOND NAME : Reyes
DEPARTAMENTO : Abarrotes
PUESTO : Intendente
TURNO : Dia

EMPLEADO : 15649553
FIRST NAME : Fernando
LAST NAME : Tejeda
SECOND NAME : Perez
DEPARTAMENTO : Verduras
PUESTO : Asistente
TURNO : Tarde
-------------------------------------------------
Pero yo quisiera verlo asi:

ID EMPLEADO FIRST NAME LAST NAME SECOND NAME DEPARTAMENTO PUESTO TURNO

1 05488601 Juan Gomez Reyes Abarrotes Intendente Dia

2 15649553 Fernando Tejeda Perez Verduras Asistente Tarde

----------------------------------------------------

Este es el código (que por cierto lo encontré buscando , no lo hice yo).
(He probado con otros, pero me gusta este porque no tengo que estar indicando los nombres de los campos, pero si ustedes los que saben me recomiendan otra cosa, intentare.)


<?
// Buscador para tablas MySQL escrito en PHP. Por Alex para www.webtaller.com
// Creado el 13-10-2003


////////////////////////////
// Configuración
///////////////////////////

//modifica estas variables según tu servidor de MySQL


$bd_servidor "localhost\";

$bd_usuario = \"myuser\";

$bd_contrasenya = \"mypass\";

$bd_bdname = \"negocio\";

$bd_tabla = \"empleados\"; // Tabla donde se harán las búsquedas

// Conexión y selección de la base de datos

$link = mysql_connect($bd_servidor,$bd_usuario,$bd_contrasenya);

mysql_select_db($bd_bdname,$link);

////////////////////////////
// Formulario
///////////////////////////



?>



<center>
<p><h2>Introduce las palabras para la búsqueda</h2></p>
<p><form name=\"buscador\" method=\"post\" action=\"\"><br>
Buscar en:
<select name=\"campo\">
<?php

//Con este query obtendremos los campos por los cuales el usuario puede buscar

$result = mysql_query(\"SHOW FIELDS FROM `$bd_tabla`\",$link);

while($row = mysql_fetch_row($result)) {

// en $row[0] tenemos el nombre del campo
// de esta manera no necesitamos conocer el nombre de los campos
// por lo que cualquier tabla nos valdrá

?>
<option value=\"<?php echo $row[0]; ?>\"><?php echo $row[0]; ?></option>
<?php

}

?>
</select>
Palabra(s): <input type=\"text\" name=\"palabra\"><br>
<input type=\"submit\" value=\"Enviar\" name=\"enviar\">
</form></p>
</center>

<?

////////////////////////////
// Proceso del Formulario
///////////////////////////
/***VARIABLES POR POST ***/

$numero2 = count($_POST);
$tags2 = array_keys($_POST); // obtiene los nombres de las varibles
$valores2 = array_values($_POST);// obtiene los valores de las varibles

// crea las variables y les asigna el valor
for($i=0;$i<$numero2;$i++){ 
$$tags2[$i]=$valores2[$i]; 
}



if(isset($_POST[\'enviar\'])) {

// Solo se ejecuta si se ha enviado el formulario

$query = \"SELECT * from $bd_tabla WHERE `{$_POST[campo]}` LIKE \'%{$_POST[palabra]}%\'\";

$result = mysql_query($query,$link);



$found = false; // Si el query ha devuelto algo pondrá a true esta variable

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

$found = true;

echo \"<p>\";

foreach($row as $nombre_campo => $valor_campo) {

// Tenemos que mostrar todos los campos de las filas donde se haya
// encontrado la búsqueda.


if(is_int($nombre_campo)) {

continue; //Cuando hacemos mysql_fetch_array, php genera un array
// con todos los valores guardados dos veces, uno con
// índice numérico y otro con índice el nombre del campo.
// Solo nos interesa el del nombre del campo.

}

echo \"<b>\".$nombre_campo.\"</b> : \".$valor_campo.\"<br>\";
}

echo \"</p>\";
//Este enlace no es necesario porque siempre tenemos disponible el formulario de busqueda.
//echo \"<a href=buscador_analistas.php>Realizar busqueda en limpio.</a>\";


}

if(!$found) {

echo \"No se encontró la palabra introducida<br>\";
//Este enlace no es necesario porque siempre tenemos disponible el formulario de busqueda.
//echo \"<a href=buscador_analistas.php>Realizar otra busqueda.</a>\";
}

}
?>




Espero que se muestre bien el mensaje y que alguien tenga tiempo de ayudarme.

De antemano gracias!

Re: Mostrar registros popr columnas...

Avatar de hahahano

Nivel 2 (145 posts)

* * * * * * *

14 Agradecimientos

#1 Offline hahahano 02 may 09 1 personas consideran útil este post.
Prueba poniendolo Así
"<table>

<tr>Nombre del campo</tr>

<td>Contenido del campo</td>

</table>"

Re: Mostrar registros popr columnas...

Avatar de jurena

Nivel 7 (2065 posts)

* * * * * * *

181 Agradecimientos

#2 Offline jurena 02 may 09 1 personas consideran útil este post.
Lleva razón hahahano,
yo, por si las moscas había preparado un script que te lo sacara en columnas, aunque tuve que cambiar más cosas, puesto que pareces estar usando variables globales.
He movido el hilo a PHP pues es el tema es realmente PHP y HTML.
Este es el script:

<?php
$bd_servidor 
"localhost\";
$bd_usuario = \"root\";
$bd_contrasenya = \"contraseña\";
$bd_bdname = \"nombrebase\";
$bd_tabla = \"nombretabla\"; // Tabla donde se harán las búsquedas

// Conexión y selección de la base de datos

$link = mysql_connect($bd_servidor,$bd_usuario,$bd_contrasenya);

mysql_select_db($bd_bdname,$link);
$listacampos=array();
$palabra = $_POST[\'palabra\'];
$campo=$_POST[\'campo\'];
$datos= array();

////////////////////////////
// Formulario
///////////////////////////

?>

<center>
<p><h2>Introduce las palabras para la búsqueda</h2></p>
<p><form name=\"buscador\" method=\"post\" action=\"busca.php\"><br>
Buscar en:
<select name=\"campo\">
<?php
//Con este query obtendremos los campos por los cuales el usuario puede buscar
$result = mysql_query(\"SHOW FIELDS FROM `$bd_tabla`\",$link);

while($row = mysql_fetch_row($result)) {
$listacampos[]=$row[0];//cargamos los nombres de los campos en un array
// en $row[0] tenemos el nombre del campo
// de esta manera no necesitamos conocer el nombre de los campos
// por lo que cualquier tabla nos valdrá
?>
<option value=\"<?php echo $row[0]; ?>\"><?php echo $row[0]; ?></option><!--mostramos la lista de campos en el selector-->
<?php
}
?>
</select>
Palabra(s): <input type=\"text\" name=\"palabra\"><br><!--caja para escribir la palabra-->
<input type=\"submit\" value=\"Enviar\" name=\"enviar\">
</form></p>
</center>

<?php

if(isset($palabra) && !empty($palabra) && isset($campo) && !empty($campo)) {//si hemos elegido un campo y hemos escrito palabra

// Solo se ejecuta si se ha enviado el formulario

$query2 = \"SELECT * from $bd_tabla WHERE `{$campo}` LIKE \'%{$palabra}%\'\";//consulta buscando en el campo elegido la palabra escrita
$result2 = mysql_query($query2,$link);
echo \"<table border=\\\"1\\\"><tr>\";
$total=count($listacampos);//cuento los elementos de la listacampos
foreach ($listacampos as $valor) {echo \"<td><b>$valor</b></td>\";}//primero mostramos en la primera línea de una tabla con los nombresde los campos
echo \"</tr>\";
echo \"<tr>\";
do {for ($i=0;$i <= $total-1 ;$i++) {//mostramos los datos de cada línea
echo \"<td>\".$datoscampos[$i].\"</td>\";} echo \"</tr>\";} while ($datoscampos= mysql_fetch_array($result2));  //mostramos todas las líneas
 echo \"</table>\";
}
?>


Donde esta el nuevo hilo ??

Avatar de kubuntero

Nivel 1 (11 posts)

* * * * * * *

5 Agradecimientos

#3 Offline kubuntero 02 may 09 0 personas consideran útil este post.
Buscando en el listado general me encuentro este mismo item; se supone que estaba en otro \"hilo\" o algo asi, podrian indicarme donde esta ??

De otra parte, el form de este ultimo codigo envia a \"busca.php\", pero no esta este codigo.

Agradezco su colaboracion. Saludos!

kubuntero

Re: Mostrar registros popr columnas...

Avatar de mty28q

Nivel 2 (48 posts)

* * * * * * *

0 Agradecimientos

#4 Offline mty28q 02 may 09 0 personas consideran útil este post.
Que tal !
Pues muchas gracias por haberme ayudado, en verdad les agradezco el poco ó mucho tiempo que se hayan tomado para ayudarme .

Les tengo otras preguntas.

Al código le agregué \"trim\" para eliminar los espacios en blanco, por aquello de que tecleen mal, sin embargo no se si se pueda ó deba hacer de otra forma, yo lo hice así:

mysql_select_db($bd_bdname,$link);
$listacampos=array();
//No se si aquí hubiera podido colocar el trim, pero lo intenté y no pude hacerlo funcionar
$palabra = $_POST[\'palabra\'];
$campo=$_POST[\'campo\'];
$datos= array();
//Aquí agregué el \"trim\" y aunque funciona no se si sea lo correcto ó lo mejor
$palabra = trim($palabra);


----------------------------------------------------------------------------------------------------------------
Y por otra parte quisiera orientación de que puedo hacer para que este ó cualquier otro código (script) sea más seguro y no sea tan fácil que me hackeen.
-----------------------------------------------------------------------------------------------------------------
Para \"Jureno\":

está bien usar variables globales ó es mejor especificarlas?
Que me recomiendan?
--------------------------------------------------------------------------------------------------------------------

Para \"Kubuntero\":

este mismo script sirve de formulario y de action, es decir, no ocupas dos archivos, solo éste, a este mismo archivo lo guardas con el nombre \"busca.php\" para que él mismo se ejecute, es decir, el nombre que le des a este script, debe ir en el \"action=\", auqnue también puedes ponerle cualquier nombre al script y en action=\"\" dejar solo las comillas.
-------------------------------------------------------------------------------------------------------------------

Saludos y mil gracias a todos!

Re: Mostrar registros popr columnas...

Avatar de jurena

Nivel 7 (2065 posts)

* * * * * * *

181 Agradecimientos

#5 Offline jurena 02 may 09 1 personas consideran útil este post.
No es recomendable usar variables globales.
He puesto el trim, aunque sin probarlo.
He añadido algunos controles.
Lo he hecho en un mismo archivo, porque pensé que era lo que querías.
Lo del busca.php es el nombre de mi archivo de prueba. Me olvidé de cambiarlo (pido disculpas).
Tampoco puse ninguna atención al uso más preciso de comillas y a evitar la sql injection. Echa un vistazo a la función mysql_real_escape_string(); y también al artículo sobre el uso de comillas.


<?php
$bd_servidor 
"localhost\";
$bd_usuario = \"root\";
$bd_contrasenya = \"\";
$bd_bdname = \"nombrebase\";
$bd_tabla = \"nombretabla\"; // Tabla donde se harán las búsquedas

// Conexión y selección de la base de datos

$link = mysql_connect($bd_servidor,$bd_usuario,$bd_contrasenya);

mysql_select_db($bd_bdname,$link);
mysql_query(\"set names \'utf8\'\");
$listacampos=array();
$palabra = trim($_POST[\'palabra\']);
$campo=$_POST[\'campo\'];
$datos= array();

////////////////////////////
// Formulario
///////////////////////////

?>

<center>
<p><h2>Introduce las palabras para la búsqueda</h2></p>
<p><form name=\"buscador\" method=\"post\" action=\"nombrearchivo.php\"><br>
Buscar en:
<select name=\"campo\">
<?php
//Con este query obtendremos los campos por los cuales el usuario puede buscar
$result = mysql_query(\"SHOW FIELDS FROM `$bd_tabla`\",$link);

while($row = mysql_fetch_row($result)) {
$listacampos[]=$row[0];//cargamos los nombres de los campos en un array
// en $row[0] tenemos el nombre del campo
// de esta manera no necesitamos conocer el nombre de los campos
// por lo que cualquier tabla nos valdrá
?>
<option value=\"<?php echo $row[0]; ?>\"><?php echo $row[0]; ?></option><!--mostramos la lista de campos en el selector-->
<?php
}
?>
</select>
Palabra(s): <input type=\"text\" name=\"palabra\"><br><!--caja para escribir la palabra-->
<input type=\"submit\" value=\"Enviar\" name=\"enviar\">
</form></p>
</center>

<?php

if(isset($palabra) && !empty($palabra) && isset($campo) && !empty($campo)) {//si hemos elegido un campo y hemos escrito palabra

// Solo se ejecuta si se ha enviado el formulario

$query2 = \"SELECT * from $bd_tabla WHERE `{$campo}` LIKE \'%{$palabra}%\'\";//consulta buscando en el campo elegido la palabra escrita
$result2 = mysql_query($query2,$link);
$conta=mysql_num_rows($result2);

if ($conta==false) {echo \"no se ha encontrado nada\";} else {
echo \"<table border=\\\"1\\\"><tr>\";
$total=count($listacampos);//cuento los elementos de la listacampos
foreach ($listacampos as $valor) {echo \"<td><b>$valor</b></td>\";}//primero mostramos en la primera línea de una tabla con los nombresde los campos
echo \"</tr>\";
echo \"<tr>\";
do {for ($i=0;$i <= $total-1 ;$i++) {//mostramos los datos de cada línea
$datcamp=$datoscampos[$i];
if (is_null($datcamp)==true){$datcamp="
--\";} else {$datcamp $datcamp;}
echo \"<td>\".$datcamp.\"</td>\";} echo \"</tr>\";} while ($datoscampos= mysql_fetch_array($result2));  //mostramos todas las líneas
 echo \"</table>\";
} } else {echo \"seleccione un campo y escriba una palabra\";}
?>


Re: Mostrar registros popr columnas...

Avatar de mty28q

Nivel 2 (48 posts)

* * * * * * *

0 Agradecimientos

#6 Offline mty28q 02 may 09 0 personas consideran útil este post.
Gracias Jurena!
Por mí está bien en un solo archivo (un solo script), de todos modos lo puedo cambiar a dos archivos, pero yo creo que es igual (a menos que ustedes me indiquen lo contrario), esa respuesta era para Kubuntero.

Solo me quedó una duda de tu última respuesta Jurena:
No comprendo la parte que dice:


$datcamp=$datoscampos[$i];
if (is_null($datcamp)==true){$datcamp=\"--\";} else {$datcamp = $datcamp;}



Ya que me imprime los dos signos negativos en la primera fila en todas las columnas en cualquier busqueda encontrada.

Bueno, no es necesario que respondan, ya mucho me han ayudado y se los agradezco!

Saludos y buen fín de semana!

Re: Mostrar registros popr columnas...

Avatar de jurena

Nivel 7 (2065 posts)

* * * * * * *

181 Agradecimientos

#7 Offline jurena 03 may 09 1 personas consideran útil este post.
Eso es para que cuando en un campo tengas el valor null ponga marco a la casilla; si no haces eso verás la casilla o espacio, pero sin marco. Si quieres el espacio en blanco, escribes, como he hecho en esta versión, &nbsp. Además, he observado que salía una primera línea con todo en blanco, y lo he corregido sustituyendo el do...while por while...
Naturalmente, siempre es preferible separar en dos documentos, uno para proceso y otro con el html.
Te faltarían algunas cosillas, como lo que te dije de seguridad contra injection y alguna validación, pero lo primero era que entendieras la lógica del php en la cronología del envío de datos al servidor y recogida de ellos.

<?php
$bd_servidor 
"localhost\";
$bd_usuario = \"root\";
$bd_contrasenya = \"\";
$bd_bdname = \"nombrebase\";
$bd_tabla = \"nombretabla\"; // Tabla donde se harán las búsquedas

// Conexión y selección de la base de datos

$link = mysql_connect($bd_servidor,$bd_usuario,$bd_contrasenya);

mysql_select_db($bd_bdname,$link);
mysql_query(\"set names \'utf8\'\");
$listacampos=array();
$palabra = trim($_POST[\'palabra\']);
$campo=$_POST[\'campo\'];
$datos= array();

////////////////////////////
// Formulario
///////////////////////////

?>

<center>
<p><h2>Introduce las palabras para la búsqueda</h2></p>
<p><form name=\"buscador\" method=\"post\" action=\"nombrearchivo.php\"><br>
Buscar en:
<select name=\"campo\">
<?php
//Con este query obtendremos los campos por los cuales el usuario puede buscar
$result = mysql_query(\"SHOW FIELDS FROM `$bd_tabla`\",$link);

while($row = mysql_fetch_row($result)) {
$listacampos[]=$row[0];//cargamos los nombres de los campos en un array
// en $row[0] tenemos el nombre del campo
// de esta manera no necesitamos conocer el nombre de los campos
// por lo que cualquier tabla nos valdrá
?>
<option value=\"<?php echo $row[0]; ?>\"><?php echo $row[0]; ?></option><!--mostramos la lista de campos en el selector-->
<?php
}
?>
</select>
Palabra(s): <input type=\"text\" name=\"palabra\"><br><!--caja para escribir la palabra-->
<input type=\"submit\" value=\"Enviar\" name=\"enviar\">
</form></p>
</center>

<?php

if(isset($palabra) && !empty($palabra) && isset($campo) && !empty($campo)) {//si hemos elegido un campo y hemos escrito palabra

// Solo se ejecuta si se ha enviado el formulario

$query2 = \"SELECT * from $bd_tabla WHERE `{$campo}` LIKE \'%{$palabra}%\'\";//consulta buscando en el campo elegido la palabra escrita
$result2 = mysql_query($query2,$link);
$conta=mysql_num_rows($result2);

if ($conta==false) {echo \"no se ha encontrado nada\";} else {
echo \"<table border=\\\"1\\\"><tr>\";
$total=count($listacampos);//cuento los elementos de la listacampos
foreach ($listacampos as $valor) {echo \"<td><b>$valor</b></td>\";}//primero mostramos en la primera línea de una tabla con los nombresde los campos
echo \"</tr>\";
echo \"<tr>\";
while ($datoscampos= mysql_fetch_array($result2)) {for ($i=0;$i <= $total-1 ;$i++) {//mostramos los datos de cada línea
$datcamp=$datoscampos[$i];
if (is_null($datcamp)==true){$datcamp="
&nbsp\";} else {$datcamp $datcamp;}
echo \"<td>\".$datcamp.\"</td>\";} echo \"</tr>\";}  //mostramos todas las líneas
 echo \"</table>\";
} } else {echo \"seleccione un campo y escriba una palabra\";}
?>


Re: Mostrar registros popr columnas...

Avatar de mty28q

Nivel 2 (48 posts)

* * * * * * *

0 Agradecimientos

#8 Offline mty28q 04 may 09 0 personas consideran útil este post.
Perfecto!
Estuve leyendo acerca del tema, ya tenía algunos conceptos y con su colaboración y lo que he leído últimamente, pues creo que ahí la llevo.
Así dejé el script en dos archivos:

-----------------------------------------------------------------------------------------------------------------------------------
Este es el formulario.htm

<center>
<p><h2>Introduce las palabras para la búsqueda</h2></p>
<p><form name=\"buscador\" method=\"post\" action=\"buscar.php\"><br>
Buscar en:
<select name=\"campo\">
<option value=\"ID\">ID</option>
<option value=\"EMPLEADO\">EMPLEADO</option>
<option value=\"FIRSTNAME\">FIRSTNAME</option>
<option value=\"LASTNAME\">LASTNAME</option>
<option value=\"SECONDNAME\">SECONDNAME
<option value=\"PUESTO\">PUESTO</option>
<option value=\"DEPARTAMENTO\">DEPARTAMENTO</option>
<option value=\"TURNO\">TURNO</option><
<option value=\"SUPERVISOR\">SUPERVISOR</option>
<option value=\"OBSERVACIONES\">OBSERVACIONES</option>
</select>
Palabra(s): <input type=\"text\" name=\"palabra\"><br><!--caja para escribir la palabra-->
<input type=\"submit\" value=\"Enviar\" name=\"enviar\">
</form></p>
</center>
Seleccione un campo y escriba una palabra



-----------------------------------------------------------------------------------------------------------------------------------
Este es el archivo buscar.php

<?php
$bd_servidor 
"localhost\";
$bd_usuario = \"myuser\";
$bd_contrasenya = \"mypass\";
$bd_bdname = \"mydatabase\";
$bd_tabla = \"mytabla\"; // Tabla donde se harán las búsquedas

// Conexión y selección de la base de datos

$link = mysql_connect($bd_servidor,$bd_usuario,$bd_contrasenya);

mysql_select_db($bd_bdname,$link);
mysql_query(\"set names \'utf8\'\");
$listacampos=array(\"ID\",\"N° de Empleado\",\"Nombre\",\"Apellido\",\"2° apellido\",\"Puesto\",\"Departamenton\",\"Turno\",\"Supervisopr\");
$palabra = trim($_POST[\'palabra\']);
$campo=$_POST[\'campo\'];
$datos= array();

////Aquí es donde antes estaba el formulario////

if(isset($palabra) && !empty($palabra) && isset($campo) && !empty($campo)) {//verifica si hemos elegido un campo y hemos escrito palabra

// Solo se ejecuta si se ha enviado el formulario

$query2 = \"SELECT * from $bd_tabla WHERE `{$campo}` LIKE \'%{$palabra}%\'\";//consulta buscando en el campo elegido la palabra escrita
$result2 = mysql_query($query2,$link);
$conta=mysql_num_rows($result2);

if ($conta==false) {echo \"No se ha encontrado nada\";} else {
echo \"<table border=\\\"1\\\"><tr>\";
$total=count($listacampos);//cuento los elementos de la listacampos
foreach ($listacampos as $valor) {echo \"<td bgcolor=<a class=\"numPost\" href=\"/foros/PHP/35375-mostrar-registros-popr-columnas#992222\">#992222</a>><b><font face=arial size=2 color=#ffffff>$valor</b></td>\";}//primero mostramos en la primera línea de una tabla con los nombres de los campos y les dí formato
echo \"</tr>\";
echo \"<tr>\";
while ($datoscampos= mysql_fetch_array($result2)) {for ($i=0;$i <= $total-1 ;$i++) {//mostramos los datos de cada línea
$datcamp=$datoscampos[$i];
if (is_null($datcamp)==true){$datcamp="
--\";} else {$datcamp $datcamp;}
echo \"<td>\".$datcamp.\"</td>\";} echo \"</tr>\";}  //mostramos todas las líneas
echo \"</table>\";
} } else {echo \"Seleccione un campo y escriba una palabra\";}
?>



----------------------------------------------------------------------------------------------------------------------------
Espero que sea correcto lo que hice, si tienen tiempo de un comentario ú observación, estaré atento.
También trataré de hacerlo con variables definidas en vez de globales.

Me falta leer sobre validación y seguridad para evitar inyección mysql, así como el uso correcto de las comillas, claro, me falta mucho más que eso.
Como esto me sirve para mi empleo, también buscaré como pasar consultas php-mysql a Excel.

Saludos y gracias!

Re: Mostrar registros popr columnas...

Avatar de jurena

Nivel 7 (2065 posts)

* * * * * * *

181 Agradecimientos

#9 Offline jurena 04 may 09 1 personas consideran útil este post.
mty28q,
respondo en el foro a la pregunta que me hacías por memo, por si a alguien más le sirve.
Decías que tenías problemas cuando buscabas un campo numérico, pues te traia si buscabas el 1, tanto el 1, como el 21, como el 211, etc.
Bien, la solución es traerte en la consulta no field, sino columns (observa SHOW columns ...) y cargar en el array tanto el nombre field como el type, los dos primeros datos que te traes con el columns, y condicionar la consulta a que el type comience por int o no, para hacer una búsqueda exacta o con like \'%palabra%\'. Naturalmente, habría que ver qué tipos de campos numéricos usas en las tablas para contemplar todas las posibilidades, pero si por ej. usas solo int, esto funciona:

<?php
$bd_servidor 
"localhost\";
$bd_usuario = \"root\";
$bd_contrasenya = \"\";
$bd_bdname = \"tubase\";
$bd_tabla = \"tutabla\"; // Tabla donde se harán las búsquedas

// Conexión y selección de la base de datos

$link = mysql_connect($bd_servidor,$bd_usuario,$bd_contrasenya);

mysql_select_db($bd_bdname,$link);
mysql_query(\"set names \'utf8\'\");
$listacampos=array();
$palabra = $_POST[\'palabra\'];
$campo=$_POST[\'campo\'];
$datos= array();

////////////////////////////
// Formulario
///////////////////////////

?>

<center>
<p><h2>Introduce las palabras para la búsqueda</h2></p>
<p><form name=\"buscador\" method=\"post\" action=\"busca.php\"><br>
Buscar en:
<select name=\"campo\">
<?php
//Con este query obtendremos los campos por los cuales el usuario puede buscar
$result = mysql_query(\"SHOW columns FROM `$bd_tabla`\",$link);
$listacampos=array();
while($row = mysql_fetch_array($result)) {
$listacampos[$row[0]]=$row[1];//cargamos los nombres de los campos en un array
// en $row[0] tenemos el nombre del campo
// de esta manera no necesitamos conocer el nombre de los campos
// por lo que cualquier tabla nos valdrá

?>
<option value=\"<?php echo $row[0]; ?>\"><?php echo $row[0]; ?></option><!--mostramos la lista de campos en el selector-->
<?php
}

?>
</select>
Palabra(s): <input type=\"text\" name=\"palabra\"><br><!--caja para escribir la palabra-->
<input type=\"submit\" value=\"Enviar\" name=\"enviar\">
</form></p>
</center>

<?php
//print_r($listacampos);

if(isset($palabra) && !empty($palabra) && isset($campo) && !empty($campo)) {//si hemos elegido un campo y hemos escrito palabra
// Solo se ejecuta si se ha enviado el formulario

$query2 = \"SELECT * from $bd_tabla WHERE `{$campo}` \";
if (substr($listacampos[$campo],0,3)!=\"int\") 
 {$query2.="
LIKE \'%{$palabra}%\'\";} else {$query2.=" = \'{$palabra}\'\";}//consulta buscando en el campo elegido la palabra escrita
$result2 = mysql_query($query2,$link);
$conta=mysql_num_rows($result2);


if ($conta==false) {echo \"no se ha encontrado nada\";} else {
echo \"<table border=\\\"1\\\"><tr>\";
$total=count($listacampos);//cuento los elementos de la listacampos
foreach ($listacampos as $key => $valor) {echo \"<td><b>$key</b></td>\";}//primero mostramos en la primera línea de una tabla con los nombresde los campos
echo \"</tr>\";
echo \"<tr>\";
while ($datoscampos= mysql_fetch_array($result2)) {for ($i=0;$i <= $total-1 ;$i++) {//mostramos los datos de cada línea
$datcamp=$datoscampos[$i];
if (is_null($datcamp)==true){$datcamp="
&nbsp\";} else {$datcamp $datcamp;}
echo \"<td>\".$datcamp.\"</td>\";} echo \"</tr>\";}  //mostramos todas las líneas
 echo \"</table>\";
} } else {echo \"seleccione un campo y escriba una palabra\";}
?>


Espacios en blanco sin celda.

Avatar de mty28q

Nivel 2 (48 posts)

* * * * * * *

0 Agradecimientos

#10 Offline mty28q 04 may 09 0 personas consideran útil este post.
De hecho no me refería a eso, pero la verdad que está excelente, mis respetos para tu trabajo.
De hecho me parece más importante con los números (INT) que con el texto.

Yo me refería a que cuando en algunos campos no tengo info, estos me aparece sin celda, ya probé este nuevo código que acabas de poner y me sigue apareciendo igual (claro, se que modificaste la busqueda exacta en un INT excelente).
No puedo decir que las celdas aparecen en blanco, ya que ni celda aparece.

Saludos y gracias de nuevo!

Re: Mostrar registros popr columnas...

Avatar de jurena

Nivel 7 (2065 posts)

* * * * * * *

181 Agradecimientos

#11 Offline jurena 04 may 09 0 personas consideran útil este post.
dime qué valor por defecto tienes cuando no escribes los campos, pues variará, para unos tendrás null, para otros otro. Eso habrá que controlarlo con ese array de columnas que también te trae el valor por defecto, pero hay que cargarlo en el array y luego compararlo, teniendo en cuenta la posibilidad de que lo dejes en blanco. Entiendo que es una cuestión de formato que tendremos que resolver con programación. Aunque tal vez sean pocos y podamos controlarlos desde la condición, si cargar en array.

Re: Mostrar registros popr columnas...

Avatar de mty28q

Nivel 2 (48 posts)

* * * * * * *

0 Agradecimientos

#12 Offline mty28q 04 may 09 0 personas consideran útil este post.
Esto solo sucede con las columnas SECONDNAME, PUESTO y UBICACION que no tienen datos introducidos.
Asi se vé la tabla de estructura:
SECONDNAME........ .VARCHAR(60)......utf8_unicode_ci.....YES.....NULL
PUESTO................ VARCHAR(60)......utf8_unicode_ci......YES....NULL
UBICACION............VARCHAR(60)......utf8_unicode_ci.......NO....

El campo OBSERVACIONES aparece como sigue, y si se visualizan las celdas aunque no tenga datos introducidos:
OBSERVACIONES......VARCHAR(500)......utf8_unicode_ci......YES......NULL

Saludos!

El autor ha marcado este post como solución PuntuaciónPuntuaciónPuntuaciónRe: Mostrar registros popr columnas...

Avatar de jurena

Nivel 7 (2065 posts)

* * * * * * *

181 Agradecimientos

#13 Offline jurena 04 may 09 1 personas consideran útil este post.
deberías probar, se me ocurre, con if ($datcamp==NULL || $datcamp==\"\")

para ver qué ocurre.

Vaya, que bien!

Avatar de mty28q

Nivel 2 (48 posts)

* * * * * * *

0 Agradecimientos

#14 Offline mty28q 04 may 09 0 personas consideran útil este post.
Me había resignado a rellenar por fuerza esos campos siempre para que no aparecieran así, pero ya quedó con tu última indicación.
Busqué en Google para ver que significan los caracteres ||, busqué también en tutoriales php pero sigo sin saberlo.

Seguiré leyendo acerca de seguridad y otras cosas que me indicaste.
De hecho acabo de encontrar un hilo de seguridad en este Foro

Saludos y muchas gracias a todos!

Re: Mostrar registros popr columnas...

Avatar de jurena

Nivel 7 (2065 posts)

* * * * * * *

181 Agradecimientos

#15 Offline jurena 04 may 09 1 personas consideran útil este post.
|| significa OR, igual que && significa AND; son dos modos distintos de escribir lo mismo. La condición que he puesto es que cuando el campo sea Null o esté en blanco, escriba \"$nbsp\". Necesito escribir el espacio vacío forzado para que le ponga marco. Lee el artículo sobre el echo de este foro: es magnífico. Te ayudará a usar bien las comillas.
Suerte.

Responder mensaje

Para poder participar debes ser un usuario registrado de PHP-Hispano. :: Deseo darme de alta en esta comunidad ::
Login / Password   

php-hispano.net 2002 - 2013 | XHTML 1.0
Datos Legales | Webmaster