Buscador Textarea de varios registros con PHP
Los buscadores habituales suelen ser un simple campo de texto donde solo se puede introducir un texto a buscar o los típicos filtros con selects o dropdowns para poder filtrar por varias columnas de la base de datos.
En este artículo vamos a ver un buscador simple pero específico utilizando un textarea para poder escribir diversas referencias o claves a buscar. Situándonos más en materia, en el ejemplo que vamos a ilustrar vamos a tener una serie de usuarios guardados en una tabla de la base de datos que van a tener un campo identificativo único (DNI o célula) que será la clave a buscar.
Para hacer una idea más visual de lo que se pretende, observa la siguiente imagen:
Vamos a tener un formulario con un campo tipo textarea donde escribiremos las referencias o DNI’s separadas por una coma sin espacios y un botón de buscar.
En el ejemplo en funcionamiento verás que en la columna derecha están todos los DNI’s o células disponibles, es decir, guardados en la base de datos. Escribiendo una de estas referencias o varias en el campo textarea y pulsando sobre buscar se nos mostrará una tabla con los usuarios que tienen las referencias indicadas.
Para añadir este buscador a tu página Web tan solo tienes que añadir los tags HTML del formulario allí donde lo desees:
<form action="index.php" method="post"> <label>Escribe en el siguiente campo los DNI's o celulas a buscar:</label> <textarea name="celulas" rows="7" cols="40"><?=$_POST['celulas']?></textarea> <p><input type="submit" name="search" value="Buscar" /></p> </form>
Y luego añadir la clave del asunto, el control del botón de búsqueda donde haríamos algo como lo que sigue:
<?php
if (isset($_POST['search'])) {
$celulas = explode(',', $_POST['celulas']);
$query_search = 'SELECT dni, name, lastname, birthday FROM users4 WHERE ';
for ($i=0; $i<count($celulas); $i++) {
if ($i == 0)
$query_search .= 'dni = "'.$celulas[$i].'"';
else
$query_search .= ' OR dni = "'.$celulas[$i].'"';
}
$search = $conexion->query($query_search);
if ($search->num_rows > 0) {
echo '<table border="1" cellpadding="5" cellspacing="5">';
echo '<tr>';
echo '<td><strong>DNI</strong></td>';
echo '<td><strong>Nombre</strong></td>';
echo '<td><strong>Apellidos</strong></td>';
echo '<td><strong>Fecha de nacimiento</strong></td>';
echo '</tr>';
while ($row_searched = $search->fetch_assoc()) {
echo '<tr>';
echo '<td>'.$row_searched['dni'].'</td>';
echo '<td>'.$row_searched['name'].'</td>';
echo '<td>'.$row_searched['lastname'].'</td>';
echo '<td>'.$row_searched['birthday'].'</td>';
echo '</tr>';
}
echo '</table><br/>';
}
else {
echo '<div class="info">No hay resultados para los criterios de búsqueda.</div>';
}
}
?>
En este caso, si pulsamos el botón de «Buscar» utilizamos la función explode para separar por comas la cadena introducida en el textarea y luego construimos la query que nos retornará los registros de las referencias introducidas separadas por coma y, finalmente, mostramos en una tabla los resultados de la query. También se controla el caso de que la query no retorne resultados mostrando un mensaje.
Es importante configurar y añadir la conexión con la base de datos deseada por encima de todo lo anterior:
$conexion = new mysqli(DB_SERVER, DB_SERVER_USERNAME, DB_SERVER_PASSWORD, DB_DATABASE);

si no quiero con base de datos y solo con un archivo xml como seria el codigo espero tu respuesta
Hola Brayan,
Responder a tu duda nos va a llevar un buen rato. Te recomiendo que envíes tu petición a nuestro centro de soporte técnico para que averigües como lo podemos hacer.
https://www.jamodules.com/prestashop-addons/es/soporte
Saludos
Hola, buenas tardes.
Me podrías ayudar, quiero implementar este código para realizar una búsqueda especifica en nuestra web pero no logro implementarlo en lugar de un textarea un input, estos son los campos que disponemos en la db CEDULA, NOMBRES, APELLIDOS, FECHA_NACIMIENTO, FECHA_REGISTRO, ESTADO, INFORMACION, PROVINCIA, CANTON, BRIGADAS, M/F
Hola,
Si todavía necesitas ayuda, puedes enviar un mensaje al centro de soporte técnico situado en:
https://www.jamodules.com/prestashop-addons/es/soporte
indicando todos los detalles de tu petición para que lo podamos estudiar.
Saludos
¿como puedo concatenar el campo nombre y apellidos para buscarlos con el nombre completo?
Francisco Molina Pérez, Estefanía Fernández Aguilar
Saludos.
Hola,
En internet puedesn encontrar información sobre la función CONCAT() en SQL que posiblemente te pueda ayudar.
Saludos
hola, quisiera saber cuanto cobraria por ayudarme a que la actual consulta separe los dispositivos en columnas agrupadas según propietario y ubicación, siendo estos datos los nombres de dichas EJ:»111320853-111312664″ columnas y teniendo en cuenta que la cantidad de combinaciones propietario-ubicacion sera variable segun la consulta, estos son algunos dispositivos ingresados en la db, y la website adjuntada es hasta donde logre llevarlo:
1510754
1510766
3446113
3444668
3444716
6937659
6937617
6937180
6937181
6937179
6937153
6937125
6937063
6937071
6937033
6939787
http://agrotrack.uy/trazabilidad/trazabilidad.php
Hola buenos días,
Imagino que llego un poco tarde y puede que ya lo hayas desarrollado.
Disculpa mi tardanza
Saludos
podrias dejar algun link de descarga no lo puedo hacer funcionar
Que problema tiene?
Buenas, amigo y si en vez de buscar quiero insertar los datos por un textarea, es posible, con la finalidad de insertar muchos datos a la misma vez?
Si claro, utilizando la misma idea pero haciendo un insert
Funcionó el dódigo simplemente no encuentro la manera para sacar la consulta que en vez de que los registros esten separados por comas esten separados por lineas, podrias ayudarme con eso?? 🙂
funsiona asi jorge,jose,joan,maria,
pero nececito que funcione asi:
jorge
jose
joan
maria
Saludos!!
Hola,
No lo he probado pero puede que realizando el explode de la siguiente forma se consiga:
$celulas = explode(‘\n’, $_POST[‘celulas’]);
Saludos
copie el codigo pero me envia a el mensaje de que no hay registros nada mas, y cambie algunas partes para correrlo. me podrias mandar el ejemplo o decirme en que esta mal. gracias
<?php
//$conexion = new mysqli(DB_SERVER, DB_SERVER_USERNAME, DB_SERVER_PASSWORD, DB_DATABASE);
//$conexion = mysql_connect(\’localhost\’, \’root\’, \’server\’,\’db_pruebasxml\’);
include(\"enlace.php\");
$conexion=conecta();
echo\"con: $conexion\";
//$query = \"SELECT Id_Proveedor,Prov_Nombre FROM tb_proveedores;\";
////$query = \"SELECT clabe,empresa FROM int_empresa;\";
//$res = mysql_query($query,$conexion);
if (isset($_GET[\’search\’])) {
$celulas = explode(\’,\’, $_GET[\’celulas\’]);
$query=\"SELECT Arc_CodeBar,Arc_ProvNombre,Arc_EmpRecRFC,Arc_FolioFac,Arc_Total,Arc_FolioNC,Arc_ImporteNC FROM tb_prov_archivos WHERE Arc_CodeBar=\’$celulas\’; \";
for ($i=0; $i<count($celulas); $i++) {
if ($i == 0)
$query_search .= \’Arc_CodeBar = \"\’.$celulas[$i].\’\"\’;
else
$query_search .= \’ OR Arc_CodeBar = \"\’.$celulas[$i].\’\"\’;
}
//$search =$conexion->query(\’$query_search\’);
echo\"bus:$search\";
$search = mysql_query($query,$conexion);
if ($search->num_rows > 0) {
echo \'<table border=\"1\" cellpadding=\"5\" cellspacing=\"5\">\’;
echo \'<tr>\’;
echo \'<td><strong>FolioW</strong></td>\’;
echo \'<td><strong>Proveedor</strong></td>\’;
echo \'<td><strong>RFC</strong></td>\’;
echo \'<td><strong>Factura</strong></td>\’;
echo \'<td><strong>Importe</strong></td>\’;
echo \'<td><strong>Nota Credito</strong></td>\’;
echo \'<td><strong>-Importe</strong></td>\’;
echo \'</tr>\’;
$n=0;
while ($row = mysql_fetch_row($result))
{
//while ($row_searched = $search->fetch_assoc()) {
echo \'<tr>\’;
echo \"<td> $row[0] </td>\";
echo \"<td> $row[1] </td>\";
echo \"<td> $row[2] </td>\";
echo \'</tr>\’;
}
echo \'</table><br/>\’;
}
else {
echo \'<div class=\"info\">No hay resultados para los criterios de búsqueda :(.</div>\’;
}
}
?>
Hola Eduardo que tal,
La construcción de la query que has hecho para seleccionar los proveedores no la veo correcta. Fíjate bien como se construye en la ilustación del ejemplo. A partir del WHERE no está correcto.
Saludos,