Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   PHP (https://www.clubdelphi.com/foros/forumdisplay.php?f=15)
-   -   RADPHP. Validar usuario contraseña!! (https://www.clubdelphi.com/foros/showthread.php?t=78010)

juanpy 12-03-2012 20:47:47

RADPHP. Validar usuario contraseña!!
 
Estimados,

Estoy en un proyecto RADPHP y necesito conectarme a la BD MySql.

Tengo dos TextBox donde digito usuario, password y con el boton acepto la entrada.

Favor si me pueden orientar con el algoritmo de validación, tengo un objeto MySqlQuery o otro MySqlDatabase.

Gracias a todos.

georkis 13-03-2012 21:16:51

Hola colega...
 
Código PHP:

A ver si entiendo... tienes un objeto, o sea, agrupas todas las consultas en una class llamada MySqlQuery??? xxx.php y así el otro que es la conexion con la base de datos... con la class MySqlDatabase de xxx.php... bueno si es así tienes que agregar una function y primeramente establecer la conexión... se puede hacer de mucha manera... una orientada a objeto y otra normal....

la normal es así y sensilla...
<?php require_once('Connections/usuario.php'); //pagina de conexion ?>
<?php
if(isset($_POST['login'])){ 
if (!isset(
$_SESSION)) { 
  
session_start(); 

 
$loginFormAction $_SERVER['PHP_SELF']; 
if (isset(
$_GET['accesscheck'])) { 
  
$_SESSION['PrevUrl'] = $_GET['accesscheck']; 

 
if (isset(
$_POST['usuario'])) { 
  
$loginUsername=$_POST['usuario']; 
  
$password=$_POST['pass']; 
  
$MM_fldUserAuthorization ""
  
$MM_redirectLoginSuccess "../sis/admin/index.php"
  
$MM_redirecttoReferrer false
  
mysql_select_db($database_usuario$usuario); 
   
  
$LoginRS__query=sprintf("SELECT usuario, pass FROM instructores WHERE usuario='%s' AND pass='%s'"
    
get_magic_quotes_gpc() ? $loginUsername addslashes($loginUsername), get_magic_quotes_gpc() ? $password addslashes($password));  
    
  
$LoginRS mysql_query($LoginRS__query$usuario) or die(mysql_error()); 
  
$loginFoundUser mysql_num_rows($LoginRS); 
  if (
$loginFoundUser) { 
     
$loginStrGroup ""
     
    
//declare two session variables and assign them 
    
$_SESSION['MM_Username'] = $loginUsername
    
$_SESSION['MM_UserGroup'] = $loginStrGroup;           
 
    if (isset(
$_SESSION['PrevUrl']) && false) { 
      
$MM_redirectLoginSuccess $_SESSION['PrevUrl'];     
    } 
    
header("Location: " $MM_redirectLoginSuccess ); 
  } 
  else { 
    
header("Location: "$MM_redirectLoginFailed ); 
  } 


?>


juanpy 13-03-2012 22:05:31

Gracias por lo de colega, pero son mis primeros pasos en RADPHP....
 
Estimado,

He probado con varias rutinas php, pero el querer ejecutarlas, el ide me despliega demasiadas abvertencias por lo que decido mejor desistir y mejor el algoritmo.

Mi idea es escribir el Username, la Password y pinchar el boton "Login" y accesar a las proximas paginas de ser positiva la conexion.

Tengo tres objetos propios del ide, uno MySqlDatabase que conexta a la base y otro un M;ySqlQuery de ejecuta la consulta deacuerdo a los parametros enviados.

Encontre un ejemplo editado por Embarcadero con el cual me encuentro trabajando y adaptando para el ide:

Código PHP:

 function BasicAuthentication1Authenticate($sender$params)
        {
        if (isset(
$params['username']))
           {
           
$name=mysql_real_escape_string($params['username']);
           
$password=mysql_real_escape_string($params['password']);
           
$query="select * FROM `userdata` WHERE `user` = '".$name."'";
           
$result=mysql_query($query);
           
//if (!$result) {deleted custom code}
           
$row=mysql_fetch_array($result);
           
$customercode=$row['cuscode'];
           if ((
$name==$row['user']) && ($password==$row['pass']))
               {
               return (
true);
               }
           return (
false);
           }
        return (
false);
        } 

Pero este codigo genera demasiadas advertencias (warning) al pinchar el boton "Accesar". Voy a probar dejando el código en el evento; OnBeforeShow.

Le cuento como me va colega y machas graciias.

georkis 14-03-2012 14:08:29

Hola colega... te falta algo...
 
Se puede hacer de dos forma... te explico la primera si resulta...

Código PHP:

 function BasicAuthentication1Authenticate($sender$params)
if (!isset(
$_SESSION)) { 
  
session_start(); 

        {
        if (isset(
$params['username']))
           {
           
$name=mysql_real_escape_string($params['username']);
           
$password=mysql_real_escape_string($params['password']);
           
$query="select * FROM `userdata` WHERE `user` = '".$name."'";
           
$result=mysql_query($query);
           
//if (!$result) {deleted custom code}
           
$row=mysql_fetch_array($result);
           
$customercode=$row['cuscode'];

           
/* Declaración de la variable de session */
           
$_SESSION['username'] = $loginUsername
           
           if ((
$name==$row['user']) && ($password==$row['pass']))
               {
               
header('Location: ruta_Admin.php'); //Prueba poner esto... ruta del usuario
               
return (true);
               }
           return (
false);
           }
        return (
false);
        } 

La otra forma es una página independiente que llame la function BasicAuthentication1Authenticate, y si es verdadero pasar con todo, pero para eso no hace falta hacer todo esto... o sea, lo único que tienes que hacer es: Verificar si la consulta esta llena (Pasa) sino (No pasa), se hace con la function empty()... dime si tienes ideas de lo que estoy hablando...

CSIE 14-03-2012 17:13:13

Mira en la wiki de embarcadero: docwiki.embarcadero.com/RadPHP/XE/en/Database_Developer's_Guide:MySQL


Saludos

juanpy 15-03-2012 15:33:14

Aún sigo probando colega.
 
Georkis,

Si se de lo que estas hablando y es mas la funcion BasicAuthentication (la probe desde los ejemplos de radphp), me valida contrata MySql y no contra la tabla de usuarios que administra el sistema.

Si fueses tan amable me podrias indicar paso a paso las instrucciones que debo seguir para resolver.

¿A que objeto y en que evento debo asociar el algoritmo propuesto (boton submim, etc.)?
¿Cuales son las variables que debo asociar al algoritmo?: $usuario= variable donde recogo el nombre de usuario de la tabla Usuario, $pass=variable donde recogo la contraseña del usuario de la tabla Usuario.

Código PHP:

function BasicAuthentication1Authenticate($sender$params)
if (!isset(
$_SESSION)) { 
  
session_start(); 

        {
        if (isset(
$params['username']))   //'username' SE MANTIENE O LA REEMPLAZO POR MIS VARIABLES 
           
{
           
$name=mysql_real_escape_string($params['username']);
           
$password=mysql_real_escape_string($params['password']);  //'password' SE MANTIENE O LA REEMPLAZO POR MIS VARIABLES
           
$query="select * FROM `userdata` WHERE `user` = '".$name."'";
           
$result=mysql_query($query);
           
//if (!$result) {deleted custom code}
           
$row=mysql_fetch_array($result);
           
$customercode=$row['cuscode'];    //'cuscode' SE MANTIENE O LA REEMPLAZO POR MIS VARIABLES

           /* Declaración de la variable de session */
           
$_SESSION['username'] = $loginUsername
           
           if ((
$name==$row['user']) && ($password==$row['pass']))
               {
               
header('Location: ruta_Admin.php'); //Prueba poner esto... ruta del usuario
               
return (true);
               }
           return (
false);
           }
        return (
false);
        } 

Muchas gracias estimado.

CSIE,

Gracias, realmente interesante la explicación paso a paso de la interfaz con MySql.

Los mantendre informados de los avances al respecto.

juanpy 15-03-2012 21:01:18

georkis, favor comentame
 
georkis,

La verdad es que sigo buscando y mas me complico.

Me podrias detallar la forma sencilla y directa que usa la function BasicAuthentication1Authenticate, y si es verdadero pasar con todo y resulve con la function empty()

Gracias de ante mano

juanpy 15-03-2012 22:13:33

Por fin "salio humo blanco"... Resuelto.
 
Estimados,

Este es el algoritmo resuelto, lo encontre en un foro de PHP y despues de adaptarlo, resolvio...

Código PHP:

$conexion mysql_connect('localhost','root','')or die ('Ha fallado la conexión: '.mysql_error());
mysql_select_db('practicas',$conexion)or die ('Error al seleccionar la Base de Datos: '.mysql_error());
$usuario trim($_POST["usuario"]);
$password trim($_POST["password"]);
$result mysql_query("select * from usuarios where usuario = '$usuario' and clave = '$password'",$conexion);
if (!
$result) {
  echo 
'Error al ejecutar la consulta';
}
else {
      if (
mysql_num_rows($result) > 0) {
      echo 
"Acceso Valido";
      }
      else {
      echo 
"Password incorrecto";
      }
}
mysql_free_result($result);
mysql_close($conexion ); 

Gracias estimados amigos por vuestro soporte.

georkis 19-03-2012 22:08:56

Hola colega...
 
No te he respondido, porque tenia problema con la conexión de Internet... ya veo que resolviste lo que tu querias, ah, se resuelve de muchas maneras lo que tu querias... el ejemplo que te mostre anteriormente te hubiera resuelto... fijate que en la consulta viene los parametro usuario y contraseña...... y por clases es un poco más complicado si no tienes experiencia con php orientado a objeto, pero es más rápido ya que pide el objeto que desees y ya, mientras tanto de la otra manera tiene que leer todo el argumento del código y a veces se vuelve lenta la descarga de la páginas para aquellas personas que no tiene ancho de banda... jajaja como yo, que dispongo de 7 a 9 kbytes / s jejeje... es super lento... bueno colega... :)

juanpy 19-03-2012 22:22:58

Gracias colega
 
Si colega tiene razón, pero RadPhp muchos algoritmos correctos los rechazo y jamas resolvio.

Mi problema era que tenia creado dos objetos tipo datacontrol los cuales por encontrarse activos no validaban y asumian el acceso directos sin necesida de login ni contraseñas, es porque ya estaba la pagina conectada y si o si siempre dejaba pasar al nivel de sistema.

Gracias estimado por el soporte y recuerde que con 50 y 100 kbs de banda ancha, es suficiente para volar si el equipo esta impecable, se lo digo yo que trabaje con modem de 14 kbs, y eso si era lento, pero se podia volar.

Saludos y estamos en contactio.


La franja horaria es GMT +2. Ahora son las 21:26:01.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi