PDA

Ver la Versión Completa : RADPHP. Validar usuario contraseña!!


juanpy
12-03-2012, 20:47:47
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
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
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:

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
Se puede hacer de dos forma... te explico la primera si resulta...

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
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.

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,

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
Estimados,

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

$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
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
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.