elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  [Tutorial] - Login con ajax . Mysql || Php con clases || Ajax
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: [Tutorial] - Login con ajax . Mysql || Php con clases || Ajax  (Leído 23,654 veces)
Hadess_inf
Desesperado
Colaborador
***
Desconectado Desconectado

Mensajes: 2.047


Nueva Vida


Ver Perfil WWW
[Tutorial] - Login con ajax . Mysql || Php con clases || Ajax
« en: 29 Junio 2009, 01:23 »

Introduccion : Hola a todos, pues es domingo, y para buena suerte mia [sarcasmo] se quemo la fuente de mi PC, mi Tv no esta operativo, mi movil esta descargando y no tengo dinero ni para ir a ver una buena pelicula (Transformers II - segun los trailers esta buenisima) felizmente nadie esta usando la otra Pc (despechada por mi xD .. y que no corre ni el warcraft III), como ven no tengo nada que hacer, me puse a pensar ... meditar .... y me anime a escribir este pequeño tutorial, la idea es usar clases para trabajar con una BD (todo con php y mysql). Pues manos a la obra.

En esta ocacion haremos un login con ajax. A continuacion los detalles. Base de Datos, crea la BD sistema y en ella ejecutar el siguiente script:

Código
  1. CREATE TABLE `personal` (
  2.  `idpersonal` varchar(8) NOT NULL,
  3.  `nombres` varchar(45) NOT NULL,
  4.  `apellidos` varchar(45) NOT NULL,
  5.  `clave` varchar(45) NOT NULL,
  6.  `fecnac` date NOT NULL,
  7.  `fecreg` date NOT NULL,
  8.  `imagen` text,
  9.  `sexo` char(1) default NULL,
  10.  `estado` char(1) default NULL,
  11.  PRIMARY KEY  (`idpersonal`)
  12. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  13.  

Insertar registros a discrecion xD

Código
  1. INSERT INTO `personal` VALUES ('41338110', 'Juar Carlos', 'Malca Pereda', 'clave1' ,'1982-02-23', '2009-04-28', NULL, '0', '1');
  2. INSERT INTO `personal` VALUES ('41352619', 'Yessenia Clariza', 'Rodas Correo', 'clave2' , '1989-01-09', '2009-04-28', NULL, '1', '1');
  3. INSERT INTO `personal` VALUES ('42751388', 'Pedro Ricardo', 'Mariano Jimenz', 'clave3' , '1984-12-20', '2009-04-28', NULL, '1', '1');
* En este caso por ser un ejemplo no se usar el md5 (Es recomendable usarlo)

Ahora la estructura de la pagina sera la siguiente:

Citar
   Appserver/
     |--- www/
          |--- web/
          |     |--- ajax/ (Js ^^', alquien se dio cuenta?)
          |     |     |--- home.js (ajax)
          |     |--- clases/ (clases php ^^')
          |     |     |--- mysql.php (clase de conexion)
          |     |     |--- personal.php (clase para personal)
          |     |     |--- ingreso.php (clase funciones)
          |     |--- imagenes/ (imagenes)
          |     |     |--- loader.gif (icono cargando)
          |     |--- index.php (pagina de inicio)
          

Imagen loader.gif

Empezemos con la clase para la conexion:
www/web/clases/mysql.php
Código
  1. <?
  2. //Clase Mysql, se usa para la conexion a la Base de Datos
  3. class Mysql
  4. {
  5. var $conexion;
  6. //inicia conexion con el servidor
  7. function conecta()
  8. {
  9. if(!isset($this->conexion))
  10. {
  11. $ser = "localhost"; //servidor
  12. $usr = "root"; //usuario
  13. $pwd = "root"; //password
  14. $bbd = "sistema"; //base de datos
  15. $this->conexion = (mysql_connect($ser,$usr,$pwd)) or die(mysql_error());
  16. mysql_select_db($bbd,$this->conexion) or die(mysql_error());
  17. }
  18. }
  19.  
  20. //realiza la consulta recepcionada
  21. function consulta($consulta)
  22. {
  23. $resultado = mysql_query($consulta,$this->conexion);
  24. if(!$resultado)
  25. {
  26. echo 'MySql Error: '.mysql_error();
  27. }
  28. return $resultado;
  29. }
  30.  
  31. //devuelve un vector de la consulta
  32. function vector($consulta)
  33. {
  34. return mysql_fetch_array($consulta);  
  35.    }
  36.  
  37. //retorna el numero de registros para la consulta
  38. function filas($consulta)
  39. {
  40. return mysql_num_rows($consulta);  
  41. }  
  42. }
  43. ?>

Clase para verificacion de personal:
www/web/clases/personal.php
Código
  1. <?
  2. class Persona
  3. {
  4. var $p_idpersona;
  5. var $p_nombre;
  6. var $p_apellido;
  7. var $p_persona;
  8. var $p_imagen;
  9. var $p_sexo;
  10. var $p_fecnac;
  11. var $p_estado;
  12. var $p_existe;
  13.  
  14. //function que define si el idpersona existe
  15. function set_idpersona($codigo,$clave)
  16. {
  17. include("mysql.php");
  18. $sql = "select * from personal where idpersonal='$codigo' and clave='$clave'";
  19. $con = new Mysql();
  20. $con->conecta();
  21. $res = $con->consulta($sql);
  22. $num = $con->filas($res);
  23. if($num>0)
  24. {
  25. $row = $con->vector($res);
  26. $this->p_idpersona=$codigo;
  27. $this->p_nombre=$row['nombres'];
  28. $this->p_apellido=$row['apellidos'];
  29. $this->p_imagen=$row['imagen'];
  30. $this->p_sexo=$row['sexo'];
  31. $this->p_estado=$row['estado'];
  32. $this->p_fecnac=$row['fecnac'];
  33. $this->p_persona=$this->p_apellido.', '.$this->p_nombre;
  34. $this->p_existe=1;
  35. }
  36. else
  37. {
  38. $this->p_existe=0;
  39. }
  40. }
  41.  
  42. //Retorna true si el usuario existe, caso contrario false
  43. function get_existe()
  44. {
  45. return $this->p_existe;
  46. }
  47.  
  48. //Retorna el codigo de la persona
  49. function get_idpersona()
  50. {
  51. return $this->p_idpersona;
  52. }
  53.  
  54. //Retorna el nombre de la persona
  55. function get_nombre()
  56. {
  57. return $this->p_nombre;
  58. }
  59.  
  60. //Retorna el apellido de la persona
  61. function get_apellido()
  62. {
  63. return $this->p_apellido;
  64. }
  65.  
  66. //Retorna el sexo de la persona
  67. function get_sexo()
  68. {
  69. return $this->p_sexo;
  70. }
  71.  
  72. //Retorna la imagen de la persona
  73. function get_imagen()
  74. {
  75. return $this->p_imagen;
  76. }
  77.  
  78. //Retorna la fecha de nacimiento de la persona
  79. function get_fecnac()
  80. {
  81. return $this->p_fecnac;
  82. }
  83.  
  84. //Retorna el estado de la persona
  85. function get_estado()
  86. {
  87. return $this->p_estado;
  88. }
  89.  
  90. //Retorna el nombre completo de la persona
  91. function get_persona()
  92. {
  93. return $this->p_persona;
  94. }
  95. }
  96. ?>

Clase para el login, es llamado por la funcion ajax en  ‫javascript:
www/web/clases/ingreso.php
Código
  1. <?
  2. include("persona.php");
  3. $usuario = $_REQUEST['usu'];
  4. $clave = $_REQUEST['pwd'];
  5. $usu = new Persona();
  6. $usu->set_idpersona($usuario,$clave);
  7. $est = $usu->get_existe();
  8. if($est==1){
  9. ?>
  10.  
  11. Llamar a funcion  &#8235;javascript que llame a la pagina principal.
  12. APORTE PARA LA COMUNIDAD FORO.ELHACKER.NET
  13. saludos.
  14.  
  15. <? }else{ ?>
  16.  
  17. Usuario <input type="text" id="usr" name="usr" maxlength="8" /><br>
  18. clave <input type="text" id="pwd" name="pwd" maxlength="25" /><br>
  19. <input type="button" value="Ingresar" onclick="verifica();"/><br><br>
  20. <center>Datos incorrectos</center>
  21.  
  22. <? } ?>

Ajax, se llama desde el index:
www/web/ajax/home.js
Código
  1. //Funcion para ajax
  2. function NewAjax()
  3. {
  4. var xmlhttp=false;
  5. try {
  6. xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
  7. } catch (e) {
  8. try {
  9. xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  10. } catch (E) {
  11. xmlhttp = false;
  12. }
  13. }
  14.  
  15. if (!xmlhttp && typeof XMLHttpRequest!='undefined')
  16. {
  17. xmlhttp = new XMLHttpRequest();
  18. }
  19. return xmlhttp;
  20. }
  21. //Funcion para el login
  22. function verifica()
  23. {
  24. var usu = document.getElementById('usr');
  25.        var pwd = document.getElementById('pwd');
  26. var div = document.getElementById('cuerpo');
  27. var ajax = NewAjax();
  28. ajax.open("POST", 'clases/ingreso.php?usu='+usu.value+'&pwd='+pwd.value,true);
  29. ajax.onreadystatechange=function()
  30. {
  31. if (ajax.readyState==4)
  32. {
  33. var ok = ajax.responseText;
  34. div.innerHTML = ok;
  35. }
  36. else
  37. {
  38. div.innerHTML = "<img src='imagenes/loader.gif'><br><br><font color='#666666'>Autentificando<br>Espere un momento por favor.</font>";
  39. }
  40. }
  41. ajax.send(null);
  42. }

Pagina index, donde se efectura el login
www/web/index.php
Código
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  4. <title>Ingreso : Aporte para foro.elhacker.net</title>
  5. <script src="ajax/home.js" language=" &#8235;javascript" type="text/ &#8235;javascript"></script>
  6. </head>
  7.  
  8. <div id='cuerpo' name='cuerpo'>
  9.  
  10. Usuario <input type="text" id="usr" name="usr" maxlength="8" /><br>
  11. clave <input type="text" id="pwd" name="pwd" maxlength="25" /><br>
  12. <input type="button" value="Ingresar" onclick="verifica();"/>
  13.  
  14. </div>
  15.  
  16. </body>
  17. </html>

Archivo a descargar: Click
El file no contiene la Bd (esta se crea independientemente, ver inicio del hilo)

Sin mas que decirles me despido (en realidad ahora estoy mas aburrido que cuando comence a tipear ^^' ... ), espero que esto le sea util a alquien, como siempre tambien decir: si encuentran algun error no duden en avisarme y lo corrijo.

Cuidense y estamos viendonos pronto.
Hadess_inf


« Última modificación: 20 Julio 2009, 07:26 por Hadess_inf » En línea

bleyarkngel

Desconectado Desconectado

Mensajes: 16


Ver Perfil
Re: [Tutorial] - Mysql || Php con clases || Ajax
« Respuesta #1 en: 29 Junio 2009, 03:00 »

ahora mismo lo pruebo y a ver tal esta ;)!   :o


En línea

HardieVon

Desconectado Desconectado

Mensajes: 181


Programming HardCore


Ver Perfil WWW
Re: [Tutorial] - Mysql || Php con clases || Ajax
« Respuesta #2 en: 29 Junio 2009, 05:48 »

JEJE yo fuí al pre-estreno en sala IMAX  ::)
que por cierto, muy buena eh.

a si man te digo, la clase no cumple con un poliformismo idoneo, es demasiado especifica, en php tenemos la ventaja de crear funciones que dejan atras los objetos para realizar acciones suamante sencillas, bueno ya que si estas acostumbrado a algun estandar como el de java ps que le hacemos
En línea

^Cloud^

Desconectado Desconectado

Mensajes: 64


La tierra es plana.


Ver Perfil
Re: [Tutorial] - Mysql || Php con clases || Ajax
« Respuesta #3 en: 29 Junio 2009, 11:09 »

El polimorfismo es el mismo se aplique donde se aplique y es la capacidad de los métodos de tomar otros valores diferentes dependiendo de donde se implementen.

En este caso y como es un ejemplo, no es necesario el uso de el polimorfismo de los objetos.

Si estuviéramos en el caso que tenemos que programar el driver de conexión a base de datos en modo factoría si que podríamos aplicar el polimorfismo de los objetos creando una interfaz o una clase abstracta donde definamos los métodos que luego se implementarán en distintos objetos y de diferentes formas para darnos acceso a diferentes bases de datos.

Yo creo que te refieres a los setters y getters que se suelen usar en java. En PHP se llaman métodos mágicos y se usan de esta manera:

public function __set($key,$val) {
  $this->$key=$val;
}

public function __get($key) {
  return $this->$key;
}

Pero esto no tiene nada que ver con el poliformismo de los objetos.

Bueno, para ser un ejemplo esta bastante bien aunque para mi gusto demasiado "aparatoso". Yo optaría primero a implementar el login de forma normal (con redirección y recarga de pagina) y después implementaría la funcionalidad ajax a parte y como complemento en el caso que sea viable para el cliente poder utilizarlo.


Un saludo,
En línea

Ahora resulta que imagino mi pasado
y llevo en esta clínica cuarenta años.
Nunca jamás he pisado la calle
y el electroshock ha sido mi padre
HardieVon

Desconectado Desconectado

Mensajes: 181


Programming HardCore


Ver Perfil WWW
Re: [Tutorial] - Mysql || Php con clases || Ajax
« Respuesta #4 en: 29 Junio 2009, 19:49 »

^Cloud^

estaba pensansdo, que opinas si los campos se extrajeran con un puntero, de una forma que si devuelve una consulta mas campos se puedan extraer desde $this->n_campo

haha siento deviarme pero pido opinion de una implementación que pienso hacer.

PD: esto ya es de sql

En línea

^Cloud^

Desconectado Desconectado

Mensajes: 64


La tierra es plana.


Ver Perfil
Re: [Tutorial] - Mysql || Php con clases || Ajax
« Respuesta #5 en: 30 Junio 2009, 12:41 »

En realidad los punteros no existen en PHP. Existen las referencias. Esto te va a permitir acceder al contenido de una variable con diferentes nombres. Se podría decir que son como enlaces de directorios.

function test_reference (&$var) {
  $var = ($var + 5);
}

$z = 10;
test_reference($z);

var_dump($z);


Este ejemplo va a devolver 15 como valor de $z. Al usar una variable por referencia lo que estamos haciendo es acceder al valor de $z y sumarle 5. De esta manera, aunque nuestra función no devuelva ningún valor estamos cambiando el valor de $z mediante el acceso a su referencia.

Todo esto está mejor explicado en la documentación de php y siempre es bueno que uno saque sus propias conclusiones.

Un saludo,
En línea

Ahora resulta que imagino mi pasado
y llevo en esta clínica cuarenta años.
Nunca jamás he pisado la calle
y el electroshock ha sido mi padre
[u]nsigned


Desconectado Desconectado

Mensajes: 2.373

Vue SSr


Ver Perfil WWW
Re: [Tutorial] - Mysql || Php con clases || Ajax
« Respuesta #6 en: 30 Junio 2009, 20:34 »

Muy buen tuto, me viene al pelo con lo que estoy por hacer.  ;D

Citar
* En este caso por ser un ejemplo no se usar el md5 (Es recomendable usarlo)

Creo que se te escapo una 'R' amigo...xD

Saludos
En línea

No hay atajo ante la duda, el misterio se hace aquí...
Se hace carne en cada uno, el misterio es existir!
Pazador

Desconectado Desconectado

Mensajes: 39



Ver Perfil
Re: [Tutorial] - Mysql || Php con clases || Ajax
« Respuesta #7 en: 20 Julio 2009, 02:51 »

quiero estudiar tu script pero no puedo descargarlo de rapidshare porque no tengo premium, me muestra esto:

Citar
Error

This file is neither allocated to a Premium Account, or a Collector's Account, and can therefore only be downloaded 10 times.

This limit is reached.

To download this file, the uploader either needs to transfer this file into his/her Collector's Account, or upload the file again. The file can later be moved to a Collector's Account. The uploader just needs to click the delete link of the file to get further information.

podrias subirlo a mediafire u otro servidor libre??  :-[
« Última modificación: 20 Julio 2009, 02:52 por Pazador » En línea

La vida es un juego
Mario Bross
дٳŦ٭
GNU/Linux Infrastructure Specialist
Colaborador
***
Desconectado Desconectado

Mensajes: 5.111


Ver Perfil WWW
Re: [Tutorial] - Mysql || Php con clases || Ajax
« Respuesta #8 en: 20 Julio 2009, 05:27 »

El md5 en php o mysql es md5($string) y no es reversible

Saludos.
En línea



Con sangre andaluza :)
lokotronX

Desconectado Desconectado

Mensajes: 5



Ver Perfil
Re: [Tutorial] - Login con ajax . Mysql || Php con clases || Ajax
« Respuesta #9 en: 7 Septiembre 2009, 21:17 »

Hola quisiera saber si este tuto le funciono a alguien, porque yo lo copie ya que no se puede descargar de rapishare, pero no me funciona, gracias
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Plugin JS para web modular con AJAX.
Desarrollo Web
WarGhost 0 1,378 Último mensaje 28 Mayo 2012, 07:04
por WarGhost
Necesito ayuda para hacer una tabla dinamica con ajax,mysql y php
PHP
juancarlossoma 3 3,765 Último mensaje 4 Octubre 2012, 19:32
por 4rkn63l
Ayuda con Ajax y Paginacion PHP
Desarrollo Web
000luis 0 993 Último mensaje 8 Junio 2013, 18:22
por 000luis
Alguien me ayuda con ajax!? Por favor!!
PHP
Djoaq 0 906 Último mensaje 17 Agosto 2013, 19:56
por Djoaq
Login php con clases y ajax
PHP
KiddKeo 1 333 Último mensaje 10 Junio 2019, 00:55
por mchojrin
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines