Foros del Web » Programando para Internet » PHP »

proteger parte de una pagina

Estas en el tema de proteger parte de una pagina en el foro de PHP en Foros del Web. hola, tengo una pagina php, y quiero protegerla con contraseña, tengo el codigo para hacerlo, pero lo que pasa es que me protege toda la ...
  #1 (permalink)  
Antiguo 19/02/2005, 10:41
Avatar de satake  
Fecha de Ingreso: julio-2004
Mensajes: 140
Antigüedad: 20 años, 3 meses
Puntos: 0
proteger parte de una pagina

hola, tengo una pagina php, y quiero protegerla con contraseña, tengo el codigo para hacerlo, pero lo que pasa es que me protege toda la pagina, bueno, la pagina es index.php, y yo la tengo protegida, pero yo necesito, que cuando yo entró en la página index.php/accion?firmar, no esté protegida, o sea que no proteja esa acción, solo tendría que estar protegida cuando entre en la principal, pero si entró sólo a esa acción, me deje entrar bien, bueno, espero que puedan ayudarme, chau, suerte
  #2 (permalink)  
Antiguo 19/02/2005, 12:23
Avatar de lalogrosz  
Fecha de Ingreso: mayo-2002
Ubicación: Capital Federal
Mensajes: 339
Antigüedad: 22 años, 6 meses
Puntos: 6
Con un if

Antes de verificar si esta esta logueado tenes que preguntar si $_GET['accion'] != 'firmar', de ser asi comprueba que este logueado, sino ingresa de todas formas.


Suerte
  #3 (permalink)  
Antiguo 19/02/2005, 12:40
 
Fecha de Ingreso: febrero-2005
Mensajes: 670
Antigüedad: 19 años, 9 meses
Puntos: 0
Y, depende de cómo sea el script que estás usando, pero con una estructura de control podés hacer que el script de autenticación no se ejecute si entra a firmar. Por cierto, ¿con /accion?firmar te refieres a /?accion=firmar?
Si lo hacés con /accion?firmar podés chequear que el valor de $_SERVER[QUERY_STRING] sea /accion?firmar; si haces /?accion=firmar, podés chequear que $_GET[accion] sea igual a firmar.

EDIT: Juaz, siempre me ganan por un segundo

Suerte
Fede
__________________
Federico H. García
Desarrollo Web
www.federicog.com.ar
  #4 (permalink)  
Antiguo 19/02/2005, 16:28
Avatar de lalogrosz  
Fecha de Ingreso: mayo-2002
Ubicación: Capital Federal
Mensajes: 339
Antigüedad: 22 años, 6 meses
Puntos: 6
Jeje

siempre busco los que tienen 0 respuestas


por cierto...como es eso de $_SERVER[QUERY_STRING] ....nunca lo use, se que en asp se usa el response.querystring para tomar los datos pasados por GET, pero como es aca?


Gracias
  #5 (permalink)  
Antiguo 19/02/2005, 16:37
 
Fecha de Ingreso: febrero-2005
Mensajes: 670
Antigüedad: 19 años, 9 meses
Puntos: 0
Jeje, igual estaba mal lo que yo había dicho antes.
$_SERVER[QUERY_STRING] devuelve una cadena desde el '?' en una URL hasta el final. Ej:

URL: http://forosdelweb.com/newreply.php?...ote=1&p=976986
$_SERVER[QUERY_STRING]: do=newreply&noquote=1&p=976986

Igualmente, si lo quiere hacer poniendo archivo.php/accion?firmar en la url, puede usar $_SERVER["PHP_SELF"] para leerlo desde el script, pero no le veo mucho sentido.

Suerte
Fede
__________________
Federico H. García
Desarrollo Web
www.federicog.com.ar
  #6 (permalink)  
Antiguo 19/02/2005, 19:09
Avatar de satake  
Fecha de Ingreso: julio-2004
Mensajes: 140
Antigüedad: 20 años, 3 meses
Puntos: 0
explicacion

bueno, creo que me expliqué mal, lo que yo quiero es que cuando entre en index.php, me pida contraseña, pero cuando entre en index.php?accion=firmar, no me pida nada, sino que me deje entrar directamente, creo que ustedes pensaron que yo quería al reves, proteger la acción, firmar, y dejar entrar en el index, espero sus respuestas
  #7 (permalink)  
Antiguo 19/02/2005, 19:58
 
Fecha de Ingreso: febrero-2005
Mensajes: 670
Antigüedad: 19 años, 9 meses
Puntos: 0
Yo te entendí bien, pero para darte un código exacto tendrías que mostrarnos el tuyo para que podamos modificarlo.

Suerte
Fede
__________________
Federico H. García
Desarrollo Web
www.federicog.com.ar
  #8 (permalink)  
Antiguo 19/02/2005, 20:27
Avatar de satake  
Fecha de Ingreso: julio-2004
Mensajes: 140
Antigüedad: 20 años, 3 meses
Puntos: 0
casi listo...

bueno, yo ya lo tengo casi listo, cuando entro en index.php, me pide contraseña, cuando pongo index.php?accion=firmar entrá en lo que tiene que entrar, pero ahora el problema es que cuando pongo la contraseña, la correcta, me vuelve a pedir al contraseña, bueno, acá te dejo el código completo de la página index, con todas las modificaciones que le acabo de hacer, y como está actualmente, por las dudas te aviso que es codigo de un libro de visitas, pero lo voy a modificar para hacer algo totalmente distinto, acá va el código:

Código PHP:
 <?
// Nombre de esta página
$pagina "index.php" ;
// Tu contraseña
$tucontrasena "cutuycuiti" ;
if(
$_GET['accion'] != '') {
if(
$contrasena == $tucontrasena) {
setcookie("Permitido",$contrasena,time()+3600) ;
}
if(
$salir) {
setcookie("Permitido") ;
}
if(
$_COOKIE["Permitido"]) {
echo 
"<p><a href=$pagina?salir=si>Salir</a>" ;
?>
<?
 
// PHP Kike Guestbook v1.1
 // ----------------------------------------------------
 // Autor : Luis Enrique Díaz Jara
 // Web : http://www.kikescripts.mx.kz
 // Email : [email protected]
 // ----------------------------------------------------
 //
 //
 //-----------------------------------------------------
 //
 
include("config.php");
 include(
"funciones.php");
 
Template("html/tpl_arriba.html");
 switch(
$accion) {
 
// Formulario para publicar un mensaje
 
case firmar:
 
Template("html/tpl_formulario.html");
 break;
 
// Publicar un mensaje
 
case publicar:
 
$fecha date("d-m-y H:i a");
 
// Comprobación de campos
 
$nombre trim($nombre);
 
$email trim($email);
 
$mensaje trim($mensaje);
 if(empty(
$nombre)) {
    
$error[] = $alerta[0];
 }
 if(
$email != "") {
   if (!
ereg("^[^@]+@([a-zA-Z0-9\-]+\.)+[a-zA-Z0-9]{2,}$"$email)) {
   
$error[] = $alerta[1];
  }
 }
 if(empty(
$mensaje)) {
  
$error[] = $alerta[2];
 }
 
// Filtro de malas palabras
 
if($FiltroGroserias == "SI") {
 for(
$i 0$i sizeof($palabrotas); $i++) {
 if(
ereg($palabrotas[$i], $nombre) OR ereg($palabrotas[$i], $email) OR ereg($palabrotas[$i], $mensaje)) {  
  
$error[] = $alerta[3];
 }
 }
 }
 if(
$error) {
 include(
"html/tpl_error.html");
 } else {
 
// Filtramos el mensaje
 
HTML();
 
Remplazar();
 
$mensaje ereg_replace("\r\n","<br>"$mensaje);
 
//  Guardamos la firma en el fichero
 
$fp fopen($FicheroId,"r");
 
$id fread($fpfilesize($FicheroId));
 
$id ++;
 
fclose($fp);
 
$fp fopen($FicheroId"w");
 
fwrite($fp$id);
 
fclose($fp);
 
$firma "$id|@|$nombre|@|$email|@|$url|@|$mensaje|@|$fecha|@|\n";
 
$fp fopen($FicheroBase"a");
 
fwrite($fp$firma);
 
fclose($fp);
 
Template("html/tpl_correcto.html");
 }
 break;
 default:
 
// Mostrar todas las firmas
 
$Base file($FicheroBase);
 
$Orden array_reverse($Base);
 if(empty(
$paginado)) {
  
$paginado 0;
 }
 
$Mostrar $paginado $LimiteMensajes;
 for (
$i $paginado$i count($Orden) AND $i $Mostrar$i++) {
  
$dato explode("|@|"$Orden[$i]);
 
$nombre $dato[1];
 
$email $dato[2];
 
$url $dato[3];
 
$mensaje $dato[4];
 
$fecha $dato[5];
 
// Template
 
Template("html/tpl_mensajes.html");
 }
 echo 
"<table cellpadding='4' cellspacing='1' width='450' align='center' class='normal'>";
 echo 
"<tr><td width='50%'>";
 
Paginacion();
 echo 
"</td><td width='50%' align='right'>";
 echo 
"<b><a href='index.php?accion=firmar'>Firmar libro</a></b>";
 echo 
"</td></tr></table>";
 }
 
Template("html/tpl_abajo.html");
?>
<?
}
else {
echo 
"
Contraseña:
<form method=post action=$pagina>
<input type=password name=contrasena>
<input type=submit value=Enviar>
</form>
;
}
?>
chau, suerte
  #9 (permalink)  
Antiguo 19/02/2005, 20:33
Avatar de satake  
Fecha de Ingreso: julio-2004
Mensajes: 140
Antigüedad: 20 años, 3 meses
Puntos: 0
otra cosa

me di cuenta de cual es el problema, pero no se me ocurre como corregirlo, bueno, el problema "creo" que es este: fijate que el formulario realiza la accion de la variable $pagina, que es igual a index.php, entonces vuelve a repetir el script completo, por eso vuelve a realizar la comprobacion para saber si pedir o no contraseña, entonces eso se repite y se repite ilimitadas veces, quisiera saber si pueden encontrar alguna solucion a esto
  #10 (permalink)  
Antiguo 19/02/2005, 20:52
 
Fecha de Ingreso: febrero-2005
Mensajes: 670
Antigüedad: 19 años, 9 meses
Puntos: 0
La verdad que es un poco complicado sin ninguna tabulación, pero probá poniendo $_POST[contrasena] en vez de $contrasena, quizás el host tenga las register_globals off y el sistema no funciona simplemente porque la variable $contrasena no existe.

Probalo y contanos como te fue.
En caso de que no funcione, una pregunta:
Código PHP:
else {
echo 
"
Contraseña:
<form method=post action=$pagina>
<input type=password name=contrasena>
<input type=submit value=Enviar>
</form>
;

ese else, que cierra? es el que comienza en if($_COOKIE["Permitido"]) ?

Otra cosa, deberías ponerle comillas a los atributos en HTML ;)

Código PHP:
<form method="post\" action=\"$pagina\">
<input type=\"password\" name=\"contrasena\">
<input type=\"submit\" value=Enviar\">
</form> 
Suerte
Fede
__________________
Federico H. García
Desarrollo Web
www.federicog.com.ar
  #11 (permalink)  
Antiguo 20/02/2005, 11:08
Avatar de satake  
Fecha de Ingreso: julio-2004
Mensajes: 140
Antigüedad: 20 años, 3 meses
Puntos: 0
ayuda

si, el else que cierra es ese que vos decis, pero quisiera saber cual es la diferencia entre ponerle y no ponerle comillas, desde ya muchas gracias, chau
  #12 (permalink)  
Antiguo 20/02/2005, 14:22
Avatar de lalogrosz  
Fecha de Ingreso: mayo-2002
Ubicación: Capital Federal
Mensajes: 339
Antigüedad: 22 años, 6 meses
Puntos: 6
Ahi esta el error.

Fijate en la condicion que haces...
Código PHP:
if($_COOKIE["Permitido"]) { 
Al no haber puesto la contraseña nunca va a guardar el cookie, por lo que esta condicion deberia ser asi para que entre de todas formas.
Código PHP:
if(($_COOKIE["Permitido"]) || ($_GET['action'] == 'firmar')) 
Ya con esto tenes que poder.

Lo de las comillas en HTML es porque si algun valor o nombre llega a tener un espacio, no te lo va a tomar. Ej:
Código HTML:
<input type=text name=txt azul value=Es un texto en azul> 
Por Get te va a llegar como $_GET['txt'] y el valor va a ser 'Es'.

Suerte
  #13 (permalink)  
Antiguo 21/02/2005, 08:48
Avatar de satake  
Fecha de Ingreso: julio-2004
Mensajes: 140
Antigüedad: 20 años, 3 meses
Puntos: 0
me llama otra vez la funcion

ahora anda todo bien, me pide la contraseña cuando entro en el index.php, y cuando entro en index.php?accion=firmar, no me pide la contraseña, entra directamente pero el problema ahora es que cuando yo envío la contraseña, vuelve a pedírmela, quisiera saber si hay alguna forma de que cuando envíe el formulario, si la contraseña es correcta, no vuelva a realizar esa función, sino que visualice la otra parte de la página
  #14 (permalink)  
Antiguo 21/02/2005, 09:00
Avatar de lalogrosz  
Fecha de Ingreso: mayo-2002
Ubicación: Capital Federal
Mensajes: 339
Antigüedad: 22 años, 6 meses
Puntos: 6
Veo....

Ahi no entra por el $_COOKIE, hacele un print de eso a ver que valor tiene antes de hacer la codicion. Fijate que en la primero condicion que haces
Código PHP:
if($_GET['accion'] != '') { 
Tenes una llave que no cierra en ningun lado.
Si te sigue sin andar, volve a poner el codigo asi te puedo ayudar para ver como vas por ahora.

Suerte
  #15 (permalink)  
Antiguo 21/02/2005, 11:10
Avatar de satake  
Fecha de Ingreso: julio-2004
Mensajes: 140
Antigüedad: 20 años, 3 meses
Puntos: 0
codigo y pruebas

acá te dejo el código actual que tengo, por si querés ver como funciona, te dejo la dirección en donde cargué la página para que veas lo que pasa, probá con las dos que te dejo
http://usuarios.lycos.es/purasdescar.../php/index.php
http://usuarios.lycos.es/purasdescar...?accion=firmar

Código PHP:
<?
// Nombre de esta página
$pagina "index.php" ;
// Tu contraseña
$tucontrasena "cutuycuiti" ;
if(
$_GET['accion'] != '') {
if(
$contrasena == $tucontrasena) {
setcookie("Permitido",$contrasena,time()+3600) ;
}
if(
$salir) {
setcookie("Permitido") ;
}
if(
$_COOKIE["Permitido"]) {
echo 
"<p><a href=$pagina?salir=si>Salir</a>" ;
}
?>
<?
 
// PHP Kike Guestbook v1.1
 // ----------------------------------------------------
 // Autor : Luis Enrique Díaz Jara
 // Web : http://www.kikescripts.mx.kz
 // Email : [email protected]
 // ----------------------------------------------------
 //
 //
 //-----------------------------------------------------
 //
 
include("config.php");
 include(
"funciones.php");
 
Template("html/tpl_arriba.html");
 switch(
$accion) {
 
// Formulario para publicar un mensaje
 
case firmar:
 
Template("html/tpl_formulario.html");
 break;
 
// Publicar un mensaje
 
case publicar:
 
$fecha date("d-m-y H:i a");
 
// Comprobación de campos
 
$nombre trim($nombre);
 
$email trim($email);
 
$mensaje trim($mensaje);
 if(empty(
$nombre)) {
    
$error[] = $alerta[0];
 }
 if(
$email != "") {
   if (!
ereg("^[^@]+@([a-zA-Z0-9\-]+\.)+[a-zA-Z0-9]{2,}$"$email)) {
   
$error[] = $alerta[1];
  }
 }
 if(empty(
$mensaje)) {
  
$error[] = $alerta[2];
 }
 
// Filtro de malas palabras
 
if($FiltroGroserias == "SI") {
 for(
$i 0$i sizeof($palabrotas); $i++) {
 if(
ereg($palabrotas[$i], $nombre) OR ereg($palabrotas[$i], $email) OR ereg($palabrotas[$i], $mensaje)) {  
  
$error[] = $alerta[3];
 }
 }
 }
 if(
$error) {
 include(
"html/tpl_error.html");
 } else {
 
// Filtramos el mensaje
 
HTML();
 
Remplazar();
 
$mensaje ereg_replace("\r\n","<br>"$mensaje);
 
//  Guardamos la firma en el fichero
 
$fp fopen($FicheroId,"r");
 
$id fread($fpfilesize($FicheroId));
 
$id ++;
 
fclose($fp);
 
$fp fopen($FicheroId"w");
 
fwrite($fp$id);
 
fclose($fp);
 
$firma "$id|@|$nombre|@|$email|@|$url|@|$mensaje|@|$fecha|@|\n";
 
$fp fopen($FicheroBase"a");
 
fwrite($fp$firma);
 
fclose($fp);
 
Template("html/tpl_correcto.html");
 }
 break;
 default:
 
// Mostrar todas las firmas
 
$Base file($FicheroBase);
 
$Orden array_reverse($Base);
 if(empty(
$paginado)) {
  
$paginado 0;
 }
 
$Mostrar $paginado $LimiteMensajes;
 for (
$i $paginado$i count($Orden) AND $i $Mostrar$i++) {
  
$dato explode("|@|"$Orden[$i]);
 
$nombre $dato[1];
 
$email $dato[2];
 
$url $dato[3];
 
$mensaje $dato[4];
 
$fecha $dato[5];
 
// Template
 
Template("html/tpl_mensajes.html");
 }
 echo 
"<table cellpadding='4' cellspacing='1' width='450' align='center' class='normal'>";
 echo 
"<tr><td width='50%'>";
 
Paginacion();
 echo 
"</td><td width='50%' align='right'>";
 echo 
"<b><a href='index.php?accion=firmar'>Firmar libro</a></b>";
 echo 
"</td></tr></table>";
 }
 
Template("html/tpl_abajo.html");
?>
<?
}
else {
echo 
"
Contraseña:
<form method=post action=$pagina>
<input type=password name=contrasena>
<input type=submit value=Enviar>
</form>
;
}
?>
  #16 (permalink)  
Antiguo 21/02/2005, 21:17
Avatar de satake  
Fecha de Ingreso: julio-2004
Mensajes: 140
Antigüedad: 20 años, 3 meses
Puntos: 0
si pueden

necesitaria, si alguien puede encontrar el problema, decirme donde está, o pasarme alguna función distinta para realizar esta misma tarea que estoy buscando, porque necesito terminar esto, para comenzar a adentrarme en el diseño de la página, ya que hace bastante que estoy buscando terminar con esta parte del desarrollo de esta web que estoy creando
  #17 (permalink)  
Antiguo 22/02/2005, 09:32
Avatar de satake  
Fecha de Ingreso: julio-2004
Mensajes: 140
Antigüedad: 20 años, 3 meses
Puntos: 0
saltear parte

quizas con algun script se puede hacer que cuando envie el formulario, si la contraseña es correcta, que saltee la parte donde pide la contraseña si la pagina es index.php, o quizas se puede solucionar de alguna otra forma esto, quizas con algun script distinto para proteger la pagina, espero que me puedan ayudar, gracias
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:57.