PHP: Búsqueda de valor en *.txt

Ok tengo unos código que ya me esta funcionando pero quiero que cuando busque un nombre de todo los detalles que tenga ese usuarios.
código: buscador.php
<html>
<form name="form1" method= "POST" action="search.php">
<input type ="text" name= "Buscar">
<input type = "submit" name = "enviar">
</form>
</html>
Codigo: search.php
<?php
if((!empty($_POST["searchterm"]))|| isset($_POST["searchterm"])){
         $file = fopen ("info.txt", "r");
         $linea = trim(fgets($file));
         $encontrado = ($linea == $_POST["searchterm"]);
          while (!feof($file) && !$encontrado) {
               $linea = trim(fgets($file));
               $encontrado = ($linea==$_POST["searchterm"]);}
           //end while
              fclose ($file);
}
       if (!$encontrado) {
              echo '<br> El codigo no fue encontrado';
       } else {
             echo 'Lo encontré: '.$linea;
      }
?>
y la información del info.txt esta colocada haci
user1
Vencimiento: 08/11/2010
user2
Vencimiento: 08/11/2010
user3
Vencimiento: 08/11/2010
user4
Vencimiento: 08/11/2010
user5
Vencimiento: 08/11/2010
user6
Vencimiento: 08/11/2010
Pero cuando coloco en el buscador la palabra user1 solo me aparece
Lo encontré:user1
Y necesito que aparezca las segunda línea también
Lo encontré:user1
Vencimiento: 08/11/2010

1 Respuesta

Respuesta
1
Para eso debes modificar un poco el while:
$txtEncontrado="";
while (!feof($file) && !$encontrado) {
               $linea = trim(fgets($file));
               $encontrado = ($linea==$_POST["searchterm"]);
               if($encontrado){
                 //si lo encuentra, entonces nos guardamos esta linea
               $txtEncontrado=$linea;
                 //y leemos la siguiente linea para pillar el vencimiento:
                $linea = trim(fgets($file));
                 $txtEncontrado.="-".$linea; //fijate en el .= que es para concatenar
}//del if
}//end while
              fclose ($file);
}
Así consigues una linea de texto que pone :user1-Vencimiento: 08/11/2010
Puedes cambiar el "-" por lo que quieras para distiguir las 2 lineas.
Podrías poner el código completo ya funcionando completo
Aquí lo tienes
Si lo a ancontrado en $txtEncontrado estará lo que ha encontrado.
<html>
<form name="form1" method= "POST" action="search.php">
<input type ="text" name= "Buscar">
<input type = "submit" name = "enviar">
</form>
</html>
Codigo: search.php
<?php
if((!empty($_POST["searchterm"]))|| isset($_POST["searchterm"])){
         $file = fopen ("info.txt", "r");
         $linea = trim(fgets($file));
         $encontrado = ($linea == $_POST["searchterm"]);
         $txtEncontrado="";
while (!feof($file) && !$encontrado) {
               $linea = trim(fgets($file));
               $encontrado = ($linea==$_POST["searchterm"]);
               if($encontrado){
                 //si lo encuentra, entonces nos guardamos esta linea
               $txtEncontrado=$linea;
                 //y leemos la siguiente linea para pillar el vencimiento:
                $linea = trim(fgets($file));
                 $txtEncontrado.="-".$linea;
//fijate en el .= que es para concatenar
}//del if
}//end while
              fclose ($file);
}
       if (!$encontrado) {
              echo '<br> El codigo no fue encontrado';
       } else {
             echo 'Lo encontré: '.$txtEncontrado;
      }
?>
(En negrita los cambios que he hecho)
Gracias amigo pero no encuentra nada al buscar la palabra como tienen que estar el .txt
La información
Ok, lo he probado y he hecho un par de modificaciones.
info.txt como tu lo tenias:
User1
Vencimiento: 08/11/2010
user2
Vencimiento: 08/11/2010
user3
Vencimiento: 08/11/2010
user4
Vencimiento: 08/11/2010
user5
Vencimiento: 08/11/2010
user6
Vencimiento: 08/11/2010
Buscador.php como lo tenias:
<html>
<form name="form1" method= "POST" action="search.php">
<input type ="text" name= "Buscar">
<input type = "submit" name = "enviar">
</form>
</html>
y search.php:
<?php
$txtEncontrado="";  
if((!empty($_POST["Buscar"])) && isset($_POST["Buscar"])){
         $file = fopen ("info.txt", "r");
         $encontrado=false;
        while (!feof($file) && !$encontrado) {
               $linea = trim(fgets($file));
               $encontrado = ($linea==$_POST["Buscar"]);
               if($encontrado){
                 //si lo encuentra, entonces nos guardamos esta linea
               $txtEncontrado=$linea;
                 //y leemos la siguiente linea para pillar el vencimiento:
                $linea = trim(fgets($file));
                 $txtEncontrado.="-".$linea; //fijate en el .= que es para concatenar
}//del if
}//end while
              fclose ($file);
}
       if (!$encontrado) {
              echo '<br> El codigo no fue encontrado';
       } else {
             echo 'Lo encontré: '.$txtEncontrado;
      }
?>
No iba por un par de cosas:
Si lo que buscabas estaba en la primera linea no entraba al while (solucionado)
Comparabas con $_POST["searchterm"] y debe ser $_POST["Buscar"] (que es como se llama en el form)
lo puedes ver funcionando en: http://pruebas.xhiena.net/txt/
Gracias amigo ya me salio muchas gracias ultima petición podría acer que la búsqueda se enciere como esta en esta foto
Eso se hace en el else de if(!$encontrado) del final:
//Sacamos la cabecera de la tabla:
echo"
<table>
<tr>
<th colspan=\"2\">Fecha de Vencimiento</th>
</tr>
";
//en $txtencontrado está USUARIO-VENCIMIENTO, asi que dividimos por - para separarlos
$usuario=explode("-",$txtencontrado);
//y mostramos la fila con los datos.
echo "
<tr>
<td><b>Usuario</b>:".$usuario[0]."</td>
<td><b>Vence</b>:".$usuario[1]."</td>
</tr>
</table>
";
No me sale podrías complementar el código completo del search.php
Es simplemente al final:
if (!$encontrado) {
              echo '<br> El codigo no fue encontrado';
       } else {
             echo 'Lo encontré: '.$txtEncontrado;
      }
en vez de eso poner:
if (!$encontrado) {
              echo '<br> El codigo no fue encontrado';
       } else {
//Sacamos la cabecera de la tabla:
echo"
<table>
<tr>
<th colspan=\"2\">Fecha de Vencimiento</th>
</tr>
";
//en $txtencontrado está USUARIO-VENCIMIENTO, asi que dividimos por - para separarlos
$usuario=explode("-",$txtencontrado);
//y mostramos la fila con los datos.
echo "
<tr>
<td><b>Usuario</b>:".$usuario[0]."</td>
<td><b>Vence</b>:".$usuario[1]."</td>
</tr>
</table>
";
}
No amigo me tiro error
¿Qué error te dice?
Parse error: syntax error, unexpected T_STRING in /home/78485/public_html/backups/buscador/search.php on line 29
Vale,
en vez de:
$usuario=explode("-",$txtencontrado);
pon:
$usuario=explode("-",$txtEncontrado);
¿Qué tienes en la linea 29?
No experto sige saliendo el mismo error
<?php
$txtEncontrado="";  
if((!empty($_POST["Buscar"])) && isset($_POST["Buscar"])){
         $file = fopen ("info.txt", "r");
         $encontrado=false;
        while (!feof($file) && !$encontrado) {
               $linea = trim(fgets($file));
               $encontrado = ($linea==$_POST["Buscar"]);
               if($encontrado){
                 //si lo encuentra, entonces nos guardamos esta linea
               $txtEncontrado=$linea;
                 //y leemos la siguiente linea para pillar el vencimiento:
                $linea = trim(fgets($file));
                 $txtEncontrado.="-".$linea; //fijate en el .= que es para concatenar
}//del if
}//end while
              fclose ($file);
}
       if (!$encontrado) {
              echo '<br> El codigo no fue encontrado';
       } else {
             echo 'Lo encontré: '.$txtEncontrado;
             echo"
<table>
<tr>
<th colspan=\"2\">Fecha de Vencimiento</th>
</tr>
";
//en $txtencontrado está USUARIO-VENCIMIENTO, asi que dividimos por - para separarlos
$usuario=explode("-",$txtEncontrado);
//y mostramos la fila con los datos.
echo "
<tr>
<td><b>Usuario</b>:".$usuario[0]."</td>
<td><b>Vence</b>:".$usuario[1]."</td>
</tr>
</table>
";
      }
?>
Amigo mira aquí el código aquí esta el mio http://www.ppvcity.info/backups/buscador/index.php busca para que ves que no sale ne tabla si sale dos código
No entiendo,
¿No sale en tabla si sale dos código?
Pegue el mismo código que colocaste
<?php
$txtEncontrado="";  
if((!empty($_POST["Buscar"])) && isset($_POST["Buscar"])){
         $file = fopen ("info.txt", "r");
         $encontrado=false;
        while (!feof($file) && !$encontrado) {
               $linea = trim(fgets($file));
               $encontrado = ($linea==$_POST["Buscar"]);
               if($encontrado){
                 //si lo encuentra, entonces nos guardamos esta linea
               $txtEncontrado=$linea;
                 //y leemos la siguiente linea para pillar el vencimiento:
                $linea = trim(fgets($file));
                 $txtEncontrado.="-".$linea; //fijate en el .= que es para concatenar
}//del if
}//end while
              fclose ($file);
}
       if (!$encontrado) {
              echo '<br> El codigo no fue encontrado';
       } else {
             echo 'Lo encontré: '.$txtEncontrado;
             echo"
<table>
<tr>
<th colspan=\"2\">Fecha de Vencimiento</th>
</tr>
";
//en $txtencontrado está USUARIO-VENCIMIENTO, asi que dividimos por - para separarlos
$usuario=explode("-",$txtEncontrado);
//y mostramos la fila con los datos.
echo "
<tr>
<td><b>Usuario</b>:".$usuario[0]."</td>
<td><b>Vence</b>:".$usuario[1]."</td>
</tr>
</table>
";
      }
?>
Si si,
Pero no entiendo donde esta el error.
El error es que no sale en las trablas como esta en foto
Si que sale en tablas, solo que sin borde.
pon border=1 en el
<table>
No Experto no sale pero gracias ya que con que busque las dos línea como quería es suficiente gracias
Ok pues.
Puntúa la pregunta

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas