Foros del Web » Programando para Internet » PHP »

problema con consulta a base de datos txt

Estas en el tema de problema con consulta a base de datos txt en el foro de PHP en Foros del Web. intento hacer una consulta de 1 b.d. texto partiendo de un formulario que enlace con un archivo: <? $filename="directorio.txt"; $file=fopen($filename,"r+"); $contenido=fread($file,filesize($filename)); $directorio=explode("[s]",$contenido); ?> <html> <head> ...
  #1 (permalink)  
Antiguo 01/01/2003, 14:17
Avatar de pereztroff  
Fecha de Ingreso: junio-2002
Ubicación: En la Internet.
Mensajes: 4.068
Antigüedad: 21 años, 10 meses
Puntos: 5
problema con consulta a base de datos txt

intento hacer una consulta de 1 b.d. texto partiendo de un formulario que enlace con un archivo:
<?
$filename="directorio.txt";
$file=fopen($filename,"r+");
$contenido=fread($file,filesize($filename));
$directorio=explode("[s]",$contenido);
?>
<html>
<head>
<title>Directorio</title>
</head>
<body>
<table>
<?
$i=0;
while($array[1]=$sector){
echo "<tr>";
echo "<td width="250" bgcolor='blue'>";
echo $directorio[$i];
$i++
echo "<

se que el codigo este esta mal, pero nececesito ayuda...
la idea es que a partir del valor seleccionado de una lista de un formulario hacer la consulta y sacar los registros que cumplan la condicion.
====================================
los datos los cojo de aqui:
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body bgcolor="#FFFFFF" text="#000000">
<form name="form1" method="post" action="listar.php">
Sector a consultar:
<select name="sector">
<option value="bares">Bares</option>
<option value="cines">Cines</option>
</select>
</form>
</body>
</html>

Última edición por pereztroff; 01/01/2003 a las 14:20
  #2 (permalink)  
Antiguo 01/01/2003, 16:06
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Primero, ¿cual es la variable $array?
Segundo, el operador de comparacion es ==. El = es el operador de asignacion. Asi que tu while es infinito siempre y cuando $sector no se evalue a falso.

Espero haber sido de ayuda.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #3 (permalink)  
Antiguo 02/01/2003, 18:19
Avatar de pereztroff  
Fecha de Ingreso: junio-2002
Ubicación: En la Internet.
Mensajes: 4.068
Antigüedad: 21 años, 10 meses
Puntos: 5
gracias josemi por el apunte.....
lo que necesito sabes es como pasar un valor del formulario para luego hacer que en otro proceso liste solo aquellos registros cuyo campo x sea igual al valor que fue traspasado desde el formulario. Al estar los datos es un archivo txt, no en mysql, pense que la mejor forma era usar un "while".......... pero me atasque, ¿me puedes ayudar? no veo con claridad la solución.
gracias.
  #4 (permalink)  
Antiguo 02/01/2003, 19:37
Avatar de pereztroff  
Fecha de Ingreso: junio-2002
Ubicación: En la Internet.
Mensajes: 4.068
Antigüedad: 21 años, 10 meses
Puntos: 5
a ver si alguien me confirma lo siguiente:
$sector=$_Post['sector']
lo que hace esta linea es guardar el valor posteado de 1 formulario por ejemplo en 1 variable???
  #5 (permalink)  
Antiguo 02/01/2003, 19:42
Avatar de pereztroff  
Fecha de Ingreso: junio-2002
Ubicación: En la Internet.
Mensajes: 4.068
Antigüedad: 21 años, 10 meses
Puntos: 5
con este codigo consigo seleccionar solo algunos registros de la b.d.??? en base a 1 valor (supongamos que $sector='comercio'? a tener en cuenta que [s] es un separador de los diferentes campos contenidos...
<?
$filename="directorio.txt";
$file=fopen($filename,"r+");
$contenido=fread($file,filesize($filename));
$directorio=explode("[s]",$contenido);
while $sector=
{


aqui es donde me atasco en la condicionalllllllllll...

el contenido podria ser de la b.d. comercio[s]xxxxx[s]958999999[s] y un largo etc...
  #6 (permalink)  
Antiguo 02/01/2003, 20:08
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Mas bien estas liado con un bucle .. Un bucle para leer el array que obtienes de tu explode .. el cual contiene los "campos" que corresponde a cada "registro" que obtienes de cada linea de tu fichero "directorio.txt":

Código PHP:
<?
$filename
="directorio.txt";
$file=fopen($filename,"r+");
$contenido=fread($file,filesize($filename));
$directorio=explode("[s]",$contenido);

//atendiendo que un "explode" entrega un array de `n´ elementos y de inidice inicio 0:
for ($indice=0$indice<=count($directorio); $indice++){
echo 
$directorio[$indice]."<br>";
}

// o un simple bucle foreach()
foreach ($directorio as $elemento){
echo 
$elemento."<br>";
}
?>
Ahora, lo que no queda claro es que caracter usas como delimitador de "registros" en tu directorio.txt

Que caracter/codigo usas para delimitar un registro? .. alguno en concreto? .. un salto de linea (\n) ? .. o se han de leer secuencialmente esos "campos" entendiendo como al fichero entero (directorio.txt) un registro unico? ...

Un saludo,
  #7 (permalink)  
Antiguo 03/01/2003, 19:25
Avatar de pereztroff  
Fecha de Ingreso: junio-2002
Ubicación: En la Internet.
Mensajes: 4.068
Antigüedad: 21 años, 10 meses
Puntos: 5
hola cluster, gracias por tu interes y ayuda..
decirte que no he puesto ningun caracter para indicar donde acaba un registro, por ejmplo introduje 2 registros en el archivo directorio.txt y su contenido es:
Ayuntamiento[s]bomberos[s]lamisma[s]vvvvvvvvvv[s]953[s]555555[s]Ayuntamiento[s]policia[s]yasabes[s]aaaaaa[s]953[s]999999[s]
como comprobaras que no le puse, ¿es necesario? en caso afirmativo ¿como se lo pongo?


*** en verdad lo que quiero es que en la consulta que realice un usuario o yo mismo mediante un formulario(tipo lista) que al seleccionar un valor como puede ser por ejemplo "comercio" liste solo los registros que cumplan dicha condicion con todos sus campos. en mysql se usa el comando "select from....." pero en este caso????
  #8 (permalink)  
Antiguo 03/01/2003, 20:45
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Ahí mismo tu dices que has puesto dos registros .. Tu sabras bien donde empieza uno y otro .. pero lo q es yo o cualquier persona q lea esos "datos" no entenderá donde empieza uno y acaba otro .. Lo mismo le pasa a PHP .. debe de saber donde empieza uno y donde empieza otro para poder tomar alguna acción ..

Lo primero que tendrias que definir es la estructura (modelo de datos) del fichero que estas generando .. tal cual lo harias con un modelo de datos de una Base de datos comun con sus filas y columnas (sus registros y columnas):

+------------+----------- +-----------+
+ campo1 + campo2 + campo3 +
+------------+------------+-----------+

Ahora actualmente dices q la cadena [s] es el delimitador de campos .. te falta el de registro .. Lo tipico es usar el \n salto de linea .. con lo cual tu archivo.txt te quedaria al abrilo:

registro 1: campo1[s]campo2[s]campo2\n
registro 2: campo1[s]campo2[s]campo2\n
registro 3: campo1[s]campo2[s]campo2\n
registro 4: campo1[s]campo2[s]campo2\n
etc ..

El \n .. no lo veras (ni por supuesto registro nº q es solo ejemplo) .. pero si veras el salto de linea ahi mismo .. Si quieres puedes usar [loquetedelagana] segun lo q usas actualmente .. (y mas si algun campo puede tener saltos de linea \n )

Un saludo,
  #9 (permalink)  
Antiguo 04/01/2003, 14:29
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

Lo mejor es hacer lo que te comenta Cluster, poner un caracter o cadena como delimitador de registro. Luego solo tines que hacer un explode() por ese caracter o cadena para tener un array con cada registro. Luego con un for recorres ese array, haciendo otro explode() por el caracter separador de campos para obtener un array con los campos del registro. Con un if compruebas si el campo x es igual a $sector y si lo es lo muestras.

Tal como lo tienes, sin separador de registro, tambien se puede hacer SI todos los registros tienen el mismo numero de campos (aunque esten vacios). En este caso haces un explode() por el caracter separador de campos y con un for recorres los registros. El primer campo de cada registro sera el indice n*(numero de campos por registro), siendo n el numero de registro que quieres acceder y que puede tener valores de 0 a (numero de registros - 1).

Espero haber sido de ayuda.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #10 (permalink)  
Antiguo 04/01/2003, 20:21
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Y si usas el salto de linea como delimitador de registros puedes usar la función:

fgetcsv() .. la cual te lee una linea de tu archivo (tomando como tal un \n salto de linea - registro) .. y a su vez internamente le aplica un explode() usando la cadena que definas .. todo en una misma función, generando un array de `n´ elementos .. tantos como "campos" tiene tu "registro":

Código PHP:
<?
$f
=fopen("BD.txt","r");
while(
$registro=fgetcsv($f,4000,"[s]")){
echo 
$registro[0]." -- ".$registro[1]." -- ".$registro[2];
}
?>
Un saludo,
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 21:43.