martes, 7 de octubre de 2014

Sistemas de Usuarios en PHP y MYSQL

1.- Creando la tabla en MySQL

Bien, necesitamos una tabla con los datos de nuestros usuarios, así que la vamos a crear. Ésta tabla contiene los siguientes campos:


Código

FIELD     | Type        | KEY | Extra        
----------+-------------+-----+----------------
 id        | tinyint(4)  | PRI | AUTO_INCREMENT 
 nombre    | text        |     |                
 apellidos | text        |     |                
 login     | varchar(40) |     |                
 password  | varchar(20) |     |                
 email     | text        |     |                 
 

Bien, pues la sentencia SQL que utilizaremos será algo así:


Código
CREATE TABLE usuarios (
id TINYINT(4) AUTO_INCREMENT,
nombre TEXT,
apellidos TEXT,
login VARCHAR(40),
password VARCHAR(20),
email TEXT,
UNIQUE (id) )

2.-Creando un script para introducir usuarios
Necesitamos el formulario, con los campos siguientes:

Código
<form action="crea_user.php" method="POST">
Login: <input type="text" name="login"><br>
Password: <input type="password" name="pass1"><br>
Repite Password: <input type="password" name="pass2"><br>
Nombre: <input type="text" name="nombre"><br>
Apellidos: <input type="text" name="apellidos"><br>
E-mail: <input type="text" name="email"><br>
<input type="submit" name="Crear">
</form>

Y también el script crea_user.php, que sería algo así:
crea_user.php


Código
<?
$server="localhost"; /* Nuestro server mysql */
$database="bd"; /* Nuestra base de datos */
$dbpass="password"; /*Nuestro password mysql */
$dbuser="user"; /* Nuestro user mysql */
/* Primero comprovamos que no existe un usuario con el mismo login ya registrado */
 
$query="SELECT * FROM usuarios WHERE login='$login'";
$link=mysql_connect($server,$dbuser,$dbpass);
$result=mysql_db_query($database,$query,$link);
if(mysql_num_rows($result)){
echo "El usuario ya existe en la BD";
} else {
mysql_free_result($result);
/* Ahora comprovamos que los dos pass coinciden */
if($pass1!=$pass2) {
echo "Los passwords deben coincidir<br>";
echo 'Clica <a href="form.php">aquí</a> para volver al formulario';
} else {
$pass1=crypt($pass2, "semilla"); 
 
/* Encripatmos el password, con la clave "semilla" que debeis sustituirpor la que mas os guste. Hay otros metodos de encriptacion, mirad en php.net si quereis conocerlos. */
 
$query="INSERT INTO usuarios (login, nombre, apellidos, password, email) VALUES ('$login','$nombre','$apellidos','$pass1','$email')";
 
$result=mysql_db_query($database,$query,$link);
if(mysql_affected_rows($link)){
echo "Usuario introducido correctamente";
} else {
echo "Error introduciendo el usuario";
} /* Cierre del else */
} /* Cierre del else que corresponde a if(mysql_affected_rows.....) */
} /* Cierre del else que corresponde a if(mysql_num_rows...) */
?>

Pues como veis, este script es muy simple. Si no lo entendeis, es porque no conoceis PHP o su método de acceso a bases de datos mysql. Leeros el prólogo antes de continuar ;-) Aquí deberíamos comprobar que quien está creando los usuarios está identificado (en caso de que el registro no sea público).

3.- Creando la página y scripts de login
Ésta parte consiste en dos páginas, la de login, y el script que comprueba los datos. Aquí va la página de login:

login.php

Código
<?
session_start();
if(isset($SESSION)){
header("location: user.php"); /* Si ha iniciado la sesion, vamos a user.php */
} else { 
/* Cerramos la parte de codigo PHP porque vamos a escribir bastante HTML y nos será mas cómodo así que metiendo echo's */
?>
<html><head><title>Necesita identificación! </title></head>
<body>
<center><h1>Identificate! :D </h1></center>
<form action="comprueba.php" method="POST">
Login: <input type="text" name="login"><br>
Password: <input type="password" name="pass"><br>
<input type="submit" value="Entrar">
</form>
</body></html>
<?
} /* Y cerramos el else */ 
?>
 

Y el que sigue es el script de comprobación, que comprobará los datos y si son correctos nos manda a user.php tras iniciar la sesión. Si no, nos dará un mensajito avisandonos de que no hemos dado el login correcto. Primero os explicaré las funciones que usaremos.

session_start() se debe usar al principio de cada script en el que vayamos a hacer uso de variables de sesión.

session_register("nombre_variable") se usará para crear una variable de sesión, que luego podremos usar con
el nombre $nombre_variable. Lo que haremos aquí será primero inicializar las variables como un array, y luego registrarlas en la sesión.

Ahora el código:

comprueba.php

Código
<?
session_start();
$server="localhost"; /* Nuestro server mysql */
$database="bd"; /* Nuestra base de datos */
$dbpass="password"; /*Nuestro password mysql */
$dbuser="user"; /* Nuestro user mysql */
$query="SELECT * FROM usuarios WHERE login='$login'";
$link=mysql_connect($server,$dbuser,$dbpass);
$result=mysql_db_query($database,$query,$link);
if(mysql_num_rows($result)==0){
echo "No existe el login introducido";
} else {
$array=mysql_fetch_array($result);
if($array["password"]==crypt($pass,"semilla") ){
/* Comprobamos que el password encriptado en la BD coincide con el password que nos han dado al encriptarlo. Recuerda usar la misma semilla para encriptar los dos passwords. */
$SESSION["login"]=$login;
$SESSION["nombre"]=$array["nombre"];
$SESSION["apellidos"]=$array["apellidos"];
session_register("SESSION");
header("location: user.php");
 
} else {
echo "Password incorrecto!";
} /* Cerramos este ultimo else */
} /* Cerramos el else que corresponde a la comprobación de que el login existe */
 
?>

4.- Creación de la página de los usuarios
Bien, ésta página la voy a dejar bastante vacía, solo va a comprobar si el usuario ya se ha identificado. Si es así, le daremos la bienvenida simplemente, y pondremos el botón para logout. Si no, le mandaremos a login.php. Ahí va el código:
user.php

Código
<?
session_start();
if(!isset($SESSION)){
header("location: login.php");
} else {
echo "<html><body>";
echo "Bienvenido ";
echo $SESSION["nombre"];
echo $SESSION["apellidos"]." ";
echo "<br>Has entrado con el nombre de usuario ";
echo $SESSION["login"];
echo "<br>Para cerrar la sesión, pulsa: <a href='logout.php'>logout</a>";
echo "</body></html>";
}
?>
 

5.- Cerrando la sesión
En el script logout.php simplemente cerraremos la sesión y mostraremos un mensaje indicando que ha
sido cerrada correctamente. Antes de ésto, comprovaremos que ha sido iniciada la sesión. Si no lo ha sido, mandaremos al usuario a login.php. Aquí usaremos dos funciones nuevas:

session_unset() destruye todas las variables de sesión que hemos creado. Debemos llamarla antes de llamar a
session_destroy.
session_destroy() destruye la sesión en sí, pero no destruye las variables.

Ahora sí, aquí os dejo el código:

Código
<?
session_start();
if(!isset($SESSION)){
header("location: login.php");
} else {
session_unset();
session_destroy();
echo "Las variables de sesión han sido eliminadas, y la sesión se ha dado por finalizada correctamente ;-)";
}
?>

Simple verdad? Pues ya tenemos nuestro sistema de usuarios completo!

ALERTA!: En éstos scripts hay algunas cosillas que tendremos que mejorar.
Por ejemplo, hay que mejorar el manejo de errores de la base de datos. Además, deberíamos incluir redirecciones hacia login.php tras mostrar los mensajes de logout, de error al identificarse (tanto de login incorrecto como de password incorrecto), que lo podríamos hacer con un refresh simple en HTML.

Además de todo ésto, tendríamos que crear un filtro para los datos introducidos en el login para evitar la inyección SQL en nuestras páginas. Para el password no sería necesario, puesto que hemos encriptado la entrada del usuario antes de pasarsela al MySQL, pero tampoco pasaría nada si, una vez implementado el filtro, se lo pasamos al password introducido por el usuario.

miércoles, 1 de octubre de 2014

Inserción de Datos con Ajax y POO con PHP

Tenemos la tabla Empleado. También disponemos de la Clase DBManager, esta Clase la vamos a usar
para verificar y realizar la conexión a la Base de Datos.
La Clase cEmpleado se encuentra en el archivo cEmpleado.php, a esta Clase vamos agregarle un método para que guarde un nuevo registro en la tabla Empleado. A este método lo llamaremos crear() el cual tendrá como parámetros de entrada los datos que se requiere del empleado: Nombre, Departamento, Sueldo. Hay que tener en cuenta que el campo idempleado incrementa automáticamente, por ello no lo incluimos dentro de los parámetros.
Veamos como quedaría este método en el archivo cEmpleado.php:

<?php 
 include_once("DBManager.php");
 
 //implementamos la clase empleado
 class cEmpleado{
 
  //constructor 
  function cEmpleado(){
  }
 
  // consulta los empledos de la BD
  function consultar(){
   //creamos el objeto $con a partir de la clase DBManager
   $con = new DBManager;
   //usamos el metodo conectar para realizar la conexion
   if($con->conectar()==true){
    $query = "select * from empleados order by nombres";
    $result = @mysql_query($query);
    if (!$result)
     return false;
    else
     return $result;
   }
  }
 
  //* inserta un nuevo empleado en la base de datos *//
  function crear($nom,$dep,$suel){
   $con = new DBManager;
   if($con->conectar()==true){
    $query = "INSERT INTO empleados (nombres, departamento, sueldo) 
    VALUES ('$nom','$dep',$suel)";
    $result = mysql_query($query);
    if (!$result)
     return false;
    else
     return true;
   }
  }
 
 }
?>

Ya tenemos la Clase cEmpleado con su nuevo método listo para ser usado en cualquier momento. Ahora continuando con el desarrollo vamos a listar todos los empleados de la tabla Empleados. A este archivo lo llamamos consulta.php y va usar las clase cEmpleado. Esta vez vamos a listar los resultados en una tabla HTML. Veamos:

<?php
 include_once("cEmpleado.php");
 
 //creamos el objeto $objempleados de la clase cEmpleado
 $objempleados=new cEmpleado;
 
 //la variable $lista consulta todos los empleados
 $lista= $objempleados->consultar();
?>
<table style="border:1px solid #FF0000; color:#000099;width:400px;">
<tr style="background:#99CCCC;">
<td>Nombres</td>
<td>Departamento</td>
<td>Sueldo</td>
</tr>
<?php
 while($row = mysql_fetch_array($lista)){
  echo "<tr>";
  echo "<td>".$row['nombres']."</td>";
  echo "<td>".$row['departamento']."</td>";
  echo "<td>".$row['sueldo']."</td>";
  echo "</tr>";
 }
?>
</table>

Veamos ahora, el proceso de guardado o inserción de los datos en la tabla Empleado, vamos a llamar a este archivo registro.php y notemos que se crea un objeto de la clase cEmpleado y usamos el método crear() donde especificamos los parámetros requeridos. Al final hace un include al archivo consulta.php para listar los nuevos datos.

<?php
 include_once("cEmpleado.php");
 
 //variables POST
 $nom=$_POST['nombres'];
 $dep=$_POST['departamento'];
 $suel=$_POST['sueldo'];
 sleep(2);
 
 //creamos el objeto $objempleados
 //y usamos su método crear
 $objempleados=new cEmpleado;
 if ($objempleados->crear($nom,$dep,$suel)==true){
  echo "Registro grabado correctamente";
 }else{
  echo "Error de grabacion";
 }
 include('consulta.php');
?>

Ahora las funciones en JavaScript, creamos 3 funciones: 1) para crear el objeto XMLHttpRequest, 2) para enviar y recibir los datos del empleado para que sean guardados en la tabla Empleado y 3) para limpiar las cajas de texto del formulario. El archivo ajax.js va así:

function objetoAjax(){
 var xmlhttp=false;
 try {
  xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
 } catch (e) {
  try {
   xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  } catch (E) {
   xmlhttp = false;
  }
 }
 if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
  xmlhttp = new XMLHttpRequest();
 }
 return xmlhttp;
}
 
function enviarDatosEmpleado(){
 //donde se mostrará lo resultados
 divResultado = document.getElementById('resultado');
 divResultado.innerHTML= '<img src="anim.gif">';
 
 //valores de las cajas de texto 
 nom=document.nuevo_empleado.nombres.value;
 dep=document.nuevo_empleado.departamento.value;
 suel=document.nuevo_empleado.sueldo.value;
 
 //instanciamos el objetoAjax
 ajax=objetoAjax();
 
 //uso del medoto POST 
 //archivo que realizará la operacion
 //registro.php
 ajax.open("POST", "registro.php",true);
 ajax.onreadystatechange=function() {
  if (ajax.readyState==4) {
   //mostrar resultados en esta capa
   divResultado.innerHTML = ajax.responseText
 
   //llamar a funcion para limpiar los inputs
   LimpiarCampos();
  }
 }
 ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
 
 //enviando los valores
 ajax.send("nombres="+nom+"&departamento="+dep+"&sueldo="+suel)
}
 
//limpiando las cajas de texto
function LimpiarCampos(){
 document.nuevo_empleado.nombres.value="";
 document.nuevo_empleado.departamento.value="";
 document.nuevo_empleado.sueldo.value="";
 document.nuevo_empleado.nombres.focus();
}

Finalmente, el archivo index.php que contendrá un formulario con caja de texto para escribir los datos del empleado y una lista de los empleados registrado. Una vez que pulsamos el botón Grabar, los datos se guardarán en la tabla Empleado y la lista se actualizará automaticamente. Dentro de las etiquetas <head></head> hacemos referencia al archivo ajax.js, en el atributo onsubmit de la etiqueta <form> especificamos la función enviarDatosEmpleado() y en la dentro de las etiquetas <div id="resultado"></div> en la parte final hacemos un include al archivo consulta.php. El archivo quedaría así:

<html>
<head>
<title>Registro con AJAX</title>
<script language="JavaScript" type="text/javascript" src="ajax.js"></script>
</head>
<body>
<form name="nuevo_empleado" action="" onSubmit="enviarDatosEmpleado(); return false">
<h2>Nuevo empleado</h2>
<p>Nombres 
<label>
<input name="nombres" type="text" />
</label>
</p>
<p>Departamento 
<label>
<select name="departamento">
<option value="Informatica">Informatica</option>
<option value="Contabilidad">Contabilidad</option>
<option value="Administracion">Administracion</option>
<option value="Logistica">Logistica</option>
</select>
</label>
</p>
<p>Sueldo <strong>S/.</strong>
<label>
<input name="sueldo" type="text" />
</label>
</p>
<p>
<label>
<input type="submit" name="Submit" value="Grabar" />
</label>
</p>
</form>
<div id="resultado"><?php include('consulta.php');?></div>
</body>
</html>

Se habrá dado cuenta que hemos incluido un método a la clase cEmpleado y ello sin alterar el método anterior. Incluso hemos usado el método consultar() que ya estaba allí. Esto nos hace ver que si programamos Orientando a Objetos, nuestro código se hace flexible y reutilizable.

martes, 30 de septiembre de 2014

Adicionar Filas a Tablas Dinamicamente mediante Ajax

Veamos como quedaría nuestra función PHP agregaFila()

function agregarFila($formulario){
    $respuesta = new xajaxResponse();
 extract($formulario);
 $id_campos = $cant_campos = $num_campos+1;
 $str_html_td1 = "$txtNombre" ;
    $str_html_td2 = "$txtEdad";
    $str_html_td3 = "$txtDireccion";
    $str_html_td4 = "$selSexo";
    $str_html_td5 = "$selEstCivil";
    $str_html_td6 = '<img src="images/delete.png" width="16" height="16" alt="Eliminar" 
onclick="if(confirm(\'Realmente desea eliminar este detalle?\')){xajax_eliminarFila('. $id_campos .', proyecto.cant_campos.value);}"/>';
 
 if($num_campos == 0){ // creamos un encabezado de lo contrario solo agragamos la fila
  $respuesta->addCreate("tbDetalle", "tr", "rowDetalle_0");
        $respuesta->addCreate("rowDetalle_0", "th", "tdDetalle_01");    //creamos los campos
        $respuesta->addCreate("rowDetalle_0", "th", "tdDetalle_02");
        $respuesta->addCreate("rowDetalle_0", "th", "tdDetalle_03");
        $respuesta->addCreate("rowDetalle_0", "th", "tdDetalle_04");
        $respuesta->addCreate("rowDetalle_0", "th", "tdDetalle_05");
        $respuesta->addCreate("rowDetalle_0", "th", "tdDetalle_06");
 
        $respuesta->addAssign("tdDetalle_01", "innerHTML", "Nombre");   //asignamos el contenido
        $respuesta->addAssign("tdDetalle_02", "innerHTML", "Edad");
        $respuesta->addAssign("tdDetalle_03", "innerHTML", "Direccion");
        $respuesta->addAssign("tdDetalle_04", "innerHTML", "Sexo");
        $respuesta->addAssign("tdDetalle_05", "innerHTML", "Estado Civil");
        $respuesta->addAssign("tdDetalle_06", "innerHTML", "Eliminar");
 }
    $idRow = "rowDetalle_$id_campos";
    $idTd = "tdDetalle_$id_campos";
 $respuesta->addCreate("tbDetalle", "tr", $idRow);
    $respuesta->addCreate($idRow, "td", $idTd."1");     //creamos los campos
    $respuesta->addCreate($idRow, "td", $idTd."2");
    $respuesta->addCreate($idRow, "td", $idTd."3");
    $respuesta->addCreate($idRow, "td", $idTd."4");
    $respuesta->addCreate($idRow, "td", $idTd."5");
    $respuesta->addCreate($idRow, "td", $idTd."6");
/*
 *     Esta parte podria estar dentro de algun ciclo iterativo  */
 
    $respuesta->addAssign($idTd."1", "innerHTML", $str_html_td1);   //asignamos el contenido
    $respuesta->addAssign($idTd."2", "innerHTML", $str_html_td2);
    $respuesta->addAssign($idTd."3", "innerHTML", $str_html_td3);
    $respuesta->addAssign($idTd."4", "innerHTML", $str_html_td4);
    $respuesta->addAssign($idTd."5", "innerHTML", $str_html_td5);
    $respuesta->addAssign($idTd."6", "innerHTML", $str_html_td6);
 
/*  aumentamos el contador de campos  */
 
 $respuesta->addAssign("num_campos","value", $id_campos);
 $respuesta->addAssign("cant_campos" ,"value", $id_campos);
 return $respuesta;
}
El HTML para esta aplicacion:
<form name="proyecto" id="proyecto" action="" method="post">
<input type="hidden" id="num_campos" name="num_campos" value="0" />
<input type="hidden" id="cant_campos" name="cant_campos" value="0" />
<div id="cont" class="container">
<fieldset>
 <legend>El formulario</legend>
<div class="top">
 <label class="label" for="txtNombre">Nombre:</label>
<div class="div_texbox">
<input type="text" id="txtNombre" name="txtNombre" value="" class="textbox" /></div>
 
        <label class="label" for="txtEdad">Edad:</label>
<div class="div_texbox">
<input type="text" id="txtEdad" name="txtEdad" value="" class="textbox txtUser" /></div>
 
        <label class="label" for="txtDireccion">Direccion:</label>
<div class="div_texbox">
<input type="text" id="txtDireccion" name="txtDireccion" value="" class="textbox txtCmt" /></div>
 
        <label class="label" for="selSexo">Sexo:</label>
<div class="div_texbox">
<select id="selSexo" name="selSexo" class="textbox txtFec">
                <option value="-">Seleccione</option>
                <option value="Hombre">Hombre</option>
                <option value="Mujer">Mujer</option>
            </select>
</div>
 
        <label class="label" for="selEstCivil">Estado Civil:</label>
<div class="div_texbox">
<select id="selEstCivil" name="selEstCivil" class="textbox txtFec">
                <option value="-">Seleccione</option>
                <option value="Soltero">Soltero</option>
                <option value="Casado">Casado</option>
                <option value="Viudo">Viudo</option>
            </select>
</div>
</div>
 
</fieldset>
<div class="button_div">
<input type="reset" id="btnCancel" name="btnCancel" value="Cancelar" class="buttons_CANCEL" onclick="xajax_cancelar();" />
<input type="button" id="btnAgregar" name="btnAgregar" value="Agregar Persona" class="buttons_aplicar" onclick="xajax_agregarFila(xajax.getFormValues('proyecto'));" />
</div>
 
<fieldset class="fieldset">
    <legend class="legend">
        Detalle de Personas
    </legend>
<div class="clear"></div>
<div id="form3" class="form-horiz">
<table width="100%" id="tblDetalle" class="listado">
<tbody id="tbDetalle"></tbody>
</table>
</div>
 
</fieldset>
</div>
</form>
Y como sabroso entremes, le traemos… la función que elimina las filas
agregadas por la función anterior.
function eliminarFila($id_campo, $cant_campos){
 $respuesta = new xajaxResponse();
 $respuesta->addRemove("rowDetalle_$id_campo"); //borro el detalle que indica el parametro id_campo
 -- $cant_campos; //Resto uno al numero de campos y si es cero borro todo
 if($cant_campos == 0){
  $respuesta->addRemove("rowDetalle_0");
  $respuesta->addAssign("num_campos", "value", "0"); //dejo en cero la cantidad de campos para seguir agregando si asi lo desea el usuario
  $respuesta->addAssign("cant_campos", "value", "0");
 }
    $respuesta->addAssign("cant_campos", "value", $cant_campos);
 return $respuesta;
}

lunes, 29 de septiembre de 2014

Importar datos de archivo CSV (Excel) a Mysql mediante PHP

<?php 
//require("config.php") se refiere al archivo de conexion a la BD
require("config.php"); 
$row = 0

$fp fopen ("prueba.csv","r"); 
//el valor mil indica la cantidad de bytes del archivo
//si el archivo es un poco grande es mejor dejarlo en 0
//en algunos casos el ";" no es aceptado usa ","
while (
$data fgetcsv ($fp1000";")) 

$num count ($data); 
print 
" <br>"
$row++; 
echo 
"$row- ".$data[0].$data[1].$data[2].$data[3].$data[4].$data[5]; 
$insertar="INSERT INTO tutabla () VALUES ('$data[0]','$data[5]')"
mysql_query($insertar); 

fclose ($fp); 

?>

viernes, 6 de julio de 2012

El e-commerce

La web es un espacio de comercialización cada vez más importante. Las empresas o comercios que abren sus puertas al público también abren una ventana en la gran nube para el e-commerce.
Actualmente existe mucho software que proporciona la facilidad de implementar una tienda virtual en la web por medio de servicios gratuitos como Oscommerce, Prestashop o Magento. Conozcámoslos.

Oscommerce, es una aplicación open source gratuita. Admite formas de pago como Ahthorize.net, tarjetas de crédito, pago contra reembolso, iPayment, cheque, transferencia bancaria, PayPal, 2CheckOut, SECPay, Visa, MasterCard, entre otros.
Aunque en su momento fue uno de los mejores gestores, hoy presenta algunas objeciones. Cuenta a su favor con que integra distintos idiomas, ofrece una gran cantidad de módulos desarrollados que economizan costos y su desarrollo es sencillo, incluso la instalación, no usa CSS.

Prestashop, también es un software gratuito y open source, pero que a diferencia del anterior cueynta con una importante comunidad de usuarios que crece a pasos agigantados.
Actualmente es uno de los preferidos de los preferidos de los desarrolladores porque ofrece una buena indexación, Ajax integrado, funciona con CSS.
Ofrece un panel de administración intuitivo que permite crear categorías, productos, fabricantes y controlar a los clientes. No por nada fue galardonada en el 2010 como la mejor aplicación para comercio electrónico.

Magento, este proyecto comenzó a funcionar en 2007 y ha logrado sumar desde entonces una muy buena reputación. También es open source y gratuito, se destaca porque se puede navegar de manera fácil, cuenta con un código simple, ofrece un muy buen posicionamiento en lis buscadores y un diseño de interfaz distinguido.
Aunque es uno de los más utilizados, su gestor de instalación es sumamente complejo respecto a los anteriores, como así también el uso del panel de control.


e-Voto, el diseño del nuevo universo electoral

El voto electrónico ha llegado a la sociedad de la información para agilizar el sistema tradicional y ofrecer mayor seguridad. Pese a que gradualmente se está instalando en el mundo, sigue siendo muy cuestionado. Desarrolladores y diseñadores concentran su trabajo en hacer que las decisiones electrónicas tengan validez.
Es la expresión ciudadana por medios electrónicos que, a diferencia del voto tradicional, ofrece más seguridad y eficacia. Si bien estos puntos son los beneficios que tiene a favor, también son los más cuestionados debido a que todos conocemos cuán inseguras pueden ser las transferencias de datos en una sociedad de la información donde la piratería y hackeo de cuentas electrónicas y bancarias se han convertido en temores cotidianos.
El número de transferencias electrónicas aumenta progresivamente y esto se debe a que las personas eligen este medio no sólo para comprar productos y pagar servicios sino también para compartir información laboral y personal, participar de encuestas sobre productos que les interesan, etc. Aunque la seguridad es un tema aún indefinido, ya que crecen los métodos que ofrecen confianza y al mismo tiempo crecen las formas de flanquearlos, es cada vez más evidente que muchas de nuestras actividades pasan por una computadora.
Si cada vez son más las diligencias que pueden realizarse desde una computadora domestica, de oficina y hasta desde un smartphone, ¿Por qué no se podría emitir un sufragio electrónico también? Países como Alemania, Italia, Australia, Suiza, Bélgica, Canadá, Estonia, Francia, India, Irlanda, Holanda, Noruega, Rumania, Reino Unido, Brasil, Venezuela y Argentina ya lo han puesto a prueba y han experimentado al mismo tiempo sus controversias.

miércoles, 4 de julio de 2012

Consejos para agilizar la carga de una página web

Los sites compiten entre si en el globo de internet con su formato y diseño. Más allá del contenido y hacia donde están dirigidos, algunos pecan de tener demasiados artilugios que aunque atractivos terminan por alejar a los usuarios. Aquí recorreremos un listado de tips para mejorar tus propuestas y no caer recurrentemente en loa pintorescos errores.
Atrás quedaron los tiempos donde el usuario tiene que esperar que se descargue una imagen y menos confiemos en que estos tendrán tantas ganas de acceder a la página que esperaran el tiempo necesario a que la misma se descargue por completo. Actualmente la velocidad y el mensaje directo son fundamentales a la hora de acceder a la vorágine de Internet, por lo que nuestras creaciones tienen que estar a la altura de los usuarios más impacientes.

MIDE TU PACIENCIA:
A veces las páginas están muy bien armadas y se descargan velozmente pero es la computadora que utilizamos o el navegador el que está recargado de información. Entonces antes de perder la paciencia en pos de la búsqueda de velocidad, resuelve estos puntos y te los presente para hacerlo regularmente.
Para reconocer con facilidad que es lo que ralentiza tu página puede utilizar extensiones como Firebug o YSlow, también puede recurrir a Google Page Speed o algunas opciones online como WebSiteOptimization.com y StopWatch de Numion. De esta forma podrás ver un reporte de tablas y gráficos de los pintos débiles del site, además de medir el tiempo de carga.

GENERA VÍNCULOS:
Si utilizas Javascript y CSS externos, lo recomendable es vincular las hojas de estilo y el lenguaje porque simplifican la codificación permitiendo una descarga más rápida del contenido. Al utilizarlos en archivos externos se pueden guardar en caché y por tanto se reduce notablemente la cantidad de solicitudes HTTP.
También es recomendable comprimir los archivos Javascript.

UTILIZA SOLO LOS RECURSOS NECESARIOS:
Los sitios recargados de imágenes demorarán en cargarse por completo, por lo cual es aconsejable usar la menor cantidad posible, las que si utilices asegúrate que sean PNG o JPG, para que al comprimirlas no pierdan el detalle. Las animaciones y GIFs están prohibidas si lo que queremos lograr es un sitio rápido.
Recuerda que los HTML, CSS, y JS, como algunas imágenes, se pueden comprimir para reducir la cantidad de datos de transferencia y aún mejor si activas la posibilidad de guardar en caché para acelerar aún más la carga y lograr que los usuarios accedan más fácil y mayor cantidad de veces.
Otro de los recursos innecesarios son las páginas personalizadas. Muchas veces para entretener al usuario mientras una sección de la página esta en proceso se colocan plantillas tipificadas como la famosa 404-No Encontrado, o peor aún, dibujos que simulan que el site esta en desarrollo.
Nada peor que hacerle perder el tiempo al usuario visitando una página cuyo contenido esta incompleto, y que no advertirán cuando ya esté terminado el site.
Los archivos realizados en Flash también tienen lo suyo, quedan muy lindos, pero en realidad es que son archivos muy pesados y que dificultan la carga de la página.

Para finalizar también es importante tener en cuenta con que tipo de servidor trabajas, cuál es el proveedor y el ancho de banda que tienes.

martes, 3 de julio de 2012

Tecnología NFC: La llave de la instantaneidad y velocidad para móviles

Aunque existe desde hace muchos años, recién ahora empezaremos a ver los primeros productos que cuentan con la tecnología NFC. Esta plataforma sirve para transferencias de datos instantáneos, ideal para dispositivos móviles, y que abre un universo de aplicaciones al alcance de tus manos.
Near Field Communication es una tecnología inalámbrica que funciona desde el 2003 cuando fue aprobada como estándar ISO/IEC, y que recién en el año 2008 se incluye en los periféricos que además cuentan con Bluetooth.
Básicamente se trata de una plataforma abierta inalámbrica para dispositivos móviles que utiliza una banda, de la cual no necesita licencia, de 13.56 MHz, además de la etiqueta RFID (Radio Frequency Identifiaction) y que ocupa una tasa de transferencia que puede alcanzar los 424 kbits/a. Significa que sirve para transmitir datos mediante una comunicación instantánea y de corto alcance ta que solo funciona en un rango de 20 cm.
Esta reducida transmisión entre un objeto emisor, que puede ser un celular, y un objeto receptor, que puede ser un terminal de cobro u otro celular, permite que un móvil se transforme en una tarjeta de presentación para registrarse en un lugar, una tarjeta de crédito para abonar un servicio o un canal directo para recibir y enviar pequeñas cuotas de datos de manera rápida y segura.
Se estima que en los próximos cinco años la tecnología NFC complementara a loa teléfonos del mercado en todo el mundo garantizando utilidades como pagos, obtención de descuentos y ofertas.

lunes, 2 de julio de 2012

Códigos QR: En la mira de los negocios

Desde que los pequeños dispositivos de comunicación circulan en el mercado existen formas de que estos brinden servicios de comercialización.
La venta u oferta de productos por teléfono están desde mucho antes que los móviles sean parte de la sociedad. Sin embargo el desarrollo tecnológico ha buscado siempre que el viaje del mensaje entre el emisor y el receptor sea cada vez más rápido y naturalizado, para ello, los códigos QR son la tendencia en auge.
Quick Response barcode es el significado de la sigla que representa el sistema creado para almacenar información en una matriz de puntos bidimensional. El mentor lo identificó con ese nombre para indicar que ése es el método ideal para leer contenido en alta velocidad. Fue creado por Denso-Wave en 1994, una empresa japonesa que pensó una similitud con los códigos de barra, pero con un diseño diferente. La forma de los códigos QR es básicamente un cuadrado cercado por otros tres cuadrados ubicados en esquinas que contienen los datos en el interior.
Aunque estén por todas partes, podrían pasar inadvertidos por quienes no conocen su utilidad y terminarían por restarle importancia. Estos códigos actualmente se pueden encontrar en gráficas publicitarias en la calle, en tarjetas de presentación, en los productos o hasta pueden ser enviados por SMS para que el usuario los reciba personalmente. En algunos paises es tan común encontrarlos como utilizarlos como vía directa para acceder a un cúmulo de información que no entraría simplemente en un espacio tan pequeño.

domingo, 1 de julio de 2012

Frameworks en PHP: CodeIgniter

Como posiblemente ya saben, los Frameworks nos ofrecen la posibilidad de gestionar librerías que nos ayuden en la rutina diaria de crear formularios, acceder a base de datos y otras tantas estructuras de código partiendo de una base más segura, eficiente, sólida, fácil de usar y por sobre todo ... Sin tener que reinventar siempre todo de cero.
Hablar de CodeIgniter es hablar de el paradigma MVC ( Modelo - Vista - Controlador ) Los controladores son los encargados de gestionar toda la lógica de la aplicación y para ello se valen de métodos. Manejan tanto el flujo de información que procesa el modelo como que vista será la encargada de hacer visibles esos datos.
El Modelo, esencialmente, procesa todo lo referente a datos y pone el foco en la estructura de los mismos abarcando el grupo de funciones que gestionan la información procedente de la base de datos. Por ejemplo, si tenemos una tabla llamada "clientes", deberíamos tener un modelo para esa tabla y funciones dentro desee modelo para esa tabla y funciones para seleccionar, crear, actualizar, y eliminar registros para esa tabla "clientes", no importa que motor de base de datos usemos.
Las Vistas representan la interfaz de usuario que vemos en la pantalla, siendo este punto donde formateamos y determinamos como se verá la misma.