Foros del Web » Programando para Internet » PHP »

Buscar cadena en un bucle

Estas en el tema de Buscar cadena en un bucle en el foro de PHP en Foros del Web. Hola, Estoy tratando de hacer un script que verifica si un usuario esta registrado o no (usernama:password), utilizando como base de datos un *.txt, Al ...
  #1 (permalink)  
Antiguo 25/03/2003, 15:20
 
Fecha de Ingreso: julio-2002
Ubicación: Chillán - Chile
Mensajes: 39
Antigüedad: 21 años, 9 meses
Puntos: 0
Buscar cadena en un bucle

Hola,
Estoy tratando de hacer un script que verifica si un usuario esta registrado o no (usernama:password), utilizando como base de datos un *.txt,
Al *.txt quisiera agrgarle los sgtes datos del usuario

1***username1***pass1***nombre1***email1
2***username2***pass2***nombre2***email2
.
.

El scritpt que tengo me funciona bien verificando $Username y $pass, pero no puedo obtener los demàs datos $nombre $email del usuario registrado, como lo puedo hacer????

tengo esto:
.
.
for ($i=0;$i<$num_lines_txt;$i++) {
explode("***",$dato[$i])
if ($username == $dato[1] and $pass == $dato[2])
{$usuario = "registrado";
//Supongo que por aquì puedo obtener los otros datos
//Pero no se como, ayuda!!!!
//Aqui he colocado :
$nombre = $dato[3];
$email = $dato[4];
//Pero me entrega el nombre y el e-mail del ultimo usuario registrado.
}
else
{
$usuario = "noregistrado";
}


De antemano, muchas gracias

[jhuenuman]
  #2 (permalink)  
Antiguo 25/03/2003, 15:32
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
mmm Y seguro que te funcionaba con cualquier usuario de tu listado de usaurios de tu *.txt? ...

explode() entrega un array con tantos elementos como bloques tenga tu cadena partida por el delimitador que indiques ... Tu "cadena" en este caso es cada elemento del array que te entrega file() (supongo q usas eso ..) .. Y cada "línea" es equivalente a un registro de tu usuario, siendo los "campos" los elementos que obtienes al usar explode() ...

Código PHP:
for ($i=0;$i<$num_lines_txt;$i++) {
    
$datos_usuario=explode("***",$dato[$i]);
    if (
$username == $datos_usuario[1] and $pass ==  $datos_usuario[2]){
       
$usuario "registrado";
       
$nombre $datos_usuario[3];
       
$email $datos_usuario[4];
    } else {
       
$usuario "noregistrado";
    }
//cierra el bucle 
mm Un detalle .. Ahora no recuerdo si el explode() crea un array de inidice comienzo 0 ó 1 .. en tal caso pruebalo ..

pd: .. te recomiendo que uses como delimitador un caracter tipo | .. te ahorras unos bytes en tu .txt ...ademas que es un caracter para nada usual .. (y si es necesario .. filtra tus $usuario, $password y demas variables para que no contengan ese caracter .. )

otroPD: .. Con un bucle foreach() pueder recorrer arrays evitandote contar los elementos que tenga el array count() ..

Código PHP:
foreach ($datos as $dato){
    
$datos_usuario=explode("***",$dato);
    
// etc código ...
    
//cierras bucle 
Un saludo,

Última edición por Cluster; 25/03/2003 a las 15:44
  #3 (permalink)  
Antiguo 27/03/2003, 09:45
 
Fecha de Ingreso: julio-2002
Ubicación: Chillán - Chile
Mensajes: 39
Antigüedad: 21 años, 9 meses
Puntos: 0
No funcionó:


for ($i=0;$i<$num_lines_txt;$i++) {
$datos_usuario=explode("***",$dato[$i]);
if ($username == $datos_usuario[1] and $pass == $datos_usuario[2]){
$usuario = "registrado";
$nombre = $datos_usuario[3];
$email = $datos_usuario[4];
} else {
$usuario = "noregistrado";
}
}

pero lo solucioné de la siguiente manera:

for ($i=0;$i<$num_lines_txt;$i++) {
$datos_usuario=explode("***",$dato[$i]);
if ($username == $datos_usuario[1] and $pass == $datos_usuario[2]){
breack; //Interrumpe el bucle cuando $username y $pass son True
$linea_dato = $i+1;
$usuario = "registrado";
} else {
$usuario = "noregistrado";
}
}

//Luego abro nuevamente el archivo y con la información proporcionada por la variable $linea_dato, me voy a esa linea [fila], para obtener toda la informacion es ese usuario, de la siguiente manera:

$datos_usuario=explode("***",$dato[$linea_dato]);
$login = $datos_usuario[1];
$passw = $datos_usuario[2];
$nombre = $datos_usuario[3];
$email = $datos_usuario[4];

Quizás a alguien le sirva........
  #4 (permalink)  
Antiguo 27/03/2003, 10:22
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Me faltó terminar el bucle (romperlo) al encontrar la coincidencia ..

El ejemplo completo sería:

archivo.txt
1***username1***pass1***nombre1***email1
2***username2***pass2***nombre2***email2
3***username3***pass3***nombre3***email3
4***username4***pass4***nombre4***email4

Código PHP:
<?
$dato
=file("archivo.txt");
$num_lines_txt=count($dato);

// Buscar:
$username="username1";
$pass="pass1";


for (
$i=0;$i<$num_lines_txt;$i++) {
    
$datos_usuario=explode("***",$dato[$i]);
    if (
$username == $datos_usuario[1] and $pass ==  $datos_usuario[2]){
       
$usuario "registrado";
       
$nombre $datos_usuario[3];
       
$email $datos_usuario[4];
       break;
    } else {
       
$usuario "noregistrado";
    }
//cierra el bucle

echo $usuario."<br>";
echo 
$nombre."<br>";
echo 
$email."<br>";

?>
Y usando un bucle foreach() .. Nos ahorramos el count() ...
Código PHP:
<?
$dato
=file("archivo.txt");

// Buscar:
$username="username1";
$pass="pass1";


foreach (
$dato as $registro){
    
$datos_usuario=explode("***",$registro);
    if (
$username == $datos_usuario[1] and $pass ==  $datos_usuario[2]){
       
$usuario "registrado";
       
$nombre $datos_usuario[3];
       
$email $datos_usuario[4];
       break;
    } else {
       
$usuario "noregistrado";
    }
//cierra el bucle

echo $usuario."<br>";
echo 
$nombre."<br>";
echo 
$email."<br>";

?>
Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
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




La zona horaria es GMT -6. Ahora son las 12:19.