Foros del Web » Programando para Internet » PHP »

Dar accesoa usuarios exisatentes en base de datos

Estas en el tema de Dar accesoa usuarios exisatentes en base de datos en el foro de PHP en Foros del Web. Hola, estpy generando un web, y quiero dar acceso a la pagina de descargas solamente a los usuarios que tengo predefinidos en mi base de ...
  #1 (permalink)  
Antiguo 25/10/2005, 02:58
 
Fecha de Ingreso: octubre-2005
Mensajes: 14
Antigüedad: 12 años, 1 mes
Puntos: 0
Dar accesoa usuarios exisatentes en base de datos

Hola, estpy generando un web, y quiero dar acceso a la pagina de descargas solamente a los usuarios que tengo predefinidos en mi base de datos. El problema lo tango a la hora de redireccionar, como paso del script a la pagina de descargas cuando el usuario existe en mi base de datos???

Este es el script que utilizo:

<?php
include("conectabd2.php");
$link=Conectarse();
$result=mysql_query("select * from usuarios",$link);
$codigo=$_GET['codigo'];
$usuario=$_GET['usuario'];
$password=$_GET['password'];

while($row = mysql_fetch_array($result))
{

if (($row["usr_code"] == $codigo) && ($row["usr_login"] == $usuario) && ($row["usr_pass"] == $password))
{
$sesion=1;
header("Location: Descargas.php?sesion=1");
}
else
{
$sesion=0;
}
mysql_free_result($result);
mysql_close($link);
}

?>


Aqui no seria corrcto usar el " header("Location: Descargas.php?sesion=1"); "????



Gracias
  #2 (permalink)  
Antiguo 25/10/2005, 03:06
Avatar de abe_k  
Fecha de Ingreso: diciembre-2004
Mensajes: 286
Antigüedad: 13 años
Puntos: 2
Una solucion seria aplicar sesiones. Crea una sesion cuando un usuario este en la base de datos y si este quiere ir a la pagina de descargas, allí comprueba que la sesion esta abierta. Si es asi, que pueda descargar, sino , pues no.

No se si sabes alo que me refiero
__________________
abe_k

Si quieres visitar Andorra, consulta la guia de este pequeño pais y conseguiras toda la información que necesites. La guia del visitante en Andorra
  #3 (permalink)  
Antiguo 25/10/2005, 03:33
 
Fecha de Ingreso: octubre-2005
Mensajes: 14
Antigüedad: 12 años, 1 mes
Puntos: 0
Algo he leido sobre las sesiones, pero no lo he probado. Me explico un poco más, para que puedas ver realmente mi problema,

Desde cualquier página de productos, pueden acceder a la descarga. Desde el enlace descarga pasan a la página login y aqui les paso el formulario. Desde el formulario se comprueba que existen en la base de datos, pero luego ya no me vuelve a la página de login, o no se como redireccionar si tienen acceso a la pagina de descargas.
Uso "form action="comprobaruser.php"", y comprobar user es:
<?php
include("conectabd2.php");
$link=Conectarse();
$result=mysql_query("select * from usuarios",$link);
$codigo=$_GET['codigo'];
$usuario=$_GET['usuario'];
$password=$_GET['password'];

while($row = mysql_fetch_array($result))
{

if (($row["usr_code"] == $codigo) && ($row["usr_login"] == $usuario) && ($row["usr_pass"] == $password))
{
$sesion=1;
header("Location: Descargas.php?sesion=1");
}
else
{
$sesion=0;
}
mysql_free_result($result);
mysql_close($link);
}

?>

Aqui es donde esta el problema, comprobaruser.php se abre en el navegador, y creo que no deberia ser asi, pero como hacerlo....??'

No se si te he explicado un poco mas o a sido peror, lo siento.....

Gracias
  #4 (permalink)  
Antiguo 25/10/2005, 04:10
Avatar de abe_k  
Fecha de Ingreso: diciembre-2004
Mensajes: 286
Antigüedad: 13 años
Puntos: 2
Si mal no he entendido, tu header(location:descargas.php) no te funciona, no?

Una solucion para que no tuvieras que crear una pagina para comprovar la validacion es que pusieras todo este codigo en la misma pagina de login. Me explico:
Si tu fichero login es login.php:

Código:
<?php
if(isset($_GET['valida'])){
     //Todo tu código
}else{
     //El código que tengas en login y el formulario
     echo "<form action='login?valida=1'> \n";
}

?>
Asi, haces toda la comprobación en la misma página (login). Lo que no entiendo es porque no te redirecciona con el header, es decir, en la parte que verificas el password, si coincide la das a un header pero si no te queda en la pagina compruebapassword. Porque no haces que si no encuentra usuario te haga otro header? asi nunca se quedara ahi donde dices que se queda.
Por otro lado, si nunca entra en un header, deberias hacer tus comprobaciones para saber los motivos de ese error. Por lo que refiere a sintaxis lo tienes bien, pero mira que no se hayan enviado a servidor los headers de tu sitio antes del tuyo o comprueba si el codigo cae en ese header( es decir mira con un simple echo si en el if de comprobacion de password, se entra a ese header).

No se, espero ayudarte, sino continua comentando. Tarde o temprano lo encontramos ok?
__________________
abe_k

Si quieres visitar Andorra, consulta la guia de este pequeño pais y conseguiras toda la información que necesites. La guia del visitante en Andorra
  #5 (permalink)  
Antiguo 25/10/2005, 04:47
 
Fecha de Ingreso: octubre-2005
Mensajes: 14
Antigüedad: 12 años, 1 mes
Puntos: 0
Bueno, nos vamos acercando, creo que probe algo parecido pero no me funciono. El codigo que me quedan en lohin3.php es desde etiqueta body:
Hay qie pulirlo, es que he dejado lo minimo para las pruebas.

<body>

<div align="center">
<div>
<table width="100%" height="100%" border="0">
<tr>
<tr >
<td bgcolor="#000000">
<table width="100%" height="100%" border="0">
<tr>
<td width="78%"><table width="100%" height="242" align="right" >
<tr>
<td>

<div align="center">
<?php include("conectabd2.php"); //conexion a base de datos
if(isset($_GET['valida'])){

$link=Conectarse();
$result=mysql_query("select * from usuarios",$link);
$codigo=$_GET['codigo'];
$usuario=$_GET['usuario'];
$password=$_GET['password'];

while($row = mysql_fetch_array($result))
{

if (($row["usr_code"] == $codigo) && ($row["usr_login"] == $usuario) && ($row["usr_pass"] == $password))
{
$sesion=1;
}
else
{
$sesion=0;
}
mysql_free_result($result);
mysql_close($link);
}
}else{

<form>
<div align="center">
<center>
<table width="300" bgcolor="#0000FF">
<tr>
<td><table border="0" width="300" bgcolor="#000000">
<tr>
<td width="300" colspan="2" bgcolor="#0000FF">
<p align="center"><font color="#FFFFFF">Usuario registrado</font></td>
</tr>
<tr bgcolor="#000000">
<td width="150" class="menulateral">Codigo Cliente:</td>
<td width="150"><div align="center">
<input type="text" name="codigo" size="20">
</div></td>
</tr>
<tr bgcolor="#000000">
<td width="50%" class="menulateral">Usuario:</td>
<td width="50%"><div align="center">
<input type="text" name="usuario" size="20">
</div></td>
</tr>
<tr bgcolor="#000000">
<td width="50%" class="menulateral">Password: </td>
<td width="50%">
<div align="center">
<input type="password" name="password" size="20">
</div></td>
</tr>
<tr bgcolor="#000000">
<td><div align="center">
<input type="submit" value="Aceptar" name="Accion">
</div></td>
<td><div align="center">
<input type="reset" value="Borrar" name="Accion">
</div></td>
</tr>
<tr bgcolor="#000000">
<td colspan="2">
<div align="center"><img src="file:/blank0.gif" width="16" height="16"> <span class="msg"></span> </div></td>
</tr>
</table></td>
</tr>
</table>
</center>
</div>
</form>

echo "<form action='login3?valida=1'> \n";
}

?> </div></td>
</table>
</tr>
</table> </td>
</tr>

</table>
</td>
</tr>
</table>
</div>
</div>

</body>
</html>


me aparece la pagina en blanco, voy a comprobar paso a paso , o empezare desde cero conel formulario.

Gracias
  #6 (permalink)  
Antiguo 25/10/2005, 05:14
Avatar de abe_k  
Fecha de Ingreso: diciembre-2004
Mensajes: 286
Antigüedad: 13 años
Puntos: 2
Lo haces mal,

nunca pongas codigo html dentro de php. Si acaso embebelo:

ej: tu has hecho <?php <div align="center"> ?>

yo hago: <?php echo "<div align='center'>\n"; ?>

o sea meto el codigo html dentro de php. Por eso lo saco con un echo y le pongo a todos los atributos del html que van con comillas dobles, pues las simples.

y la linea :
echo "<form action='login3?valida=1'> \n";

era en el form. Tu has puesto el form y al final esto y esta mal. Lo que te he puesto es la linea del form embebida en php, entiendes??
__________________
abe_k

Si quieres visitar Andorra, consulta la guia de este pequeño pais y conseguiras toda la información que necesites. La guia del visitante en Andorra
  #7 (permalink)  
Antiguo 25/10/2005, 05:48
 
Fecha de Ingreso: octubre-2005
Mensajes: 14
Antigüedad: 12 años, 1 mes
Puntos: 0
Bueno, ya estoy aqui de nuevo. Espero no desesperes, he probado con codigo embebido, y ya me funciona. El codigo que me ha quedado es:

<body>



<?php
if(isset($_GET['valida'])){
//Todo tu código
include("conectabd2.php");
$link=Conectarse();
$result=mysql_query("select * from usuarios",$link);
$codigo=$_GET['codigo'];
$usuario=$_GET['usuario'];
$password=$_GET['password'];

while($row = mysql_fetch_array($result))
{

if (($row["usr_code"] == $codigo) && ($row["usr_login"] == $usuario) && ($row["usr_pass"] == $password))
{
header ("Location: Descargas.php");
}
else
{
header ("Location: Login4.php?valida1");
}
mysql_free_result($result);
mysql_close($link);
}

}else{
//El código que tengas en login y el formulario
echo "<form action='login4?valida=1'> \n";
echo "<div align='center'>
<center><table width='300' bgcolor='#0000FF'>
<tr><td><table border='0' width='300' bgcolor='#000000'>
<tr><td width='300' colspan='2' bgcolor='#0000FF'>
<p align='center'><font color='#FFFFFF'>Usuario registrado</font></td></tr>
<tr bgcolor='#000000'><td width='150' class='menulateral'>Codigo Cliente:</td>
<td width='150'><div align='center'>
<input type='text' name='codigo' size='20'>
</div></td>
</tr>
<tr bgcolor='#000000'>
<td width='50' class='menulateral'>Usuario:</td>
<td width='50%'><div align='center'>
<input type='text' name='usuario' size='20'>
</div></td>
</tr>
<tr bgcolor='#000000'>
<td width='50%' class='menulateral'>Password: </td>
<td width='50%'>
<div align='center'>
<input type='password' name='password' size='20'>
</div></td>
</tr>
<tr bgcolor='#000000'>
<td><div align='center'>
<input type='submit' value='Aceptar' name='Accion'>
</div></td>
<td><div align='center'>
<input type='reset' value='Borrar' name='Accion'>
</div></td>
</tr>
<tr bgcolor='#000000'>
</tr>
</table></td>
</tr>
</table>
</center>
</div>
</form>";

}

?>
</body>

Ahora al ejecutarlo, en el navegador me aparece
http://...login4?codigo=12&usuario=1...Accion=Aceptar, estoy pasando los atributos de codigo,usuario, password y no valida. ???
estoy bastanta verde en esto, no???
  #8 (permalink)  
Antiguo 25/10/2005, 05:59
 
Fecha de Ingreso: octubre-2005
Mensajes: 14
Antigüedad: 12 años, 1 mes
Puntos: 0
Creo que estoy metiendo mal el codigo, el codigo de acceso ala base de datos debera ir dentro del else final.

Lo pruebo y te comento
  #9 (permalink)  
Antiguo 25/10/2005, 06:06
 
Fecha de Ingreso: octubre-2005
Mensajes: 14
Antigüedad: 12 años, 1 mes
Puntos: 0
Nada, estoy perdido. No acabo de ver cual es el problema.

La comprobacion la hace correctamente, con un printf o un echo, si encuentra al usuario en la base de datos me indica usuario encontrado, pero si no acceso denegado, pero no me acepta los header. Quito los echo, para evitar los errores posibles al usar el headre, pero nada de nada.
Como puedo ver que cabeceras se envian antes que mi header???

Podemos verlo en el website.
  #10 (permalink)  
Antiguo 25/10/2005, 08:21
 
Fecha de Ingreso: octubre-2005
Mensajes: 14
Antigüedad: 12 años, 1 mes
Puntos: 0
Estoy analizando todo el tema, y veo que con este codigo donde me dices "tu codigo", he de colocar todo lo relacionado a descargas, es decir la página que se vera si el usuario es correcto.
Y más abajo el codigo completo de login junto con el formulario. Ya he colocado todo el formulario como codigo html embebido, pero el problema esta en los datos que envio tras pulsar aceptar.

<?php
if(isset($_GET['valida'])){
//Todo tu código
}else{
//El código que tengas en login y el formulario
echo "<form action='login?valida=1'> \n";
}

?>

Espero me puedas ayudar abe k, gracias
  #11 (permalink)  
Antiguo 25/10/2005, 08:35
Avatar de abe_k  
Fecha de Ingreso: diciembre-2004
Mensajes: 286
Antigüedad: 13 años
Puntos: 2
Me he estado mirando tu codigo .No le habias puesto metodo de envio al formulario ( GET O POST ) y cuando le decias $codigo =$_GET['codigo'] no te debe devolver nada.

Mirate el codigo que te he puesto y lo entenderas:

Código:
<?php
if(isset($_GET['valida'])){
//Todo tu código
include("conectabd2.php");
$link=Conectarse();
$result=mysql_query("select * from usuarios",$link);
$codigo=$_POST['codigo'];
$usuario=$_POST['usuario'];
$password=$_POST['password'];

while($row = mysql_fetch_array($result))
{

if (($row["usr_code"] == $codigo) && ($row["usr_login"] == $usuario) && ($row["usr_pass"] == $password))
{
header ("Location: Descargas.php");
}
else
{
header ("Location: Login4.php?valida=1");
}
mysql_free_result($result);
mysql_close($link);
}

}else{
//El código que tengas en login y el formulario
echo "<form action='login4.php?valida=1' method='post'> \n";
echo "<div align='center'>
<center><table width='300' bgcolor='#0000FF'>
<tr><td><table border='0' width='300' bgcolor='#000000'>
<tr><td width='300' colspan='2' bgcolor='#0000FF'>
<p align='center'><font color='#FFFFFF'>Usuario registrado</font></td></tr>
<tr bgcolor='#000000'><td width='150' class='menulateral'>Codigo Cliente:</td>
<td width='150'><div align='center'>
<input type='text' name='codigo' size='20'>
</div></td>
</tr>
<tr bgcolor='#000000'>
<td width='50' class='menulateral'>Usuario:</td>
<td width='50%'><div align='center'>
<input type='text' name='usuario' size='20'>
</div></td>
</tr>
<tr bgcolor='#000000'>
<td width='50%' class='menulateral'>Password: </td>
<td width='50%'>
<div align='center'>
<input type='password' name='password' size='20'>
</div></td>
</tr>
<tr bgcolor='#000000'>
<td><div align='center'>
<input type='submit' value='Aceptar' name='Accion'>
</div></td>
<td><div align='center'>
<input type='reset' value='Borrar' name='Accion'>
</div></td>
</tr>
<tr bgcolor='#000000'>
</tr>
</table></td>
</tr>
</table>
</center>
</div>
</form>";

}

?>
He pasado el metodo del formulario a POST y cuando le asigno las variables las leo de POSt i no de GET como hacias.

A ver que tal?

pd- Si los headers no funcionan mira de que en el fichero que incluyes con el include no tenga espacios en blanco ni al principio ni al fin porque sino se envian las cabeceras a servidor y suda del header que pones. Venga, animo
__________________
abe_k

Si quieres visitar Andorra, consulta la guia de este pequeño pais y conseguiras toda la información que necesites. La guia del visitante en Andorra
  #12 (permalink)  
Antiguo 25/10/2005, 09:08
 
Fecha de Ingreso: octubre-2005
Mensajes: 14
Antigüedad: 12 años, 1 mes
Puntos: 0
Seguimos parecido, cuando doy aceptar, este el usuario o no en la base de datos, envia login4.php?valida=1, con lo cual me aparece todo lo que esta dentro del codigo: (Si has leido los 2 ultimos mensajes veras como creo que estaba aplicando mal tus sugerencias.)

if(isset($_GET['valida'])){
//Todo tu código
echo "<table weight='500'>
<tr><td><p>Hola</p></td></tr>
</table>";

Por partes, con isset($_GET['valida'], comprobamos que existe la variable no es asi? Una vez llamenos a login4.php?vsalida=1 estaremos generando dicha variable, entonces todo lo que esta en ese codigo sera ejecutado, como llamo desde formulario con opcion valida=1, siempre ejecutara este codigo, y no me discrimina los usuarios no registrados.
O realmente el codigo correcto es el que me has pasado en el anterior mensaje?? En dicho codigo, si existe valida conecta con la base de daatos y redirecciona, si no es asi, muestra el formulario de nuevo. Asi lo entiendo yo, pero no funciona.

En lo referente al header, el archivo de conexion a la base de datos es:
<?php
function Conectarse() {
if (!($link=mysql_connect("localhost","","")))
{
exit();
}
if (!mysql_select_db("seguridad",$link))
{
exit();
}
return $link;
}
$link=Conectarse();
mysql_close($link); //cierra la conexion
?>

no lo veo espacios en blanco , o no se buscar el error, hay algun software de ejecicion de php con posibilidad de encontrar errores, vi algo sobre maguma studio, pero no puedo ver realmente como funciona.

Gracias
  #13 (permalink)  
Antiguo 25/10/2005, 09:18
Avatar de abe_k  
Fecha de Ingreso: diciembre-2004
Mensajes: 286
Antigüedad: 13 años
Puntos: 2
Pues si siempre te sale el de login4.php?valida=1, ponle echos de usuario, codigo y password antes del if de comparacion entre los datos de la base de datos y lo que has retornado del post para ver que te sale por pantalla. Parece que el if te da problemas. Te saca por pantalla los valores que has escrito en el formulario? si es asi, coincide con alguno de los registros de la base de datos?

a ver
__________________
abe_k

Si quieres visitar Andorra, consulta la guia de este pequeño pais y conseguiras toda la información que necesites. La guia del visitante en Andorra
  #14 (permalink)  
Antiguo 25/10/2005, 10:14
 
Fecha de Ingreso: octubre-2005
Mensajes: 14
Antigüedad: 12 años, 1 mes
Puntos: 0
He probado lo del echo, me aparecen los datos de codigo, usuario y password, tanto si es registrado como si no. He introducido otro echo en la comparacion de los valores del formulario con la base de datos, y si esta registrado me indica acceso correcto y si no denegado. Pero no redirecciona.

Puedo integrar la pagina descarga con la de login???
Todo con html embebido, no se, por probar.
  #15 (permalink)  
Antiguo 25/10/2005, 10:55
 
Fecha de Ingreso: octubre-2005
Mensajes: 14
Antigüedad: 12 años, 1 mes
Puntos: 0
Ahora he detectado el error que solo me da acceso al primer usuario de la base de datos, los demas no tienen acceso. Como podemos comparar los datos de la base y los usuarios 1 a 1, mediante un while?? Mientras el ID_Usuario no sea el ultimo compara, o algo asi??


Gracias
  #16 (permalink)  
Antiguo 26/10/2005, 05:05
Avatar de abe_k  
Fecha de Ingreso: diciembre-2004
Mensajes: 286
Antigüedad: 13 años
Puntos: 2
Holas, perdona que tardara, es que tuve trabajo y no pude conectarme mas.

Ya haces un while, lo que pasa es que incluyes dentro, estas sentencias:

mysql_free_result($result);
mysql_close($link);

Ponlas a continuacion del while (cuando ya lo has cerrado).
__________________
abe_k

Si quieres visitar Andorra, consulta la guia de este pequeño pais y conseguiras toda la información que necesites. La guia del visitante en Andorra
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 17:13.