lunes, 8 de julio de 2013

Funciones de encriptacion de php y manejo de sesiones (algoritmo)

Funciones de encriptacion de php y manejo de sesiones (algoritmo)
 


Existen tres funciones crypt(),md5() y sha1():

Primero:  crytp(): 

Esta función se manda llamar con 2 parámetros la primera es la cadena que necesitamos encriptar (este parámetro es obligatorio) y el otro parámetro es llamado “semilla” (este es opcional, si se omite php pone uno aleatorio aunque codifica diferente cada que se manda llamar) que es tomado en cuenta para la codificación, por ejemplo:
$encriptada1 = crypt(“password”); //esta es sin base de codificación
$encriptada2=crypt(“password”,”2A”); //con base 2A de codificación
Este seria el contenido de cada una de las variables (el de encriptada1 varia en cada actualización) :
$encriptada1 = “$1$ew5.P20.$Rc7No.2LVt8RqWdvlVw2K.”
$encriptada2 =” 2AZ1KrbPqjOiA”


Segundo: md5():

Esta es una de las funciones mas utilizadas para encritptar contraseñas ya que siempre genera el mismo resultado para la misma cadena y es de una sola vía, es decir, una vez codificada una cadena no es posible volver a descodificar. Un ejemplo es el siguiente:
$encriptada1 = md5(“password”);
La variable $encriptada1 tendría después de esta asignación la siguiente cadena: “5f4dcc3b5aa765d61d8327deb882cf99”


Tercero: sha1():

Esta forma de encriptar cada vez desplaza mas y mas a la función md5. Ya que ofrece un nivel mayor en cuanto seguridad, y en php es realmente sencilla de utilizar, veamos como se manda llamar:
$encriptada4 =sha1(“password”);
La variable $encriptada4, tendría la siguiente cadena codificada: “5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8”
Como vez mandar  llamar estas funciones es muy sencillo. Y antes de terminar aclaro que no son las únicas formas de realizarlo, pero si son las utilizadas.

viernes, 5 de julio de 2013

Api

Qué es y para qué sirve una API?


En muchas ocasiones me ha tocado explicarle a un cliente qué es y para qué sirve un API, luego de advertir que su necesidad o requerimiento se soluciona con un servicio web, a través de esta tecnología.

API significa Interfaz de Programación de Aplicaciones, y su definición formal le da poca información útil a alguien que no entiende mucho de informática. Una API es una "llave de acceso" a funciones que nos permiten hacer uso de un servicio web provisto por un tercero, dentro de una aplicación web propia, de manera segura.

Ejemplos de APIs:

  • Google Maps a través de su acceso a "API" nos permite ponerle datos e información útil sobre sus mapas, y presentarlos con ciertas búsquedas o funciones personalizadas, desde nuestra propia aplicación
  • Paypal con su "API" nos permite hacer operaciones de pagos electrónicos usando nuestro propio sistema web, sin necesidad de acceder/operar en la web de Paypal
  • Algunos Booking Engines (centrales de reservas de hoteles y tickets aereos) abren sus aplicaciones a partir de APIs para permitir que terceros re-vendan desde sus propios sistemas
  • Twitter ha permitido el desarrollo de un gran número de sistemas alternativos y servicios web que operan a través de su API
  • UPS y DHL (operadoras logísticas internacionales) brindan acceso a sus sistemas desde APIs, para permitirles a los sitios de comercio electrónico poder calcular el costo de envío de los productos vendidos según ciertos parámetros
  • Facebook Connect cede a través del API ciertos datos para registrar automáticamente usuarios en otros sitios web, dándoles la posibilidad de registrarse y loguearse con sus propias cuentas de Facebook
API, entonces es una interfaz para dar un acceso limitado a la  base de datos de un servicio web, evitando que se conozca o acceda al propio código fuente de la apliación original.
Pero no solo las APIs permiten interacciones entre diferentes sitios web, sino que también sirven para permitir a ciertas aplicaciones, programas y widgets de escritorio, acceder a los datos o procesar transacciones en la aplicación madre.

Dónde vemos las APIs

En el mundo virtual actual es imposible no usar (incluso sin saberlo) algún servicio que usa APIs.
Por ejemplo, hace unos días invité a mis contactos de mi correo hotmail a mi red de linkedin, y para esto linkedin utiliza el API del servicio de correo electrónico de Windows Live para poder acceder a datos almacenados en su propia aplicación:

lunes, 17 de junio de 2013

Poo en PHP


Programación Orientada a Objetos en PHP


Clase constructor

Los constructores son funciones, o métodos, que se encargan de realizar las tareas de inicialización de los objetos al ser instanciados. Es decir, cuando se crean los objetos a partir de las clases, se llama a un constructor que se encarga de inicializar los atributos del objeto y realizar cualquier otra tarea de inicialización que sea necesaria.
No es obligatorio disponer de un constructor, pero resultan muy útiles y su uso es muy habitual. En el ejemplo de la caja, que comentábamos en el anterior artículo de programación orientada a objetos en PHP, lo normal sería inicializar las variables como color o las relacionadas con las dimensiones y, además, indicar que el contenido de la caja está vacío. Si no hay un constructor no se inicializan ninguno de los atributos de los objetos.
El constructor se define dentro de la propia clase, como si fuera otro método. El único detalle es que el constructor debe tener el mismo nombre que la clase. Atentos a PHP, que diferencia entre mayúsculas y minúsculas.
Para la clase Caja definida anteriormente, se podría declarar este constructor:
function Caja($alto=1,$ancho=1,$largo=1,$color="negro"){
    $this->alto=$alto;
    $this->ancho=$ancho;
    $this->largo=$largo;
    $this->color=$color;
    $this->contenido="";
}
En este constructor recibimos por parámetro todos los atributos que hay que definir en una caja.
Es muy útil definir unos valores por defecto en los parámetros que recibe el constructor, igualando el parámetro a un valor dentro de la declaración de parámetros de la función constructora, pues así, aunque se llame al constructor sin proporcionar parámetros, se inicializará con los valores por defecto que se hayan definido.
Es importante señalar que en los constructores no se tienen por qué recibir todos los valores para inicializar el objeto. Hay algunos valores que pueden inicializarse a vacío o a cualquier otro valor fijo, como en este caso el contenido de la caja, que inicialmente hemos supuesto que estará vacía.


void __construct ([ mixed $args [, $... ]] )
Por motivos de compatibilidad, si PHP 5 no puede encontrar una función __construct() para una determinada clase y la clase no heredó uno de una clase padre, buscará el viejo estilo de la función constructora, mediante el nombre de la clase. Efectivamente, esto significa que en el único caso en el que se tendría compatibilidad es si la clase tiene un método llamado __construct() que fuese utilizado para diferentes propósitos.
A diferencia con otros métodos, PHP no generará un mensaje de error a nivel de E_STRICT cuando __construct() es sobrescrito con diferentes parámetros que los métodos padre __construct() tienen.
A partir de PHP 5.3.3, los métodos con el mismo nombre que el último elemento de una clase en un nombre de espacios no serán más tratados como un constructor. Este cambio no afecta a clases sin espacio de nombres.
PHP 5 permite a los desarrolladores declarar métodos constructores para las clases. Aquellas que tengan un método constructor lo invocarán en cada nuevo objeto creado, lo que lo hace idóneo para cualquier inicialización que el objeto pueda necesitar antes de ser usado.
Nota: Constructores parent no son llamados implícitamente si la clase child define un constructor. Para ejecutar un constructor parent, se requiere invocar a parent::__construct() desde el constructor child. Si el child no define un constructor, entonces se puede heredar de la clase padre como un método de clase normal (si no fue declarada como privada).

Herencia

Qué es la Herencia en PHP y como implementarla
Como su nombre indica el concepto de herencia se aplica cuando creamos una clase, que va a heredar los métodos y atributos de una ya definida, entonces la clase que hemos creado es una subclase. 
Para que una clase sea subclase de otra ya creada deberemos usar la palabra reservada extendí en el siguiente código podremos ver como creamos una clase llamada SubClaseA que heredará los métodos y atributos de una clase definida con anterioridad llamada ClaseA.
Subclase de la clase A
class SubClaseA extendí ClaseA {
   var $atributo2;
   function operacion2()
                        {
                         }
            }
Tenemos la clase ClaseA que es definida de la siguiente forma:
            Class ClaseA {
            var $atributo1;
            function operacion1()
                        {
                        }
             }
Si creamos un objeto de la clase SubClaseA este heredará todos los métodos de la clase ClaseA, por lo tanto el siguiente código es válido:
$x = new SubClaseA();
            $x->operacion1();
            $x->atributo1 = 100;
            $x->operacion2();
            $x->atributo2 = 200;
Como podemos observar aunque declaremos un objeto de la clase SubClaseA, al ser una clase extendida de ClaseA podemos hacer uso de todos los métodos y atributos definidos en ClaseA como si estuvieran contenidos en SubClaseA.
Debemos tener en cuenta que la herencia solo trabaja en una dirección, la subclase o clase hija hereda las características de su clase padre o superclase, pero la clase padre no posee las características de la hija. Para el caso anterior ClaseA no tendría atributo2 ni metodo2();



Encapsulamiento

 

Este lenguaje de programación no es muy estricto, en POO es muy bueno tener en cuenta la ocultación de información (encapsulamiento). Muchos dicen que PHP rompe el encapsulamiento debido a que nos permite acceder a cualquier atributo de una clase directamente, pero en si hay una forma de hacer que no se pueda, para generar el encapsulamiento. Para ello tenemos el concepto de visibilidad en pH.

El concepto de visibilidad nos dice que hay tres palabras claves/reservadas: public, protected y private que anteponiéndolas a cualquier método o atributo/propiedad se podrán modificar o implementar su visibilidad, haciendo posible el encapsulamiento.

Public: Se podrá acceder a ella de cualquier forma, directamente o por métodos. Ejemplo:

class Persona{
    public $nombre;
    public $apellido;
    public $edad; // Es public por lo que se accede desde cualquier parte
public function __construct($nom, $ape, $e){
        $this->nombre = $nom;
 $this->apellido= $ape;
 $this->edad = $e;
    }
    public function imprimir(){
        return $this->edad;
}
}
$persona = new Persona('Pepito','Perez',24);
 echo $persona->edad;
 echo $persona->imprimir();

Como vemos es la misma clase persona, creamos el objeto y hacemos hecho a la edad directamente, lo que nos imprimirá un 24, después por medio del método imprimir() también nos pondrá en pantalla el mismo dato, la edad.

Protected: Si cambiamos el public por el protected, y dejamos lo mismo nos saldrá un fatal error, ya que con protected no nos dejara acceder a la propiedad a menos que sea por métodos de la misma clase, herencia o con el parent.
           
class Persona{
    public $nombre;
    public $apellido;
    protected $edad;
    public function __construct($nom, $ape, $e){
        $this->nombre = $nom;
 $this->apellido= $ape;
$this->edad = $e;
    }
    public function imprimir(){
        return $this->edad;
    }
}
$persona = new Persona('Pepito','Perez',24);
echo $persona->edad;
echo $persona->imprimir();

Si comentamos la línea donde imprimimos directamente la propiedad, nos imprimirá el resultado del método imprimir().

           
//echo $persona->edad;
echo $persona->imprimir();

Private: Al poner la propiedad edad en private solo nos dejara acceder desde la misma clase, entonces si hacemos el ejercicio anterior
           
class Persona{
    public $nombre;
    public $apellido;
    private $edad;
public function __construct($nom, $ape, $e){
        $this->nombre = $nom;
 $this->apellido= $ape;
 $this->edad = $e;
    }
    public function imprimir(){
        return $this->edad;
}
}
class trabajo extendí Persona{
    public $trabajos;
    public $pruebas;
    public function trabajar($Job){
$this->taboos = $job;
    }
    public function imprimir(){
retorno 'Mi nombre es '.$this->nombre.' '.$this->apellido.' y tengo '.
 $this->edad.' Años y trabajo en '.$this->trabajos;
    }
 }
$persona = new Persona('Pepito','Perez',24);
echo $persona->imprimir();

Si corremos pH con el siguiente código, no nos dejara acceder a la propiedad edad de la clase Persona desde trabajo porque es privada, si fuera protected si nos dejaría pero solo por métodos o parent.

Polimorfismo

Qué es el polimorfismo y como implementarlo
Cualquier lenguaje de programación orientado a objetos debe soportar el polimorfismo, esto significa que clases diferentes tendrán un comportamiento distinto para la misma operación. Esto lo veremos más claro con el siguiente ejemplo.
Supongamos que tenemos dos clases distintas coche y ciclomotor. Ambas tienen sus propios métodos de movimiento, éstos tienen diferentes comportamientos, pero su nombre es el mismo.
class coche {
                        function avanza() {
                        }
                        function para() {
                        }
                        function girar derecha() {
                        }
             }
Clases ciclomotor {
                        función avanza() {
                        }
                        function para() {
                        }
                        function girar_derecha() {
                        }
             }
Como podemos observar, ambas clases tienen los mismos métodos, supongamos ahora que tenemos otra clase que controla el movimiento de todos los vehículos, es aquí donde entra en juego el polimorfismo, que dependiendo del objeto que tratemos actuará de una forma u otra el método al que llamamos.
clases movimiento {
                        function mover_adelante($obj) {
                        $obj->avanza();
                        }
            }
Supongamos que queremos mover cualquier vehículo hacia adelante entonces haríamos:
$obj_coche = new coche();
            $obj_ciclomotor = new ciclomotor(); $obj_movimiento = new movimiento();
            //con esta sentencia el coche avanzaría hacia adelante.
            $obj_movimiento-> mover_adelante($obj_coche);
            //con esta sentencia el ciclomotor avanzaría hacia adelante.
            $obj_movimiento-> mover_adelante($obj_ciclomotor);
Como podemos ver el mismo método del objeto movimiento actúa de dos formas diferentes dependiendo del objeto que le pasamos como parámetro.



miércoles, 12 de junio de 2013

Formularios

Formularios en Javascript

¿Qué es un formulario?
La programación de aplicaciones que contienen formularios web siempre ha sido una de las tareas fundamentales de JavaScript. De hecho, una de las principales razones por las que se inventó el lenguaje de programación JavaScript fue la necesidad de validar los datos de los formularios directamente en el navegador del usuario. De esta forma, se evitaba recargar la página cuando el usuario cometía errores al rellenar los formularios.
No obstante, la aparición de las aplicaciones AJAX ha relevado al tratamiento de formularios como la principal actividad de JavaScript. Ahora, el principal uso de JavaScript es el de las comunicaciones asíncronas con los servidores y el de la manipulación dinámica de las aplicaciones. De todas formas, el manejo de los formularios sigue siendo un requerimiento imprescindible para cualquier programador de JavaScript.

¿Cómo se constituye un formulario? (Propiedades y Funciones)
JavaScript dispone de numerosas propiedades y funciones que facilitan la programación de aplicaciones que manejan formularios. En primer lugar, cuando se carga una página web, el navegador crea automáticamente un array llamado forms y que contiene la referencia a todos los formularios de la página.
Document
Para acceder al array forms, se utiliza el objeto document, por lo que document.forms es el array que contiene todos los formularios de la página. Como se trata de un array, el acceso a cada formulario se realiza con la misma sintaxis de los arrays. La siguiente instrucción accede al primer formulario de la página:
document.forms[0];
Elements
Además del array de formularios, el navegador crea automáticamente un array llamado elementspor cada uno de los formularios de la página. Cada array elements contiene la referencia a todos los elementos (cuadros de texto, botones, listas desplegables, etc.) de ese formulario. Utilizando la sintaxis de los arrays, la siguiente instrucción obtiene el primer elemento del primer formulario de la página:
document.forms[0].elements[0];
Document.forms
En un entorno tan cambiante como el diseño web, es muy difícil confiar en que el orden de los formularios se mantenga estable en una página web. Por este motivo, siempre debería evitarse el acceso a los formularios de una página mediante el array document.forms.
Name y Id
Una forma de evitar los problemas del método anterior consiste en acceder a los formularios de una página a través de su nombre (atributo name) o a través de su atributo id. El objeto documentpermite acceder directamente a cualquier formulario mediante su atributo name:
var formularioPrincipal = document.formulario;
var formularioSecundario = document.otro_formulario;
 <form name="formulario" >
  ...
</form>
 <form name="otro_formulario" >
  ...
</form>

Name
Accediendo de esta forma a los formularios de la página, el script funciona correctamente aunque se reordenen los formularios o se añadan nuevos formularios a la página. Los elementos de los formularios también se pueden acceder directamente mediante su atributo name:
var formularioPrincipal = document.formulario;
var primerElemento = document.formulario.elemento;

<form name="formulario">
  <input type="text" name="elemento" />
</form>
Get
Obviamente, también se puede acceder a los formularios y a sus elementos utilizando las funciones DOM de acceso directo a los nodos. El siguiente ejemplo utiliza la habitual funcióndocument.getElementById() para acceder de forma directa a un formulario y a uno de sus elementos:
var formularioPrincipal = document.getElementById("formulario");
var primerElemento = document.getElementById("elemento");

<form name="formulario" id="formulario" >
  <input type="text" name="elemento" id="elemento" />
</form>
Métodos para hacer referencia
Independientemente del método utilizado para obtener la referencia a un elemento de formulario, cada elemento dispone de las siguientes propiedades útiles para el desarrollo de las aplicaciones:
·         type: indica el tipo de elemento que se trata. Para los elementos de tipo <input> (text,buttoncheckbox, etc.) coincide con el valor de su atributo type. Para las listas desplegables normales (elemento <select>) su valor es select-one, lo que permite diferenciarlas de las listas que permiten seleccionar varios elementos a la vez y cuyo tipo es select-multiple. Por último, en los elementos de tipo <textarea>, el valor de type es textarea.
·         form: es una referencia directa al formulario al que pertenece el elemento. Así, para acceder al formulario de un elemento, se puede utilizardocument.getElementById("id_del_elemento").form
·         name: obtiene el valor del atributo name de XHTML. Solamente se puede leer su valor, por lo que no se puede modificar.
·         value: permite leer y modificar el valor del atributo value de XHTML. Para los campos de texto (<input type="text"> y <textarea>) obtiene el texto que ha escrito el usuario. Para los botones obtiene el texto que se muestra en el botón. Para los elementos checkbox y radiobuttonno es muy útil, como se verá más adelante
Eventos
Los eventos más utilizados en el manejo de los formularios son los siguientes:
·         onclick: evento que se produce cuando se pincha con el ratón sobre un elemento. Normalmente se utiliza con cualquiera de los tipos de botones que permite definir XHTML (<input type="button"><input type="submit"><input type="image">).
·         onchange: evento que se produce cuando el usuario cambia el valor de un elemento de texto (<input type="text"> o <textarea>). También se produce cuando el usuario selecciona una opción en una lista desplegable (<select>). Sin embargo, el evento sólo se produce si después de realizar el cambio, el usuario pasa al siguiente campo del formulario, lo que técnicamente se conoce como que "el otro campo de formulario ha perdido el foco".
·         onfocus: evento que se produce cuando el usuario selecciona un elemento del formulario.
·         onblur: evento complementario de onfocus, ya que se produce cuando el usuario hadeseleccionado un elemento por haber seleccionado otro elemento del formulario. Técnicamente, se dice que el elemento anterior "ha perdido el foco".

 Ejemplos de Formularios

1- Digitar valores
<!DOCTYPE>
<HTML LANG="ES">
<HEAD>
<META CHARSET="UTF-8" />
<TITLE> Digitar valores_Formulario </TITLE>
</HEAD>
<BODY bgcolor="Lavender">

<FORM name="frm.datos">

<br/>
<br/>
<p>
Nombre:&nbsp &nbsp &nbsp &nbsp <input type="text" name="nombre" size="40" id="nombre" autofocus required>
<br/>
</FORM>

</BODY>

</HMTL>



2- Diitar cadenas de texto
<!DOCTYPE>
<HTML LANG="ES">
<HEAD>
<META CHARSET="UTF-8" />
<TITLE> Cadenas de texto_Formulario </TITLE>
</HEAD>
<BODY bgcolor="Lavender">

<FORM name="frm.datos">

<h1>Cadenas de texto</h1>
<TEXTAREA name="txtAreaTexto" cols="45" rows="3" id="txtAreaTexto" placeholder="Aqu&iacute; anota tus comentarios"></TEXTAREA>
<br>

</FORM>

</BODY>

</HMTL>




3- Cajas de seleccion
<!DOCTYPE>
<HTML LANG="ES">
<HEAD>
<META CHARSET="UTF-8" />
<TITLE> Formulario </TITLE>
</HEAD>
<BODY bgcolor="Lavender">

<FORM name="frm.datos">

<h1>Cajas de seleccion</h1>
<br>
<input type="checkbox" name="GrupoCasillas" value="Casilla1" id="chkBox1"/>Casilla1
<input type="checkbox" name="GrupoCasillas" value="Casilla2" id="chkBox2"/>Casilla2
<input type="checkbox" name="GrupoCasillas" value="Casilla3" id="chkBox3"/>Casilla3
<br>
</FORM>


</BODY>

</HMTL>




4- Botones de opciones
<!DOCTYPE>
<HTML LANG="ES">
<HEAD>
<META CHARSET="UTF-8" />
<TITLE> Formulario </TITLE>
</HEAD>
<BODY bgcolor="Lavender">

<FORM name="frm.datos">

<h1>Botones de opciones</h1>
<br>
Sexo:
Femenino: <input type="radio" name="radio" value="Casilla1" checked=="true"/>
Masculino: <input type="radio" name="radio" value="Casilla2" />
</FORM>

</BODY>
</HMTL>



5- Cajas de seleccion de elementos
<!DOCTYPE>
<HTML LANG="ES">
<HEAD>
<META CHARSET="UTF-8" />
<TITLE>Caja de seleccion_ Formulario </TITLE>
</HEAD>
<BODY bgcolor="Lavender">

<FORM name="frm.datos">

<h1>Caja de seleccion de elementos</h1>
<br>
<select name="meses" id="mes">
<option value="mes 1">Enero</option>
<option value="mes 2">Febrero</option>
<option value="mes 3">Marzo</option>
<option value="mes 4">Abril</option>
<option value="mes 5">Mayo</option>
<option value="mes 6">Junio</option>
<option value="mes 7">Julio</option>
<option value="mes 8">Agosto</option>
<option value="mes 9">Septiembre</option>
<option value="mes 10">Octubre</option>
<option value="mes 11">Noviembre</option>
<option value="mes 12">Diciembre</option>
</select>
</FORM>

</BODY>

</HMTL>




6- Cajas para seleccionar archivos
<!DOCTYPE>
<HTML LANG="ES">
<HEAD>
<META CHARSET="UTF-8" />
<TITLE>Caja de seleccion_ Formulario </TITLE>
</HEAD>
<BODY bgcolor="Lavender">

<FORM name="frm.datos">

<h1>Caja de seleccion de archivo</h1>
<br/>
Selecciona archivo: <input type="file" name="txtArchivo" id="txtArchivo"/>
</FORM>

</BODY>

</HMTL>




7- Contorno de información 
<!DOCTYPE>
<HTML LANG="ES">
<HEAD>
<META CHARSET="UTF-8" />
<TITLE>Caja de seleccion_ Formulario </TITLE>
</HEAD>
<BODY bgcolor="Lavender">
<fieldset style="border-radius:10px; text-shadow:grey 1px 1px;">
<legend>Marco en formulario </legend>
<FORM name="frm.datos">


</FORM>
</BODY>

</HMTL>



Ejemplo de password

Código


<!DOCTYPE>

<HTML LANG="ES">

<HEAD>

<META CHARSET="UTF-8" />

<TITLE> Formulario </TITLE>

<script type="text/javascript" src="P2A3_validacion.js"></script>

</HEAD>

<BODY bgcolor="Lavender">

<fieldset style="border-radius:10px; text-shadow:grey 1px 1px;">

<legend>Datos Personales </legend>

<FORM name="frm1" memethod="POST"onSubmit="return validarPasswd()"action="enviar.php">



<br/>

<br/>

<p>

Usuario:&nbsp &nbsp &nbsp &nbsp <input type="text" name="usuario" size="40" id="txtuser" size="30" autofocus required><br/><br/>



Password:&nbsp &nbsp <input type="password" name="passwd" id="pswd" size="20"><br/><br/>

Validar password:&nbsp &nbsp <input type="password" name="validarPassword" id="pswd2" size="20"><br/><br/>





<input type="submit" value="enviar" >







</FORM>





</BODY>

</HMTL>


Pantalla 


Datos Personales


Usuario:

Password:

Validar password: