Foros del Web » Programando para Internet » PHP »

Puff q dificil!!!!! espero q sepais

Estas en el tema de Puff q dificil!!!!! espero q sepais en el foro de PHP en Foros del Web. pos veran tengo una web en la q se piden unos datos q son : nombre,pass,mail luego lo envia en la otra web y en ...
  #1 (permalink)  
Antiguo 07/07/2003, 07:39
 
Fecha de Ingreso: junio-2003
Mensajes: 150
Antigüedad: 14 años, 5 meses
Puntos: 0
Puff q dificil!!!!! espero q sepais

pos veran tengo una web en la q se piden unos datos q son : nombre,pass,mail

luego lo envia en la otra web y en la otra pone esto:
Código PHP:
<?php
&users["$nombre"][0]="$nombre";
&
users["$nombre"][1]="$pass";
&
users["$nombre"][2]="$mail";

$fp fopen("users.txt""a");
            
$es "$nombre|@|$pass|@|$mail \n";             fwrite($fp $es );
            
fclose($fp);
?>
como se hace para q busque el nombre q tu le pongas en un PHP en users.txt y luego en la misma linea busque la pass ????
Se puede????como?
  #2 (permalink)  
Antiguo 07/07/2003, 07:53
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hola,

Muy facil. Lees el users.txt con file() (www.php.net/file) que te devuelve un array en el que cada elemento es una linea del fichero. Luego recorres ese array, y para cada elemento haces un explode() (www.php.net/explode) para crear un array con cada una de las partes de la linea. En tu caso usas como separador la cadena '|@|'. Una vez que tienes las partes de la linea en el array, comparas el elemento que tiene el user. En caso de coincidencia, almacenas el valor del pass y finalizas el bucle con break.

Un consejo: no llames al fichero users.txt y no lo guardes en un directorio que sea accesible a traves de URL. Imaginate que lo almacenas en un directorio accesible por URL y alguien sabe como se llama el fichero. Simplemente deberia poner www.dominio.com/directorio/users.txt y tendria una bonita lista de tus usuarios y sus contraseñas. Ademas, tambien deberias almacenar el pass encriptado, a ser posible con una funcion de una sola direccion, que implica que de la cadena encriptada no se puede sacar de ninguna forma la cadena original. Mira md5() (www.php.net/md5).

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #3 (permalink)  
Antiguo 07/07/2003, 08:54
 
Fecha de Ingreso: junio-2003
Mensajes: 150
Antigüedad: 14 años, 5 meses
Puntos: 0
entonces el file() te devuelve por ej: $dato[0],$dato[1] en la q 0 es una fila , 1 tbm y asi hasta el final??

asias
  #4 (permalink)  
Antiguo 07/07/2003, 13:05
 
Fecha de Ingreso: junio-2003
Mensajes: 150
Antigüedad: 14 años, 5 meses
Puntos: 0
Me puedes poner un ejemplo de como buscar en users.txt??'
sq yo se leerlo pero , no buscarlo y, q si es ese nick me mira la pass no se hacerlo.
me puedes ayudar?

Última edición por Matdor; 07/07/2003 a las 13:12
  #5 (permalink)  
Antiguo 07/07/2003, 13:31
Avatar de Manoloweb  
Fecha de Ingreso: enero-2002
Ubicación: Monterrey
Mensajes: 2.454
Antigüedad: 15 años, 10 meses
Puntos: 5
Aqui lo que a mi se me ocurre...

Código PHP:
$usuario=$_POST["user"];
$password=$_POST["pass"];

$usuarios=file("usuarios.txt");
foreach (
$usuarios as $linea){
    if (
$encontrado=strstr($linea,$usuario)){
        break;
    }
}
if (
$encontrado){
    
$partes=explode("|@|",$encontrado);
    if (
$partes[1]!=$password){
        echo 
"NO COINCIDE EL PASSWORD";
    } else {
        echo 
"EL USUARIO Y EL PASSWORD SON CORRECTOS";
    }
} else {
    echo 
"NO EXISTE EL USUARIO";

__________________
Manoloweb
  #6 (permalink)  
Antiguo 07/07/2003, 13:33
Avatar de Manoloweb  
Fecha de Ingreso: enero-2002
Ubicación: Monterrey
Mensajes: 2.454
Antigüedad: 15 años, 10 meses
Puntos: 5
PD.- Ya lo probe y funciona. Solo recuerda que la busqueda se hace "case-sensitive" o sea, diferencía entre mayusculas y minusculas.

Saludos!
__________________
Manoloweb
  #7 (permalink)  
Antiguo 07/07/2003, 14:53
Avatar de Manoloweb  
Fecha de Ingreso: enero-2002
Ubicación: Monterrey
Mensajes: 2.454
Antigüedad: 15 años, 10 meses
Puntos: 5
Código PHP:
// Creamos las variables que recogen el user y password del formulario
$usuario=$_POST["user"];
$password=$_POST["pass"];

//Importamos todas las lineas del archivo a un array
$usuarios=file("usuarios.txt");

//Recorremos el array en busca del nombre
foreach ($usuarios as $linea){
    
// Si encuentra el nombre en una linea, asigna el contenido de
    // esa linea a la variable $encontrado y sale del bucle
    
if ($encontrado=strstr($linea,$usuario)){
        break;
    }
}

//Aqui comprobamos si $encontrado fue llenado (es decir, si hubo 
//algun registro con ese nombre)
if ($encontrado){
    
//Aqui explotamos la línea para tener las tres partes por separado
    //donde [0] es el nombre, [1] el password y [2] el mail
    
$partes=explode("|@|",$encontrado);
    
//Si el password del formulario NO coincide con el del registro
    //sacamos el aviso
    
if ($partes[1]!=$password){
        echo 
"NO COINCIDE EL PASSWORD";
    } else {
        
//Este echo es lo que se ejecuta si los passwords coincidieron
        
echo "EL USUARIO Y EL PASSWORD SON CORRECTOS";
    }
} else {
    
// Si no tiene ningun valor $encontrado, quiere decir que no hay registros con ese nombre
    
echo "NO EXISTE EL USUARIO";

__________________
Manoloweb
  #8 (permalink)  
Antiguo 07/07/2003, 14:58
 
Fecha de Ingreso: junio-2003
Mensajes: 150
Antigüedad: 14 años, 5 meses
Puntos: 0
Gracias por explicarlo pero q significa foreach y strstr?????'(sq soy novato
  #9 (permalink)  
Antiguo 07/07/2003, 15:22
Avatar de Manoloweb  
Fecha de Ingreso: enero-2002
Ubicación: Monterrey
Mensajes: 2.454
Antigüedad: 15 años, 10 meses
Puntos: 5
Foreach te recorre un array elemento por elemento

strstr te devuelve la cadena 2 a partir de la primera coincidencia de la cadena 1, de lo contrario te devuelve FALSE
__________________
Manoloweb
  #10 (permalink)  
Antiguo 07/07/2003, 15:23
Avatar de Manoloweb  
Fecha de Ingreso: enero-2002
Ubicación: Monterrey
Mensajes: 2.454
Antigüedad: 15 años, 10 meses
Puntos: 5
Por cierto... lo probaste? funcionó?
__________________
Manoloweb
  #11 (permalink)  
Antiguo 07/07/2003, 16:03
 
Fecha de Ingreso: junio-2003
Mensajes: 150
Antigüedad: 14 años, 5 meses
Puntos: 0
si qva pero ya q estamos como se hace para redirigir una pagina por ej: q espera 5 seg antes e ir a una pagina
como se hace??


2º) se puede hacer q al ingresar te aparezca en un sitio q estas conectado (registrado e ingresado) y haya sitios en los q solo se pueda entrar si estas registrado como se hace? pero solo lo de confirmar q esta registrado
  #12 (permalink)  
Antiguo 07/07/2003, 16:38
Avatar de Manoloweb  
Fecha de Ingreso: enero-2002
Ubicación: Monterrey
Mensajes: 2.454
Antigüedad: 15 años, 10 meses
Puntos: 5
1.-

<script language="javascript">
function cambia() {
window.location.href = 'tal.php';
}
function espera() {
setTimeout("cambia()",5000);
}
</script>

Bueno, yo lo uso así...

<script language="javascript">
function cambia() {
window.location.href = '<?= $redirect; ?>';
}
function espera() {
setTimeout("cambia()",<?= $tiempo; ?>);
}
</script>

EDIT: En el body debes poner algo así...
<body onLoad="espera();">

De tal forma que dependiendo del resultado de la página, decido hacia donde los mando y cuanto tiempo los dejo leer el mensaje en la pantalla.

De hecho el mensaje tambien es dinamico, por ejemplo "Registro actualizado correctamente, en un momento sera direccionado" ó "No se pudo insertar el registro porque bla bla bla...", en ese ultimo caso hago más largo el tiempo, para que puedan leer la causa del error...




2.- Yo hago algo como esto...

Código PHP:
if ($registrado=="OK"){
//Aqui muestro la pagina


} else {

//Mensaje de error
echo "NO TIENES PERMISO PARA VER ESTA PAGINA";

__________________
Manoloweb

Última edición por Manoloweb; 07/07/2003 a las 16:44
  #13 (permalink)  
Antiguo 07/07/2003, 16:42
 
Fecha de Ingreso: junio-2003
Mensajes: 150
Antigüedad: 14 años, 5 meses
Puntos: 0
Pero como se hace para q la web sepa q estas registrado??'
  #14 (permalink)  
Antiguo 07/07/2003, 16:49
Avatar de Manoloweb  
Fecha de Ingreso: enero-2002
Ubicación: Monterrey
Mensajes: 2.454
Antigüedad: 15 años, 10 meses
Puntos: 5
Matdor...

Creo que necesitas ponerte a analizar un poco más las respuestas que te damos aqui en el foro. Con todo gusto te he ayudado y te ayudaré siempre que pueda, pero es necesario que pongas un poco de tu parte...

En el script que te pongo para verificar al usuario, puedes hacer que se guarde en la sesión algo así...

$_SESSION["registrado"]="OK";

y luego en la pagina donde necesites verificar que ha accesado, haces esto...

Código PHP:
if ($_SESSION["registrado"]=="OK"){
//Aqui muestro la pagina


} else {

//Mensaje de error
echo "NO TIENES PERMISO PARA VER ESTA PAGINA";

__________________
Manoloweb
  #15 (permalink)  
Antiguo 07/07/2003, 16:53
 
Fecha de Ingreso: junio-2003
Mensajes: 150
Antigüedad: 14 años, 5 meses
Puntos: 0
sq yo al ser novato no me se ni siquiera 1 cuarta parte de las funciones o comandos entonces no me puedo explicar mejor xq me acabo de enterar d q existe $_SESSION y no se ni pa q sirve entonces yo no podia analizar mejor la frase. Lo siento si os molesto
  #16 (permalink)  
Antiguo 07/07/2003, 17:09
Avatar de Manoloweb  
Fecha de Ingreso: enero-2002
Ubicación: Monterrey
Mensajes: 2.454
Antigüedad: 15 años, 10 meses
Puntos: 5
No Matdor, no te confundas... No me enfado, ni mucho menos.

Simplemente creo que es importante que vayas entendiendo la lógica de los scripts que vamos sacando, para que mas adelante puedas modificarlos a tu antojo sin ninguna intervención ajena.

Por cierto, en el post donde te explico el foreach vienen unas ligas hacia el manual de PHP en español, te recomiendo que ahi paso a paso te vayas curioseando entre las diferentes funciones y vayas probando los ejemplos que ahi se ponen, te aseguro que a mi me ha servido mucho...

Por cierto, hace menos de 2 años yo no conocía NI UN APICE de PHP ni de programación... Todo lo que se se lo debo a Forosdelweb y al bendito manual de PHP...

Saludos!
__________________
Manoloweb
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 10:00.