[Tutorial CodeIgniter 3 Españoll] Uso de cookies y sesiones en CodeIgnite

En estos momentos CodeIgniter dispone de 2 maneras diferentes de manejar cookies, una de ellas es el helper cookie, nos permite trabajar con cookies como se ha hecho siempre en PHP pero con un pequeño agregado de seguridad. La librería se llama session, esta librería es la que tendríamos que utilizar siempre para trabajar con sistemas de usuarios y datos delicados ya que toda la información pasa a una cookie encriptada.

Como se utilizo el Helper Cookie sesiones en CodeIgniter 3

Este helper contiene funciones útiles para trabajar con cookies

Como cargar el Cookie Helper CodeIgniter 3.

Para cargar este helper en CodeIgniter como siempre tenemos dos caminos, uno es cargarlo cuando lo necesitamos utilizando:

$this->load->helper('cookie');

también lo podemos cargar permanentemente modificando el archivo autoload de CodeIgniter 3 situado en application/config/autoload.php

Buscamos la variable $autoload que tendría que estar en la línea 92 aprox y la modificamos $autoload['helper'] = array('cookie'); una vez hecho esto ya podemos trabajar con este helper

Como utilizar el Cookie Helper

Lista de funciones del Cookie Helper en CodeIgniter 3

Utilizaremos la librería input que provee CodeIgniter para tener un extra de seguridad, sin tenernos que complicar demasiado la vida

Para insertar una cookie

los mínimos valores necesarios son, Nombre de la cookie, valor que tendrá esa cookie, y el tiempo de vida de la cookie en segundos. La sintaxis es la siguiente

$this->input->set_cookie('cookie_Prueba','cookie_valor','3600');  

Para leer una cookie con seguridad

$this->input->cookie('cookie_Prueba', TRUE);

Para borrar una cookie fácilmente

delete_cookie('cookie_Prueba');

Que es y para que se utiliza session en CodeIgniter 3

La librería Session de CodeIgniter está centrada en controlar el estado del usuario o visitante de tu web a través de pequeñas cookies codificadas instaladas en el navegador, así de simple y fácil

Como inicio la sesión de usuario

Antes de nada hay que configurar un poco application/config/config.php buscamos $config['encryption_key'] =''; y escribimos la clave de encriptación que nosotros queramos por ejemplo $config['encryption_key'] = 'quiero3huevosfritosconpatatasy6trozosdefua';
Si continuamos haciendo scroll hacia abajo podemos modificar también el nombre de la cookie para la sesión y más valores.

$config['sess_driver'] = 'files';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200;
$config['sess_save_path'] = NULL;
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;

Como siempre en CodeIgniter podemos cargar la librería cuando la necesitemos o también lo podemos cargar permanentemente modificando el archivo autoload de CodeIgniter 3 situado en application/config/autoload.php más o menos esta por la línea 42 $autoload['libraries'] = array('session');

Escribir datos en nuestra sesión

Estos datos se guardaran en un array que tendremos que crear y haciendo uso de $this->session->set_userdata($array); pasaran a estar codificados y solo accesibles desde el método userdata().

$valoresSession = array(
               'id' => '1',
               'nombre' => 'esunbichito',
               'logueado' => false
            );
$this->session->set_userdata($valoresSession);
 

Como accedo a los valores de session una vez codificados

Para acceder es muy simple haremos uso del userdata()

 echo  $this->session->userdata('nombre');

Como borro la session actual?

Para borrar la sesión actual es muy simple $this->session->sess_destroy();

Posted on

[Tutorial CodeIgniter 3 Español]insertar, modificar, consultar y borrar

Configurar la conexión a la base de datos en CodeIgniter

Para configurar la conexión a la base de datos en CodeIgniter se tienen que editar 2 archivos diferentes, autoload.php y database.php los dos se encuentran dentro de application/config
En el archivo database.php, se tienen que configurar la base de datos el usuario el localhost y con eso la conexión si se configura conrrectamente se realizaría con éxito.
Despues le tenemos que decir a CI que debe de utilizar esa configuración, lo fácil si solo vamos a manejar una configuración es ir al archivo autoload.php y modificar el array libraries quedaría de la siguiente manera

 $autoload['libraries'] = array('database');
 

Si tenemos mas de una libreria se pone una coma y se continua…

 $autoload['libraries'] = array('database', 'libraries1','libraries2',);
 

Como hacer consultas en CodeIgniter

Realizar un select para consultar la base de datos utilizando CodeIgniter

class usuarios extends CI_Controller {
public function index()
{            
$usuarios = $this->db->query('select * from usuarios' )->result();
/*
/es muy importante ->result() es una function  propia del FrameWork
*/
foreach ($usuarios as $usuario)
{
print_r($usuario->User_ID ."<br>");
}
$this->load->view('welcome_message');
}
}

Realizar un insert para introducir valores en la base de datos utilizando CodeIgniter

$valoraescapar = $this->db>escape($valoraescapar);
$valordosaescapar = $this->db>escape($valordosaescapar);
$this->db->query(“insert into Usuarios (valoraescapar, valordos aescapar) values ($valoraescapar , $ valordosaescapar )”)

Realizar un update para modificar registros utilizando CodeIgniter

Realizar un borrar en de la base de datos utilizando CodeIgniter

Posted on

Como enviar correos en php, sencillo script

El servidor de apache es un servidor que utiliza el protocolo http de codigo abierto para plataformas Unix (linux , Gnu…), microsoft windows y macintos. Empezo a desarrrollarse en el año 95 y a partir de este momento nadie ha dejado de utilizarlo, casi todos los servidores que engloban nuestra red poseen de un servidor apache en casos como linux.

Apache sirve principalmente para enviar paginas web dinamicas y estaticas en WWW . Muchas aplicaciones web estan diseñadas con un ambiente de implantacion a apache o utilizan las caracteristicas de apache.

Es la pieza fundamental para la plataforma de aplicaciones LAMP, (LINUX, APACHE, MYSQL, PHP). ahora mismo interpreta Ruby, Perl, Python y php.

Es facil de implementar y presenta entre otras caracteristicas, bases de datos de autenticacion y negociado de contenido.

Por eso una de las caracteristicas principales de este servidor es que es capaz a traves de un codigo fuente desarrollado en php es capaz de hacer un envio de un email usando este maravilloso script.

$siteaddress='tuweb.com';
$sitename='tuweb.com';
 
	 $cabeceras = 'From: info@tuweb.com' . "\r\n" .
  'Content-type: text/html; charset=iso-8859-1\r\n'
  .
    'Reply-To: info@tuweb.com' . "\r\n" .
    '';
 
$destinatario = 'info@tuweb.com';
 
$asunto = $titular;
 
	 $cuerpo='Aqui incluimos el html entero con estilos en linea style:font-....';
 
mail($destinatario,$asunto,$cuerpo,$cabeceras);

Posted on

Poner ceros “0” delante de un numero en php

A veces nos cuesta encontrar un numero, a veces nos cuesta encontrar que un numero sea mas grande que otro, y simplemente es por que no podemos añadir ceros a la izquierda. Os dejo una funcion en php capaz de hacer esto.

str_pad($value, 8, ’0′, STR_PAD_LEFT);

Str_pad es capaz de añadir ceros o cualquier cosa a la izquierda STR_PAD_LEFT o si usted quiere a la derecha STR_PAD_RIGHT siempre que quieras añadirle el tercer parametro que son ceros, Y hasta llegar a ocho digitos que seria el segundo parametro. El valor que le pasamos es el value:

$value=Valor que se le pasa como parametro
8= digitos que llegara ese numero
0 El simbolo o los numero que deseamos añadir4
STR_PAD_LEFT Posicion que deseamos añadir

Os dejo un manual po si quereis coger mas informacion:

http://es2.php.net/manual/es/function.str-pad.php

Posted on

Mostrar los errores en php sin tocar el Phpini.

Es complicado programar, es complicado cuando nos ponemos a desarrollar una aplicación y de repente nos encontramos la pantalla completamente en blanco, esto nos pasa mucho programando a nivel de navegador, cuando nosotros nos disponemos a desarrollar una aplicación movil y tenemos un terminal no hay peor cosa que nos salgan constamente al iniciar el movil que la aplicación debe de cerrarse. En php y mysql el error puede estar en la consulta mysql o incluso en unas comillas simples que a simple vista no podamos ver. Cuando estamos programando en un lenguaje compilado como es Java, encontramos varias erramientas de depuracion de errores pero cuando nos disponemos a programar en php, el unico compilador que tenemos es el navegador (FIREFOX, internet explorer….).

Cuando trabajamos en este lenguaje y el servidor no dispone del error_reporting (directiva del php que te permite mostrar los errores en pantalla).Lo mejor es usar estas dos lineas de codigo al principio de nuestro script, con ello aseguramos que se muestren todos los errores en nuestro php

error_reporting(E_ALL);
ini_set("display_errors", 1);

Posted on

Guardando Archivos en la Base de datos PHP & MS Server

Muchos sabemos como realizar el guardado de imagenes y archivos en bases de datos mysql por medio de un campo blob, pero alguna ves lo hemos echo
en sql server por medio de PHP bueno a continuacion les mostrare la forma como se puede hacer.



<?php

// Primero, arranca el bloque PHP y checkea si el archivo tiene nombre.  
// Si no fue asi, te remite de nuevo al formulario de inserción:
// No se comprueba aqui si se ha subido correctamente.

if (empty($_FILES['archivo']['name'])){
header("location: formulario.php?proceso=falta_indicar_fichero"); //o como se llame el formulario ..
exit;
}



//establece una conexión con la base de datos.

$conexion = mssql_connect("xcl-it08","sa","") or die("No se pudo realizar la conexion con el servidor.");
mssql_select_db("clientesdb",$conexion) or die("No se puede seleccionar BD"); // tu_bd es el nombre de la Base de datos .. por siaca.




// archivo temporal (ruta y nombre).
$binario_nombre_temporal = $_FILES['archivo']['tmp_name'];



// leer del archvio temporal .. el binario subido.
// "rb" para Windows .. Linux parece q con "r" sobra ...

$binario_contenido = base64_encode(addslashes(file_get_content($binario_nombre_temporal, "rb"));



// Obtener del array FILES (superglobal) los datos del binario .. nombre, tabamo y tipo.
$binario_nombre=$_FILES['archivo']['name'];
$binario_peso=$_FILES['archivo']['size'];
$binario_tipo=$_FILES['archivo']['type'];


//insertamos los datos en la BD.
$consulta_insertar = "INSERT INTO archivos (archivo_binario, archivo_nombre, archivo_peso, archivo_tipo) VALUES ('".$binario_contenido."', '".$binario_nombre."', '".$binario_peso."', '".$binario_tipo."')";
mssql_query($consulta_insertar,$conexion) or die("No se pudo insertar los datos en la base de datos.");
header("location: listar_imagenes.php");  // si ha ido todo bien
exit;
?> 

Estructura de la base de datos


CREATE TABLE [archivos] (
    [id] [int] IDENTITY (1, 1) NOT NULL ,
    [archivo_binario] [image] NULL ,
    [archivo_nombre] [varchar] (50) COLLATE Modern_Spanish_CI_AS NULL ,
    [archivo_peso] [varchar] (50) COLLATE Modern_Spanish_CI_AS NULL ,
    [archivo_tipo] [varchar] (50) COLLATE Modern_Spanish_CI_AS NULL ,
    CONSTRAINT [PK_archivos] PRIMARY KEY  CLUSTERED 
    (
        [id]
    )  ON [PRIMARY] 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

este script no ha sido testado porfavor disculpa las molestias causadas

Posted on

Enviar Contenido a Imageshack con PHP

Todos Conocemos muy bien el servicio de alojamiento de imagenes Imageshack pero y si les digo que por medio de php podemos enviar contenido a los servidores.
de Imageshack utilizando funciones simples bueno para eso les explicare el codigo que se tiene que utilizar para realizar el proceso.

Parte 1

<?php

/* 

Esta Funcion permitira saber cual es el mimetype de la imagen que queremos enviar a Imageshack
enviandole como parametro el nombre de el archivo.

*/

function MimeType($filename){
    $ext = pathinfo($filename);
    $ext = $ext['extension'];
    
    switch($ext){
        case "bmp": return "image/bmp"; break;
        case "gif": return "image/gif"; break;
        case "jpe": return "image/jpeg"; break;
        case "jpeg": return "image/jpeg"; break;
        case "jpg": return "image/jpeg"; break;
        case "png": return "image/png"; break;
        case "swf": return "application/x-shockwave-flash"; break;
        case "tif": return "image/tiff"; break;
        case "tiff": return "image/tiff"; break;
        default: return ""; break;
    }
}



/* A continuacion la Funcion Principal de el script es la que se utiliza para realizar el envio de la informacion */


function imageshackUpload($filename){

    $sock = @fsockopen("www.imageshack.us", 80, $errno, $errstr, 30);  // Conectamos a Imageshack via fsockopen 
      

    // Leemos el archivo a enviar y lo armamos como un binario

    $handle = fopen($filename, "r");
    $binarydata = fread($handle, filesize($filename));
    fclose($handle);
    
    
    // Identificamos el Mimetype de el archivo

    $mimetype = MimeType($filename); 



    // Armamos el contenido de la peticion 
       
    $AaB03x  = "--AaB03xrn";
    $AaB03x .="content-disposition: form-data; name="uploadtype"rnrn";
    $AaB03x .= "onrn";
    $AaB03x .= "--AaB03xrn";
    $AaB03x .= "content-disposition: form-data; name="fileupload"; filename="".basename($filename).""rn";
    $AaB03x .= "Content-Type: $mimetypern";
    $AaB03x .= "Content-Transfer-Encoding: binaryrnrn";
    $AaB03x .= "$binarydatarn";
    $AaB03x .= "--AaB03x--rn";

    // Realizamos el Construccion de las cabeceras a enviar a Imageshack

    $header  = "POST / HTTP/1.1rn";
    $header .= "Host: www.imageshack.usrn";
    $header .= "Content-type: multipart/form-data, boundary=AaB03xrn";
    $header .= "Content-Length: ".strlen($AaB03x)."rnrn";
    $header .= $AaB03x;
    


    fwrite($sock, $header); // Creamos el Archivo en ImagesHack
   
    // Procedemos a Escribir el contenido 

    while (!feof($sock)){
        $response .= fgets($sock, 128);
    }

   // Cerramos la conexion con Imageshack 
   fclose($sock);
    

   // Finalmente Creamos el enlace que necesitaremos para poder incrustar nuestra imagen en donde queramos 

    preg_match_all("#<input type="text" onclick="highlight(this)" style="width: 500px" size="70" value="[URL=http://imageshack.us][IMG](.*)[/IMG][/URL]"/>#", $response, $matches);
    return $matches[1][0];
}

?>

en esta parte esta el codigo referente al formulario en html que se va a usar para que trabaje con el script en php

parte 2 formulario

<html>
<?php if(!isset($_POST['sub'])){ ?>
    <form method="post" enctype="multipart/form-data" action="<?php echo $_SERVER['PHP_SELF']; ?>">
    Enter path to file: <input type="text" name="test" /><br />
    <input type="submit" name="sub" />
    </form>     
<?php } else {
    echo imageshackUpload($_POST['test']);
}?>
</html>

Este Codigo no ha sido testiado, para poder usarlo tu servidor debera soportar fsockopen para la conexion

Posted on

Crear Carpetas con PHP y FTP

bueno amigos en esta entrada aprenderemos como hacer para crear carpetas mediante las funciones FTP que posee PHP esta ves nos vamos a usar la Conocida funcion MKDIR sino algo mas diferente ideal para trabar con archivos y carpetas en servidores externos al nuestro. ya basta de palabras y miren el codigo.


<?php
function creardir($carpeta){ 
 if (is_dir($carpeta)){
     echo "el Directorio ya existe";
 }
 else
 {
   if($ftp_c = ftp_connect ("sitio.com",21)){ 
    if(ftp_login($ftp_c,"user","pass")){ 
     ftp_chdir($ftp_c, 'barranquillamia.tollfreepage.com/music/');
     ftp_mkdir($ftp_c,$carpeta);
     ftp_chdir($ftp_c,$carpeta); 
     echo "Carpeta actual: ".ftp_pwd($ftp_c); 
    }else{
   echo "Error: En el usuario o contraseña invalida";
  } 
}
else{
   echo "Error: El servidor FTP no responde";
 }
 ftp_close($ftp_c); 
}
?>

lo podremos utilizar de la siguiente forma.

<?php

creardir(nombre de la Carpeta);

?> 

Posted on

Buscador Simple PHP

un buscador simple el cual podras utilizar en tu web para buscar articulos y demas .


<html>
<head>
<title>Buscador simple en PHP</title>
</head>
<body>

<form action="buscar.php" method="post">
Buscar: <input name="palabra">
<input type="submit" name="buscador" value="Buscar">
</form>

<?
if ($_POST['buscador'])
{ 
// Tomamos el valor ingresado
$buscar = $_POST['palabra'];

// Si está vacío, lo informamos, sino realizamos la búsqueda
if(empty($buscar))
{
echo "No se ha ingresado una cadena a buscar";
}else{
// Conexión a la base de datos y seleccion de registros
$con=mysql_connect("localhost","user","pass");
$sql = "SELECT * FROM noticias WHERE noticia like '%$buscar%' ORDER BY id DESC";
mysql_select_db("base_de_datos", $con); 

$result = mysql_query($sql, $con); 

// Tomamos el total de los resultados
$total = mysql_num_rows($result);

// Imprimimos los resultados
if ($row = mysql_fetch_array($result)){ 
echo "Resultados para: <b>$buscar</b>";
do { 
?>


<b><a href="noticia.php?id=<?=$row['id'];?>"><?=$row['titulo'];?></a></b>

<?
} while ($row = mysql_fetch_array($result)); 
echo "

Resultados: $total

";
} else { 
// En caso de no encontrar resultados
echo "No se encontraron resultados para: <b>$buscar</b>"; 
}
}
}
?>
</body>
</html>

Archivo Sql


CREATE TABLE `noticias` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`titulo` VARCHAR( 255 ) NOT NULL ,
`noticia` LONGTEXT NOT NULL
);

Posted on

Curso PHP desde Cero: Namespaces

En este nuevo capítulo de la Serie de PHP desde Cero conoceremos los famosos Namespace. Pero antes de explicarlo en PHP, veamos un ejemplo de la vida real para tener una idea de clara de que trata todo esto.

Imaginemos que trabajamos en una compañía pequeña y hay un empleado de nombre Juan. Cada vez que decimos Juan todos entienden a quien nos referimos, pero de un día para otro la compañía crece en personal y ahora hay dos empleados de nombre Juan. Esto nos crea un problema para hacer referencia a alguno de los dos y aquí es donde entran en juego los apellidos. Uno es Juan Vargas y el otro Juan Perez, lo cual nos permite diferenciarlos sin ningún problema. Esto es lo mismo que sucede con los namespaces en PHP.

Si tenemos un proyecto grande y tenemos varias clases que hemos importado o han hecho diferentes personas puede haber una colisión de nombres, pero esto se resuelve con esta característica de PHP. Anteriormente, y en realidad todavía muchas personas lo resuelve de esta manera, se usaban nombres largos para identificar las clases de manera inequívoca y así evitar las colisiones. Digo anteriormente porque los namespaces se implementaron en PHP desde la version 5.3.
Introducción a los Namespaces

Ahora vamos a ver como funcionan y como se aplican los namespaces en PHP. Primero que nada vamos a ver un ejemplo en donde haya colisión de nombre de clases:

<?php
class Usuario {
    var $nombre;
}

class Usuario{
    var $correo;
    var $clave;
}

?>

Como podemos ver tenemos dos clases Usuario que tiene funcionalidades diferentes(imaginemos que tienen muchos métodos y propiedades), pero al llamarse de la misma manera va a dar error cuando las llamemos porque PHP no sabe cual queremos instanciar. Ahora vamos a ver las mismas clases pero con unos namespace y como se pueden llamar en el mismo código sin crear colisiones.

<?php
namespace usuarioPersona;

class Usuario {
    var $nombre;
}

namespace usuarioSistema;

class Usuario{
    var $correo;
    var $clave;
}

$persona = new \usuarioPersona\Usuario();

$usu_sistema = new \usuarioSistema\Usuario();
?>

Utilizando los namespace se puede ver claramente cuando llamamos a cada una de las clases Usuario.
Sintaxis

Los namespaces se puede declarar, importar y utilizar de varias maneras, las cuales vamos a ver a continuación.

Por defecto todas las clases, funciones y variables están definidas en el entorno global, como ha sido siempre en PHP.

<?php
//para declarar un namespace se utiliza la palabra reservada namespace
//antes del nombre que se le quiera otorgar
//y debe ir al principio del archivo del script
namespace nombreDelNamespace;

// a partir de aquí se escribe todo el código
// que se quiera incluir en este entorno
?>

También se pueden definir subnamespaces para poder tener nuestro código bien organizado y estructurado. Para separar los namespaces se utiliza la barra invertida ( \ ), veamos algunos subnamespaces validos.

Proyecto\BD\MySQL
Proyecto\BD\Mongo
Proyecto\PDF\FilePDF
Proyecto\Librerias\LibreriaGraficas

Usar Namespaces

Ya que sabemos como declarar los namespace ahora tenemos que aprender como llamar clases, funciones o variables que estén en ellos. Vamos a crear una clase y definirla dentro un namespace:

<?php
//carro.php

// la clase Carro y CONSTANTE estarán en el namespace Codehero\Cursos
namespace Codehero\Cursos;

const CONSTANTE = 'Constante de Ejemplo';  

class Carro{

    static function rodar(){
        // código de la función rodar
    }
}

?>

Ahora vamos a importar el archivo de carro.php y utilizar la clase Carro y la constante.

<?php
require_once('carro.php');  

// Como no hay un namespace definido en este archivo
// tenemos que llamar a la constante y la función todo
// el namespace completo (ruta absoluta).
// Siempre que utilicemos un namespace directamente
// hay que empezar con un \ slash invertido
$carro = \Codehero\Cursos\Carro::rodar();
$constante = \Codehero\Cursos\CONSTANTE;

?>

Claro esta que cuando tenemos muchas funciones que debemos llamar de varios namespaces es muy tedioso escribir todas las rutas completas. Para esto existe la opción de importar namespaces con la sentencia use. Se pueden importar todos los que sean necesarios, veamos un ejemplo de como importarlos:

<?php
require_once('carro.php');  
use Codehero\Cursos;

// Ya no es necesario utilizar toda la ruta porque PHP intenta buscar
// en los namespaces que se esten usando, en este caso el global y el
// Codehero\Cursos.
$carro = Carro::rodar();
$constante = CONSTANTE;

?>

Conclusión

En este capítulo hemos tenido nuestro primer contacto con los namespaces, todavía falta mucho que aprender sobre los mismos y se cubrirá en el siguiente capítulo viendo ejemplos reales con un mini proyecto. Hoy en día muchos frameworks hacen uso de los namespaces y es muy importante saberlos usar cuando tengamos proyectos grandes y complejos. Cualquier comentario o duda estaré atento a la sección de comentarios.

Posted on