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:

search-textarea

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);

Ver el ejemplo en funcionamiento

Autor
Escrito por Jose Aguilar - Director ejecutivo y tecnológico en JA Modules. Experto programador PrestaShop y Experto programador WordPress.
Te ha servido? Valora esta entrada!
(11 votos, promedio: 5 de 5)
Comparte en las redes sociales
¿Buscas trabajo de programador?

16 respuestas a “Buscador Textarea de varios registros con PHP”

  1. brayan dice:

    si no quiero con base de datos y solo con un archivo xml como seria el codigo espero tu respuesta

  2. Pablo Leon dice:

    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

  3. Arturo RC dice:

    ¿como puedo concatenar el campo nombre y apellidos para buscarlos con el nombre completo?

    Francisco Molina Pérez, Estefanía Fernández Aguilar

    Saludos.

  4. JOAQUIN ARTURO PERAZA RUD dice:

    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

  5. juan dice:

    podrias dejar algun link de descarga no lo puedo hacer funcionar

  6. Osujorge dice:

    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?

  7. Joan dice:

    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!!

  8. eduardo dice:

    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>\’;
    }
    }

    ?>

    • Jose Aguilar dice:

      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,

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.