viernes, enero 29, 2010

Este resumen no está disponible. Haz clic aquí para ver la publicación.

miércoles, enero 27, 2010

Sistema de usuarios en php Parte 1

Hoy empezare con este pequeño tutorial de un sistema de usuarios en php.

Creando la Base de Datos:

Yo utilizare como motor de Base de Datos MySQL porque me gusta más.

CREATE TABLE `usuarios` (

`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`nombre` VARCHAR( 200 ) NOT NULL ,
`usuario` VARCHAR( 20 ) NOT NULL ,
`clave` VARCHAR( 20 ) NOT NULL ,
`correo` VARCHAR( 30 ) NOT NULL ,
`nivel` ENUM( '1', '2', '3' ) NOT NULL DEFAULT '1',
`log` TEXT NOT NULL

) ENGINE = MYISAM ;

INSERT INTO `usuarios` VALUES (1, 'Pedro Perez', 'pedro', '827ccb0eea8a706c4c34a16891f84e7b', 'me@me.com', '1', '');

Usuario: pedro

Contraseña: 12345

¿Qué es lo que significa esto?

Que en nuestro sistema vamos a almacenar el nombre de la persona, un usuario ligado a la persona, una contraseña, un correo electrónico, un nivel dentro del sistema que puede ser nivel 1 básico nivel 2 avanzado y nivel 3 administrador, se pueden agregar tantos niveles quieran y por ultimo vamos a guardar un log de la persona.

Ahora el código php tratare de hacerlo lo más sencillo y ordenado por funciones:



index.php
<?php
/**
 * @author Victo Arturo Hernandez Avila
 * @mail arturo[dot]webrek[at]gmail[dot]com
 * @copyright 2010
 */ 
session_start();
include 'config.php';
include 'login.php';
if($_SESSION['usuario']){
    header("LOCATION: sistema.php");
}

?>


config.php
<?php

/**
 * @author Victo Arturo Hernandez Avila
 * @mail arturo[dot]webrek[at]gmail[dot]com
 * @copyright 2010
 */ 

$host = "127.0.0.1";
$user = "root";
$pass = "12345";
$dbname = "test";
$connect = mysql_connect($host, $user, $pass);
$dbconnect = mysql_select_db($dbname, $connect);

?>


login.php
<?php

/**
 * @author Victo Arturo Hernandez Avila
 * @mail arturo[dot]webrek[at]gmail[dot]com
 * @copyright 2010
 */ 
if(empty($_SESSION['usuario'])){
    switch($_REQUEST['op']){
        default:
            loginBox();
        break;
        case "sendLogin":
            logincheck();
        break;
    }
}

function logincheck(){
    $usuario = mysql_real_escape_string($_POST['usuario']);
    $clave = mysql_real_escape_string($_POST['clave']);
    if(empty($_POST['usuario']) && empty($_POST['clave'])){
        errorLogin("Los campos usuario y contraseña no deben ser dejados en blanco.");
        loginBox();
    }else{
        $sqlValid = "SELECT * FROM usuarios where usuario = '$usuario'";
        $queryValid = mysql_query($sqlValid) or die (mysql_error());
        $numValid = mysql_num_rows($queryValid);
        if($numValid != 1){
            errorLogin("El Usuario no existe !!");
            loginBox();
        }else{
            $array = mysql_fetch_array($queryValid);
            if($array['clave'] != md5($clave)){
                errorLogin("Contraseña Incorrecta");
                loginBox();
            }else{
                $ip = $_SERVER['REMOTE_ADDR'];
                $fecha = date("U");
                $log = "$ip, $fecha;";
                $logCompleto = "$array[log] $log";
                $updateLog = "UPDATE usuarios SET log = '$logCompleto' WHERE id = '$array[id]'";
                $queryLog = mysql_query($updateLog);
                $_SESSION['iduser'] = $array['id'];
                $_SESSION['nombre'] = $array['nombre'];
                $_SESSION['usuario'] = $array['usuario'];
                $_SESSION['correo'] = $array['correo'];
                $_SESSION['nivel'] = $array['nivel'];
                header("LOCATION: sistema.php");
            }
        }
    }
}

function errorLogin($str){
    echo '<div style="color:red;width:300px;border:1px solid red;background: #FFFF99;font-family:Verdana;font-size:12px;">'.$str.'</div>';
}

function loginBox(){
    echo '
    <div id="loginBox">
        <form method="post" action="'.$_SERVER['PHP_SELF'].'">
            <div>
                Usuario
            </div>
            <div>
                <input type="text" name="usuario">
            </div>
            <div>
                Contraseña
            </div>
            <div>
                <input type="password" name="clave">
            </div>
            <div>
                <input type="submit" value="Entrar">
                <input type="hidden" name="op" value="sendLogin">
            </div>
        </form>
    </div>
    ';
}

?>


sistema.php
<?php

/**
 * @author Victo Arturo Hernandez Avila
 * @mail arturo[dot]webrek[at]gmail[dot]com
 * @copyright 2010
 */ 
session_start();
if($_REQUEST['foo'] == 'logout'){
    session_destroy();
    session_unset();
    
}
include 'config.php';
include 'login.php';
if ($_SESSION['usuario']) {
    switch ($_SESSION['nivel']) {
        case 1;
            level1();
            break;
        case 2;
            level2();
            break;
        case 3;
            level3();
            break;
    }
    switch ($_REQUEST['foo']) {
        default:
            echo '<br /><br />Sistema de Usuarios en PHP<br /> <a href="http://webrek.blogspot.com">http://webrek.blogspot.com</a>';
            break;
        case 'myinfo':
            echo '
        <br />Nombre: ' . $_SESSION['nombre'] . '
        <br />Usuario: ' . $_SESSION['usuario'] . '
        <br />Correo: ' . $_SESSION['correo'] . '
        <br />Nivel: ' . $_SESSION['nivel'] . '';
            break;
        case "test1":
            echo "<br />Probando TEST1, todos los usuarios todos los niveles.";
            break;
        case "test2":
            if($_SESSION['nivel'] >= 2){
                echo "<br />Probando TEST2, nivel 2 y 3.";
            }
            break;
        case "test3":
            if($_SESSION['nivel'] == 3){
                echo "<br />Probando TEST3, solo nivel 3.";
            }
            break;
    }

}
function level1()
{
    echo '
    Bienvenido ' . $_SESSION['nombre'] . '<br />
    <span><a href="' . $_SERVER['PHP_SELF'] .
        '">Inicio</a></span> - <span><a href="' . $_SERVER['PHP_SELF'] .
        '?foo=myinfo">Mi información</a></span> - <span><a href="' . $_SERVER['PHP_SELF'] .
        '?foo=test1">Test 1</a></span> - <span><a href="'.$_SERVER['PHP_SELF'].'?foo=logout">Salir</a></span>';

}

function level2()
{
    echo '
    Bienvenido ' . $_SESSION['nombre'] . '<br />
    <span><a href="' . $_SERVER['PHP_SELF'] .
        '">Inicio</a></span> - <span><a href="' . $_SERVER['PHP_SELF'] .
        '?foo=myinfo">Mi información</a></span> - <span><a href="' . $_SERVER['PHP_SELF'] .
        '?foo=test2">Test 2</a></span> - <span><a href="'.$_SERVER['PHP_SELF'].'?foo=logout">Salir</a></span>';
}

function level3()
{
    echo '
    Bienvenido ' . $_SESSION['nombre'] . '<br />
    <span><a href="' . $_SERVER['PHP_SELF'] .
        '">Inicio</a></span> - <span><a href="' . $_SERVER['PHP_SELF'] .
        '?foo=myinfo">Mi información</a></span> - <span><a href="' . $_SERVER['PHP_SELF'] .
        '?foo=test3">Test 3</a></span> - <span><a href="'.$_SERVER['PHP_SELF'].'?foo=logout">Salir</a></span>';
}

?>

martes, enero 26, 2010

Sistema usuarios en php

Es mi primer post desde el metro y es muy raro. Bueno a partir del día de mañana empezaré a enseñarles para los que les sirva como crear un sistema de usuarios en php.

lunes, enero 25, 2010

Page Speed soluciones.

Utilizando PageSped constantemente me aparecía en la mayoría de mis sitios que necesitaba comprimir ciertas páginas para que el sitio fuese más rápido. También había algunos detalles del cache, les publicare como a mí me funciono.

A cada página la agregue la función ob_start("ob_gzhandler");

<?

ob_start("ob_gzhandler");

?>

Esta función comprime la página en gzip

Como usaba JavaScript externos y Hojas de estilo que también necesitaban ser comprimidas las modifique para también agregar la función ob_start("ob_gzhandler");

<link href="/lib/style.css.php" rel="stylesheet" type="text/css" />

Para el cache hice esta pequeña función que crea un cache de duración de 30 días.

<?

//index.php

ob_start("ob_gzhandler");

function cacheDate("", 60); El cache dura 60 días.

?>

<?

// style.css.php

ob_start("ob_gzhandler");

function cacheDate("css", 60); //El cache dura 60 dias.

?>

function cacheDate($type, $time)

{

if(empty($time)){

$time = "30";

}

if($type){

$ty = header("Content-type: text/$type; charset: UTF-8");

}

$segundos = (60 * 60) * 24 *(30);

$fechaFutura = gmdate("U") + $segundos;

$D = gmdate("D", $fechaFutura);

$fechaCache = gmdate("d M Y H:i:s", $fechaFutura);

echo $ty;

header("Cache-Control: must-revalidate");

header("Expires: $D, $fechaCache GMT");

}

Consulta de CURP php

A continuación les muestro este simple script en php para consultar el CURP de cualquier persona. Quiero aclarar que este script emula ser un navegador y envía las variables mediante GET a un servidor de gobernación.

Para poder utilizar esta función hay que tener activo en el php.ini allow_url_fopen = On.

Ejemplo:
getCurp("Perez", "Perez", "Pedro", 15, 01, 1980, "H", "BS");

 
 

<?

/**
 * @author Victo Arturo Hernandez Avila
 * @mail arturo[dot]webrek[at]gmail[dot]com
 * @copyright 2009
 */
 
set_time_limit(0);
function getCurp($primerApellido, $segundoApellido, $nombre, $diaNacimiento, $mesNaciemiento, $anioNacimiento, $sexo, $entidadNacimiento){
$primerApellido = urlencode($primerApellido);
$segundoApellido = urlencode($segundoApellido);
$nombre = urlencode($nombre);
$aContext = array(
    'http' => array(
        'header'=>"Accept-language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3\r\n" .
              "Proxy-Connection: keep-alive\r\n" .
              "Host: consultas.curp.gob.mx\r\n" .
              "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; es-ES; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 (.NET CLR 3.5.30729)\r\n" .
              "Keep-Alive: 300\r\n" .
              "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n"

        ),
    );
$cxContext = stream_context_create($aContext);
$url = "http://consultas.curp.gob.mx/CurpSP/curp1.do?strPrimerApellido=$primerApellido&strSegundoAplido=$segundoApellido&strNombre=$nombre&strdia=$diaNacimiento&strmes=$mesNaciemiento&stranio=$anioNacimiento&sSexoA=$sexo&sEntidadA=$entidadNacimiento&rdbBD=myoracle&strTipo=A&entfija=DF&depfija=04";
    $file = file_get_contents($url, false, $cxContext);
    preg_match_all("/var strCurp=\"(.*)\"/", $file, $curp);
$curp = $curp[1][0];
    if($curp){
        return $curp;
    }else{
        $curp = "Curp no encontrado.";
        return $curp;
    }
}
?>

 
 

        <option value="AS">AGUASCALIENTES </option>

        
 

         <option value="BC">BAJA CALIFORNIA NTE. </option>

 
 

        
 

         <option value="BS">BAJA CALIFORNIA SUR </option>

        
 

         <option value="CC">CAMPECHE </option>

        
 

         <option value="CL">COAHUILA </option>

        
 

         <option value="CM">COLIMA </option>

        
 

         <option value="CS">CHIAPAS </option>

        
 

         <option value="CH">CHIHUAHUA </option>

 
 

        
 

         <option value="DF">DISTRITO FEDERAL </option>

        
 

         <option value="DG">DURANGO </option>

        
 

         <option value="GT">GUANAJUATO </option>

        
 

         <option value="GR">GUERRERO </option>

        
 

         <option value="HG">HIDALGO </option>

        
 

         <option value="JC">JALISCO </option>

 
 

        
 

         <option value="MC">MEXICO </option>

        
 

         <option value="MN">MICHOACAN </option>

        
 

         <option value="MS">MORELOS </option>

        
 

         <option value="NT">NAYARIT </option>

        
 

         <option value="NL">NUEVO LEON </option>

        
 

         <option value="OC">OAXACA </option>

 
 

        
 

         <option value="PL">PUEBLA </option>

        
 

         <option value="QT">QUERETARO </option>

        
 

         <option value="QR">QUINTANA ROO </option>

        
 

         <option value="SP">SAN LUIS POTOSI </option>

        
 

         <option value="SL">SINALOA </option>

        
 

         <option value="SR">SONORA </option>

 
 

        
 

         <option value="TC">TABASCO </option>

        
 

         <option value="TS">TAMAULIPAS </option>

        
 

         <option value="TL">TLAXCALA </option>

        
 

         <option value="VZ">VERACRUZ </option>

        
 

         <option value="YN">YUCATAN </option>

        
 

         <option value="ZS">ZACATECAS </option>

 
 

        
 

         <option value="SM">SERV. EXTERIOR MEXICANO </option>

 
 

         <option value="NE">NACIDO EN EL EXTRANJERO </option>

lunes, noviembre 30, 2009

Empezare a publicar algunas funciones de programación en php.

jueves, junio 25, 2009

Pues quiero comentarles que el día de ayer me enteré que hay un mexicano como speaker en la famosa conferencia de Hacker que se realiza en las Vegas llamada DEFCON. Según tengo entendido yo es el segundo mexicano que dará una conferencia en DEFCON el primero fue Enrique Sánchez (nahual).

Hkm como todos lo conocemos fue seleccionado para hablar sobre los módems 2wire y sus vulnerabilidades.

Hkm muchas felicidades y recuerda prometiste traerme un suvenir

www.hakim.ws

www.defcon.org

miércoles, abril 21, 2004

Hace más de 5 años que se estaban empezando a popularizar los Blogs. Desde el 2004 registre este Blog pero no he agregado nada absolutamente, espero poder ir agregando cosas sobre noticias en general, mi punto de vista sobre algunos temas, cosas de programación y seguridad.

Saludos