Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Datos visibles solo para usuarios registrados

Estas en el tema de Datos visibles solo para usuarios registrados en el foro de Bases de Datos General en Foros del Web. Saludos, primero que nada esta web es muy buena, mucho contenido eh sacado de aquí, entre ellos, me tope con un error que aun no ...
  #1 (permalink)  
Antiguo 01/07/2010, 19:16
 
Fecha de Ingreso: julio-2010
Mensajes: 158
Antigüedad: 13 años, 9 meses
Puntos: 3
Datos visibles solo para usuarios registrados

Saludos, primero que nada esta web es muy buena, mucho contenido eh sacado de aquí, entre ellos, me tope con un error que aun no logro resolver, espero puedan ayudarme, la cosa es esta, lo que quiero hacer, es que solo usuarios registrados puedan ver cierto contenido, para ello me base en este código:

index.php
Código:
<html> 
<head> 
<title>Autentificación PHP</title> 
</head> 
<body> 
<h1>Autentificación PHP</h1> 
<form action="control.php" method="POST"> 
<table align="center" width="225" cellspacing="2" cellpadding="2" border="0"> 
<tr> 
<td colspan="2" align="center" 
<?if ($_GET["errorusuario"]=="si"){?> 
bgcolor=red><span style="color:ffffff"><b>Datos incorrectos</b></span> 
<?}else{?> 
bgcolor=#cccccc>Introduce tu clave de acceso 
<?}?></td> 
</tr> 
<tr> 
<td align="right">USER:</td> 
<td><input type="Text" name="usuario" size="8" maxlength="50"></td> 
</tr> 
<tr> 
<td align="right">PASSWD:</td> 
<td><input type="password" name="contraseña" size="8" maxlength="50"></td> 
</tr> 
<tr> 
<td colspan="2" align="center"><input type="Submit" value="ENTRAR"></td> 
</tr> 
</table> 
</form> 
</body> 
</html>
control.php
Código:
<? 
//vemos si el usuario y contraseña es váildo 
if ($_POST["usuario"]=="miguel" && $_POST["contraseña"]=="qwerty"){ 
    //usuario y contraseña válidos 
    //defino una sesion y guardo datos 
    session_start(); 
    $_SESSION["autentificado"]= "SI"; 
    header ("Location: aplicacion.php"); 
}else { 
    //si no existe le mando otra vez a la portada 
    header("Location: index.php?errorusuario=si"); 
} 
?>
seguridad.php
Código:
<? 
//Inicio la sesión 
session_start(); 

//COMPRUEBA QUE EL USUARIO ESTA AUTENTIFICADO 
if ($_SESSION["autentificado"] != "SI") { 
    //si no existe, envio a la página de autentificacion 
    header("Location: index.php"); 
    //ademas salgo de este script 
    exit(); 
} 
?>
aplicacion.php
Código:
<?include ("seguridad.php");?> 
<html> 
<head> 
<title>Aplicación segura</title> 
</head> 
<body> 
<h1>Si estás aquí es que te has autentificado</h1> 
<br> 
---- 
<br> 
Aplicación segura 
<br> 
---- 
<br> 
<br> 
<a href="salir.php">Salir</a> 
</body> 
</html>
Todo el codigo anterior funciona a la perfección el unico detalle es que yo tengo un registro de usuarios, y para ello tube que modificar el archivo control.php y quedo asi:

control.php

Código:
<?php

session_start();
mysql_connect("localhost","miusuario","micontraseña");
mysql_select_db("mibase") or die('No se puede seleccionar la base de datos');

if ($_POST['usuario']) {
$contraseña=$_POST['contraseña'];
if ($contraseña==NULL) {
echo "La contraseña no fue enviada";
}else{
$query = mysql_query("SELECT usuario,contraseña FROM usuarios WHERE usuario = '$usuario'") or die(mysql_error());
$data = mysql_fetch_array($query);
if($data['contraseña'] != $contraseña) {


header("Location: index.php?errorusuario=si"); 


}else{

    $_SESSION["autentificado"]= "SI"; 
    header ("Location: aplicacion.php"); 


}
}
}
?>
Este codigo hace la comprobación, si los datos no son correctos lo manda al index.php para iniciar sesion, si los datos son correctos lo manda a aplicacion.php, el unico problema es que los usuarios pueden entrar desde el navegador a aplicacion.php, y es ese el error que aun no logro solucionar no se que estoy haciendo espero puedan ayudarme. De antemano gracias
  #2 (permalink)  
Antiguo 02/07/2010, 07:21
Avatar de miguec04  
Fecha de Ingreso: agosto-2008
Ubicación: Cimitarra, Santander
Mensajes: 378
Antigüedad: 15 años, 8 meses
Puntos: 15
Respuesta: Datos visibles solo para usuarios registrados

Pues bueno amigo yo no aria eso de esa forma
Código PHP:
Ver original
  1. <?php
  2.  
  3. mysql_connect("localhost","miusuario","micontraseña");
  4. mysql_select_db("mibase") or die('No se puede seleccionar la base de datos');
  5.  
  6. if ($_POST['usuario']) {
  7. $contrase&#241;a=$_POST['contraseña'];
  8. if ($contrase&#241;a==NULL) {
  9. echo "La contraseña no fue enviada";
  10. }else{
  11. $query = mysql_query("SELECT usuario,contraseña FROM usuarios WHERE usuario = '$usuario'") or die(mysql_error());
  12. $data = mysql_fetch_array($query);
  13. if($data['contraseña'] != $contrase&#241;a) {
  14.  
  15.  
  16. header("Location: index.php?errorusuario=si");
  17.  
  18.  
  19. }else{
  20.  
  21.     $_SESSION["autentificado"]= "SI";
  22.     header ("Location: aplicacion.php");
  23.  
  24.  
  25. }
  26. }
  27. }
  28. ?>

Me parece mejor esta otra forma

Código PHP:
Ver original
  1. <?php
  2.  
  3. mysql_connect("localhost","miusuario","micontraseña");
  4. mysql_select_db("mibase") or die('No se puede seleccionar la base de datos');
  5.  
  6. // !empty me dice si la variable existe y viene llena
  7. if (!empty($_POST['usuario']) && !empty($_POST['contrasena'])) {
  8. {
  9. //la funcion addslashes me ayuda con la seguridad para eviatar injections
  10. $user=addslashes($_POST['usuario']);
  11. $pass=addslashes($_POST['contrasena']);
  12.  
  13. $query = mysql_query("SELECT usuario,contrasena FROM usuarios WHERE usuario = '$user' && contrasena='$pass' ") or die(mysql_error());
  14. $cant=mysql_num_rows($query);
  15.  
  16. if($cant==1)
  17. {
  18. $_SESSION["autentificado"]= "SI";
  19. header ("Location: aplicacion.php");
  20. }
  21. else
  22. {
  23. echo '<script>alert("Este usuario no existe"); location.href="index.php";</script>';
  24. }
  25.  
  26. }
  27. else
  28. {
  29. //retornamos un mensaje diciendo que todos los datos no fueron diligenciados;
  30. echo '<script>alert("Todos los campos son obligatorios"); location.href="index.php";</script>';
  31. }
  32. ?>

creo que esta bien jejejejeje, perdóname si me falto algo. me avisas si te sirvio.
__________________
Desoftc Technology - Miguel Carmona
Creaciones Inteligentes - Cimitarra Colombia
[email protected]
http://www.desoftc.com.co
  #3 (permalink)  
Antiguo 02/07/2010, 17:12
 
Fecha de Ingreso: julio-2010
Mensajes: 158
Antigüedad: 13 años, 9 meses
Puntos: 3
Respuesta: Datos visibles solo para usuarios registrados

El segundo esta más completo solo una, cosa me marca error con un else, le quite el de la linea 8, y funciono a la perfección, pero creo esta mal, por que entonces se abren 3 llaves y se cierran 4, asi que no se cual otra debo quitar, o si esta bien lo que hice. Y una ultima cosa, eh visto portales y foros como el phpnuke y smf que cuando uno inicia sesión, se muestran datos en la misma página que antes no se veia, mi pregunta es, si sigue siendo la misma página, y si es asi como se hace eso? O es otra página a la que se redirecciona mediante la función include, por que en el navegador se sigue mostrando index.php. Y muchas gracias por responderme.
  #4 (permalink)  
Antiguo 03/07/2010, 05:27
Avatar de miguec04  
Fecha de Ingreso: agosto-2008
Ubicación: Cimitarra, Santander
Mensajes: 378
Antigüedad: 15 años, 8 meses
Puntos: 15
Respuesta: Datos visibles solo para usuarios registrados

1. mira el error es que se me fue mas de un corchete solo uno de demas

Código HTML:
Ver original
  1. if (!empty($_POST['usuario']) && !empty($_POST['contrasena'])) {{

en la linea 8

quita el corchete del final que quede asi

Código PHP:
Ver original
  1. if (!empty($_POST['usuario']) && !empty($_POST['contrasena'])) {

y bueno si queres mostrar informacion tenes que hacer varias cosas, a mi me gusta trabajar POO Programacion orientada a objetos es mas facil a mi parecer de validar informacion, cuando se muestra informacion de dirente tipo en el mismo archivo se puede mostrar por medio de parametros GET, POST, SESSION como lo desees manejar entonces haces una validacion por ejemplo

si variable_GET=="noticias"
entonces
mostrar informacion de noticias
SINO entonces
si variable_GET=="clasificados"
mostrar clasificados
SINO
mostrar lo que tu quieras

bueno esta es solo una forma de hacerlo encones podes poner el include dentro de cada validacion y solo mostrare la informacion de la condicion que sea cierta.

espero haberme dado a entender.
__________________
Desoftc Technology - Miguel Carmona
Creaciones Inteligentes - Cimitarra Colombia
[email protected]
http://www.desoftc.com.co
  #5 (permalink)  
Antiguo 04/07/2010, 01:34
 
Fecha de Ingreso: julio-2010
Mensajes: 158
Antigüedad: 13 años, 9 meses
Puntos: 3
Respuesta: Datos visibles solo para usuarios registrados

Gracias amigo, el código funciona a la perfección y muchas gracias por tú tiempo, ahora solo unas ultimas dudas, me di cuenta que al usar siempre la función <?include ("seguridad.php");?> en cada archivo, cuando inicien sesión siempre los va a redireccionar a un solo archivo, lo ideal seria que por ejemplo como en esta página te redireccione a la pagina anterior antes de tener que inicar sesión, entonces use la variable $_SERVER['HTTP_REFERER'] y quedo de esta forma el código:

Código:
<?php
	 
session_start();
mysql_connect("localhost","miusuario","micontraseña");
mysql_select_db("mibase") or die('No se puede seleccionar la base de datos');
	 

$url=$_SERVER['HTTP_REFERER']; 

// !empty me dice si la variable existe y viene llena
if (!empty($_POST['usuario']) && !empty($_POST['contraseña'])) {

//la funcion addslashes me ayuda con la seguridad para eviatar injections
$user=addslashes($_POST['usuario']);
$pass=addslashes($_POST['contraseña']);
	 
$query = mysql_query("SELECT usuario,contraseña FROM usuarios WHERE usuario = '$user' && contraseña='$pass' ") or die(mysql_error());
$cant=mysql_num_rows($query);
 
if($cant==1)
{
$_SESSION["autentificado"]= "SI"; 
header ("Location: " .$url);
}
else
{
echo '<script>alert("Este usuario no existe"); location.href="registro.php";</script>';
}
 
}
else
{
//retornamos un mensaje diciendo que todos los datos no fueron diligenciados;
echo '<script>alert("Todos los campos son obligatorios"); location.href="registro.php";</script>';
}
?>
Y funciona perfecto, el unico detalle, es que si iniciaban sesión desde una página que se llame registro.php, siempre se va a redireccionar a la página registro.php, y lo ideal seria que se valla al index.php, y use este código:

Código:
<?php
	 
session_start();
mysql_connect("localhost","miusuario","micontraseña");
mysql_select_db("mibase") or die('No se puede seleccionar la base de datos');
	 



if($_SERVER['PHP_SELF']=registro.php)
{
$url= "index.php";
}
else
{
$url= $_SERVER['HTTP_REFERER'];
}



// !empty me dice si la variable existe y viene llena
if (!empty($_POST['usuario']) && !empty($_POST['contraseña'])) {

//la funcion addslashes me ayuda con la seguridad para eviatar injections
$user=addslashes($_POST['usuario']);
$pass=addslashes($_POST['contraseña']);
	 
$query = mysql_query("SELECT usuario,contraseña FROM usuarios WHERE usuario = '$user' && contraseña='$pass' ") or die(mysql_error());
$cant=mysql_num_rows($query);
 
if($cant==1)
{
$_SESSION["autentificado"]= "SI"; 
header ("Location: " .$url);
}
else
{
echo '<script>alert("Este usuario no existe"); location.href="registro.php";</script>';
}
 
}
else
{
//retornamos un mensaje diciendo que todos los datos no fueron diligenciados;
echo '<script>alert("Todos los campos son obligatorios"); location.href="registro.php";</script>';
}
?>
Pero no funciona, siempre me manda a la página anterior, espero puedas ayudarme a solucionar esto.
  #6 (permalink)  
Antiguo 04/07/2010, 01:41
 
Fecha de Ingreso: julio-2010
Mensajes: 158
Antigüedad: 13 años, 9 meses
Puntos: 3
Respuesta: Datos visibles solo para usuarios registrados

Y ya para acabar, lo que te preguntaba de mostrar datos a usuarios registrados en la misma página, lo que pasa es que tengo una página donde los usuarios publican material y me gustaria que cuando inicien sesion, puedan ver el bóton de editar y de borrar (El codigo de la función de estos botones ya los tengo) intente poner algo asi en mi index.php pero tampoco funciono:

Código:
<html> 
<body> 


<?if ($_SESSION["autentificado"]="SI"){?> 

<a href="editar.php"> Editar </a>
<a href="borrar.php"> Borrar </a>



<?}else{?> 


    <form name="formulario" method="post" action="iniciar_sesion.php">
    Visitante. Por favor, <a href=""><b>ingresa</b></a> o <a href=""><b>registrate.</b></a>
    <br><br>
    <input type="text" name="usuario" id="usuario">&nbsp<input type="password" name="contraseña" id="contraseña">
    <br><br>
    <input type="submit" value="Iniciar Sesion">
    </form>


<?}?> 

---------
Aqui el resto del código de mi página.

</body> 
</html>
Y creo eso seria todo, y enserio muchas gracias por tu ayuda y por tu tiempo.
  #7 (permalink)  
Antiguo 06/07/2010, 20:55
 
Fecha de Ingreso: julio-2010
Mensajes: 158
Antigüedad: 13 años, 9 meses
Puntos: 3
Respuesta: Datos visibles solo para usuarios registrados

Nadie sabe?
  #8 (permalink)  
Antiguo 09/07/2010, 13:57
Avatar de miguec04  
Fecha de Ingreso: agosto-2008
Ubicación: Cimitarra, Santander
Mensajes: 378
Antigüedad: 15 años, 8 meses
Puntos: 15
Respuesta: Datos visibles solo para usuarios registrados

Bueno parcero creo saber donde esta tu error

Código PHP:
Ver original
  1. <?php
  2.      
  3. mysql_connect("localhost","miusuario","micontraseña");
  4. mysql_select_db("mibase") or die('No se puede seleccionar la base de datos');
  5.      
  6.  
  7.  
  8. /*AQUI ESTA TU ERROR estas condicionando una cadena de caracteres y lo tenes que hacer con comillas no puedes hacer la comparación de esta forma.*/
  9. if($_SERVER['PHP_SELF']=registro.php)
  10. {
  11. $url= "index.php";
  12. }
  13. else
  14. {
  15. $url= $_SERVER['HTTP_REFERER'];
  16. }
  17.  
  18.  
  19.  
  20. // !empty me dice si la variable existe y viene llena
  21. if (!empty($_POST['usuario']) && !empty($_POST['contraseña'])) {
  22.  
  23. //la funcion addslashes me ayuda con la seguridad para eviatar injections
  24. $user=addslashes($_POST['usuario']);
  25. $pass=addslashes($_POST['contraseña']);
  26.      
  27. $query = mysql_query("SELECT usuario,contraseña FROM usuarios WHERE usuario = '$user' && contraseña='$pass' ") or die(mysql_error());
  28. $cant=mysql_num_rows($query);
  29.  
  30. if($cant==1)
  31. {
  32. $_SESSION["autentificado"]= "SI";
  33. header ("Location: " .$url);
  34. }
  35. else
  36. {
  37. echo '<script>alert("Este usuario no existe"); location.href="registro.php";</script>';
  38. }
  39.  
  40. }
  41. else
  42. {
  43. //retornamos un mensaje diciendo que todos los datos no fueron diligenciados;
  44. echo '<script>alert("Todos los campos son obligatorios"); location.href="registro.php";</script>';
  45. }
  46. ?>

lo correcto seria:

Código PHP:
Ver original
  1. <?php
  2.      
  3. mysql_connect("localhost","miusuario","micontraseña");
  4. mysql_select_db("mibase") or die('No se puede seleccionar la base de datos');
  5.      
  6.  
  7.  
  8. /*Esta es la forma correcta.*/
  9. if($_SERVER['PHP_SELF']=="registro.php")
  10. {
  11. $url= "index.php";
  12. }
  13. else
  14. {
  15. $url= $_SERVER['HTTP_REFERER'];
  16. }
  17.  
  18. // !empty me dice si la variable existe y viene llena
  19. if (!empty($_POST['usuario']) && !empty($_POST['contraseña'])) {
  20.  
  21. //la funcion addslashes me ayuda con la seguridad para eviatar injections
  22. $user=addslashes($_POST['usuario']);
  23. $pass=addslashes($_POST['contraseña']);
  24.      
  25. $query = mysql_query("SELECT usuario,contraseña FROM usuarios WHERE usuario = '$user' && contraseña='$pass' ") or die(mysql_error());
  26. $cant=mysql_num_rows($query);
  27.  
  28. if($cant==1)
  29. {
  30. $_SESSION["autentificado"]= "SI";
  31. header ("Location: " .$url);
  32. }
  33. else
  34. {
  35. echo '<script>alert("Este usuario no existe"); location.href="registro.php";</script>';
  36. }
  37.  
  38. }
  39. else
  40. {
  41. //retornamos un mensaje diciendo que todos los datos no fueron diligenciados;
  42. echo '<script>alert("Todos los campos son obligatorios"); location.href="registro.php";</script>';
  43. }
  44. ?>

ahora vi otro error, estabas poniendo la condición con un solo igual (=) y esto no se puede así, tenes que hacerlo con doble igual (==) en .net si se maneja un solo igual para condición y para asignación.

espero haberte ayudado con esta primera inquietud voy a leer la siguiente a ver que pasa.
__________________
Desoftc Technology - Miguel Carmona
Creaciones Inteligentes - Cimitarra Colombia
[email protected]
http://www.desoftc.com.co
  #9 (permalink)  
Antiguo 09/07/2010, 14:04
Avatar de miguec04  
Fecha de Ingreso: agosto-2008
Ubicación: Cimitarra, Santander
Mensajes: 378
Antigüedad: 15 años, 8 meses
Puntos: 15
Respuesta: Datos visibles solo para usuarios registrados

Pues bueno yo lo aria de la siguiente forma espero te sirva:
Código PHP:
Ver original
  1. <html>
  2. <head><title>Index de la pagina</title></head>
  3. <body>
  4.  
  5.  
  6. <?php
  7. if ($_SESSION["autentificado"]=="SI") { ?>
  8.  
  9. <a href="editar.php"> Editar </a>
  10. <a href="borrar.php"> Borrar </a>
  11.  
  12.  
  13.  
  14. <?php } else { ?>
  15.  
  16.  
  17.     <form name="formulario" method="post" action="iniciar_sesion.php">
  18.     Visitante. Por favor, <a href=""><b>ingresa</b></a> o <a href=""><b>registrate.</b></a>
  19.     <br><br>
  20.     <input type="text" name="usuario" id="usuario">&nbsp<input type="password" name="contraseña" id="contraseña">
  21.     <br><br>
  22.     <input type="submit" value="Iniciar Sesion">
  23.     </form>
  24.  
  25.  
  26. <?php } ?>
  27.  
  28. ---------
  29. Aqui el resto del código de mi página.
  30.  
  31. </body>
  32. </html>
mira ten cuidado con los fundamentos de PHP recuerda las condiciones en el if de igualdad son con doble igual (==) en ambos casos tenias ese error, ahora las etiquetas te recomiendo que utilizes <?php //codigo ?> ya que la mayoría de servidores las reconocen creo que también hay un problema en las versiones de PHP con las que tu utilizas que son <?//codigo?>.

espero haberte colaborado.

y Gracias a foros del web, por brindar este espacio de compartir conocimientos yo le debo mucho a este foro y de una u otra forma siento que correspondo esos favores con lo que me han ayudado.
__________________
Desoftc Technology - Miguel Carmona
Creaciones Inteligentes - Cimitarra Colombia
[email protected]
http://www.desoftc.com.co
  #10 (permalink)  
Antiguo 10/07/2010, 20:50
 
Fecha de Ingreso: julio-2010
Mensajes: 158
Antigüedad: 13 años, 9 meses
Puntos: 3
Respuesta: Datos visibles solo para usuarios registrados

Saludos, gracias amigo pero esta vez ninguno de los dos casos funciono, el primero lo pude arreglar con otras cosas, pero el segundo, no funciona para nada. Sabes de otra forma que se pueda hacer?

Etiquetas: registrados, usuarios
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:47.