Archivos para ‘Programación’

6 junio 2011

Combos dependientes con jQuery y AJAX

por auraham

Esta es mi adaptación del ejemplo de combos dependientes de 9Lessons.

index.php

<!--?php      //libreria de funciones de DB     include_once("datalib.php"); ?-->

<script type="text/javascript" language="javascript" src="js/jquery-1.6.1.js"></script><script type="text/javascript" language="javascript" src="js/custom.js"></script>

 <!--?php             $result = getAreas();         ?-->

 <select id="subareas" name="subareas"> </select>

connection.php

<!--?php     $username = "user";     $userpass = "pass";     $server   = "localhost";     $database = "database";          $link = mysql_connect($server, $username, $userpass);          mysql_select_db($database, $link); ?-->

datalib.php

<!--?php include_once("connection.php"); function getAreas() {     $query =    "SELECT * ".                 "FROM areas ";          $result = mysql_query($query);          return $result;     } function getSubareas($id_area) {     $query =    "SELECT * ".                 "FROM subareas ".                 "WHERE id_area = $id_area";     //cuidado aqui! xss!          $result = mysql_query($query);          return $result;      } ?-->

ajax.php

<!--?php <br ?-->
include_once("datalib.php");

if($_POST['id_area'])
{
    $id = $_POST['id_area'];

    $result = getSubareas($id);

    while($row = mysql_fetch_array($result))
    {
        $id   = $row['id_subarea'];
        $data = $row['nombre'];

        echo ''.$data.'';
    }
}
?>

js/custom.js


$(document).ready(function()
{

    //Combo areas
    $("#areas").change(function(){

       //valores del combo
       var id_area = $(this).val();

       //valores por POST
       var postdata = "id_area=" + id_area;

       $.ajax({

           type:"POST",
           url:"ajax.php",
           data:postdata,
           cache:false,
           success: function(html)
           {
               $("#subareas").html(html);

           }
       });

    });

});

Fuente:
9Lessons

6 abril 2011

Extracción zip con DotNetZip

por auraham

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Ionic.Zip;
using System.IO;

namespace readMyZip
{
    class Program
    {
        static void Main(string[] args)
        {
            //Ruta del archivo zip
            string filename = "myzip.zip";
            string path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
            string filepath = Path.Combine(path, filename);

            //Ruta de extraccion
            string target = Path.Combine(path, "extract");

            //Extraccion
            using (ZipFile zip = ZipFile.Read(filepath))
            {
                foreach(ZipEntry item in zip)
                {
                    item.Extract(target, ExtractExistingFileAction.OverwriteSilently);
                }
            }

        }
    }
}

Fuente:
DotNetZip
Ejemplos en Codeplex

5 octubre 2010

Cambiar el tamaño de un datepicker en jQuery

por auraham

Edita el archivo del tema de jQuery UI. Por ejemplo, si usas el tema smoothness, el archivo de estilos debe ser :

jquery-ui-1.8.5.custom/css/smoothness/jquery-ui-1.8.5.custom.css

Sólo es necesario cambiar el tamaño de la letra en .ui-widget y el tamaño del datepicker. Opcionalmente puedes cambiar el tamaño de la letra de las fechas por 0.8em o 10px.

/*widget*/
.ui-widget { font-family: Verdana,Arial,sans-serif; font-size: .9em; }

/*datepicket*/
.ui-datepicker { /*no width*/ padding: .2em .2em 0; }
.ui-datepicker table {width: 100%; font-size: 0.8em; border-collapse: collapse; margin:0 0 .4em; }

21 septiembre 2010

Copiar celdas de una hoja de excel a otra en C#

por auraham

using System;

using Excel = Microsoft.Office.Interop.Excel;

namespace WindowsApplication1
{
    public class excel_n
    {
        static void Main()
        {
            string source = "E:\\archivos\\source.xls";         //debe existir
            string destiny = "E:\\archivos\\destiny.xls";       //debe existir
            string temp = "E:\\archivos\\destiny_temp.xls";
            copy(source,destiny,temp);
            Console.ReadKey();

        }

        public static void copy(string source,string destiny,string temp)
        {
            //source
            Excel.Application xlAppSource;
            Excel.Workbook xlWorkBookSource;
            Excel.Worksheet xlWorkSheetSource;
            Excel.Range rangeSource;

            //destiny
            Excel.Application xlAppDestiny;
            Excel.Workbook xlWorkBookDestiny;
            Excel.Worksheet xlWorkSheetDestiny;
            Excel.Range rangeDestiny;

            string str;
            int rCnt = 0;
            int cCnt = 0;

            //Apps
            xlAppSource = new Excel.ApplicationClass();
            xlAppDestiny = new Excel.ApplicationClass();

            //Source
            xlWorkBookSource = xlAppSource.Workbooks.Open(source, 0, false, 5, null, null, false, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, null, true, false, 0, true, false, false);
            xlWorkSheetSource = (Excel.Worksheet)xlWorkBookSource.Worksheets.get_Item(1);
            rangeSource = xlWorkSheetSource.UsedRange;

            //Destiny
            xlWorkBookDestiny = xlAppDestiny.Workbooks.Open(destiny, 0, false, 5, null, null, false, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, null, true, false, 0, true, false, false);
            xlWorkSheetDestiny = (Excel.Worksheet)xlWorkBookDestiny.Worksheets.get_Item(1);//hoja BASE
            rangeDestiny = xlWorkSheetDestiny.UsedRange;

            for (rCnt = 1; rCnt <= rangeSource.Rows.Count; rCnt++)
            {
                for (cCnt = 1; cCnt <= rangeSource.Columns.Count; cCnt++)
                {
                    str = (string)(rangeSource.Cells[rCnt, cCnt] as Excel.Range).Text;
                    //xlWorkSheetDestiny.Cells[rCnt, cCnt] = 10;
                    xlWorkSheetDestiny.Cells[rCnt, cCnt] =  xlWorkSheetSource.Cells[rCnt, cCnt];
                    Console.WriteLine(str);
                }
            }

            //xlWorkBook.Save();
            //xlWorkBook.Close(true, source);

            //Source
            xlWorkBookSource.Close(false,null,null);
            xlAppSource.Quit();

            //Destiny
            xlWorkBookDestiny.Close(true, temp, null);  //guarda destiny con otro nombre
            xlAppDestiny.Quit();

            releaseObject(xlWorkSheetSource);
            releaseObject(xlWorkBookSource);
            releaseObject(xlAppSource);

            releaseObject(xlWorkSheetDestiny);
            releaseObject(xlWorkBookDestiny);
            releaseObject(xlAppDestiny);
        }

        public static void releaseObject(object obj)
        {
            try
            {
                System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
                obj = null;
            }
            catch (Exception ex)
            {
                obj = null;
                Console.WriteLine("Unable to release the Object " + ex.ToString());
            }
            finally
            {
                GC.Collect();
            }
        }

    }
}

Fuente
Csharp.net

11 septiembre 2010

Excel & C#

por auraham

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
//using Microsoft.Office;

namespace excel_test
{
    public class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Prueba de excel");
            RegogerDatos("E:\\libro.xlsx");
            Console.ReadKey();

        }//Main

        //public static List<string> RegogerDatos(string filePath)
        public static void RegogerDatos(string filePath)
        {
            List<string> list = new List<string>();

            //Declaracion de variables
            Microsoft.Office.Interop.Excel._Application xlApp;
            Microsoft.Office.Interop.Excel._Workbook xlWorkBook;    //xlLibro
            Microsoft.Office.Interop.Excel._Worksheet xlWorkSheet;  //xlHoja1
            Microsoft.Office.Interop.Excel.Sheets xlSheets;         //xlHojas

            //File Path
            string path = filePath;

            //Inicializar la variable xlApp (referente a la aplicacion)
            xlApp = new Microsoft.Office.Interop.Excel.Application();

            //Muestra la aplicacion si esta en TRUE
            xlApp.Visible = false;

            //Abrimos el libro de excel
            xlWorkBook = xlApp.Workbooks.Open(path, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);

            try
            {
                //Asignamos las hojas
                xlSheets = xlWorkBook.Sheets;

                //Asignamos la hoja con la que se va a trabajar
                xlWorkSheet = (Microsoft.Office.Interop.Excel._Worksheet)xlSheets["Hoja1"];

                /////aqui iria el resto del codigo para copiar la macro/////
                //string value = (string)xlWorkSheet.get_Range(object cel1, object cell2);
                //string value = (string)xlWorkSheet.get_Range("B" + j, Missing.Value).Text;
                int i = 0;
                //string value = "";
                for (i =1 ; i <=4; i++)
                {
                    string value = (string)xlWorkSheet.get_Range("A" + i, Missing.Value).Text;
                    //value = (string)xlWorkSheet.get_Range("A" + i, Missing.Value).Text;
                    Console.WriteLine("A" + i + " = " + value);

                    string value2 = (string)xlWorkSheet.get_Range("B"+i, Missing.Value).Text;
                    Console.WriteLine("B" + i + " = " + value2);
                }
            }
            finally
            {
                //Cerrar el libro
                xlWorkBook.Close(false, Missing.Value, Missing.Value);

                //Cerrar la aplicacion
                xlApp.Quit();
            }

        }//RecogerDatos()
    }//public class Program
}//namespace excel_test

Fuente

Patopollo

11 septiembre 2010

Hola, C#

por auraham

<pre>
//Declaration de namespace
//Indica que se usara el namespace de System. Un namespace contiene conjuntos de codigo.
//Con esta declaracion se le indica al programa que haras una referencia al namespace System
//sin necesidad de usar "System" en cada uso.
using System;

//Declaracion de clase
//Contiene los datos y metodos de la clase. Una clase es uno de los diferentes tipos de elementos
//que se usan para describir objetos, como structs, interfaces, delegates y enums. Esta clase
//solo tiene un metodo, Main, el cual es el punto de partida para la clase al momento de ejecucion
class Welcome {

    //Metodo Main
    //Se usa el modificador static para especificar que este metodo trabaja solo para esta clase
    //en lugar de una instancia de clase. Esto es necesario porque cuando un programa inicia,
    //no existen instancias de clase
    static void Main() {

        //Console es una clase de namespace System
        //WriteLine() es un metodo de la clase Console
        //Opcionalmente se pudo haber escrito System.Console.WriteLine("Hola Mundo");
        //siguiendo el patron namespace.class.method como "fully qualified statement"
        //pero al usar using System, esto deja de ser necesario.
        Console.WriteLine("Hola Mundo");
        Console.ReadKey();
    }
}
</pre>

Fuente
C# Station

21 agosto 2010

Instalando Android en Netbeans

por auraham

En la página de Android el manual sugiere usar alguna versión de Eclipse para desarrollar aplicaciones con el SDK de Android. Sin embargo también es posible hacerlo dentro de Netbeans descargando un plugin. Para este ejemplo se instalará dentro de Ubuntu. El proceso consiste en instalar el SDK de Android y una plataforma, además del plugin.

Primero, descarga e instala Netbeans con Java SE. Ten en cuenta que debes tener instalado el JDK 5 o 6 primeramente. Si no lo tienes, desde la consola escribe

sudo apt-get install sun-java6-jdk

Después inicia Netbeans y ve al menu Tools/Plugins y selecciona la pestaña Settings. En esta ventana haz clic sobre el boton Add y agrega esto:

  • Name: nbandroid
  • URL: http://kenai.com/downloads/nbandroid/updates.xml

Este es el plugin que provee el proyecto Kenai. Enseguida, ve a la pestaña Available Plugins y escribe en el campo de Search ‘android’. Selecciona la casilla al lado del plugin de Android y presiona Install.

Sigue los pasos del asistente de instalación. En un paso encontraras un mensaje de alerta, sólo presiona Continue y termina la instalación.

Ya se ha instalado el plugin, falta el SDK y una plataforma. Para eso descarga desde la página de Android el SDK.

Descomprime el paquete en el directorio que desees, por ejemplo en

/home/usuario/android/android-sdk-plataforma;

Donde android-sdk-plataforma; es el nombre del archivo al descomprimir. Esta ruta se usará en el siguiente paso.

Edita tu .bashrc con la ruta anterior al final del archivo

export PATH=$PATH:/home/usuario/android/android-sdk-&lt;plataforma&gt;/tools

Ahora puedes ejecutar desde la consola el comando android y aparecera la ventana de Android SDK and AVD Manager. En el panel izquierdo selecciona Available Packages y marca la casilla del SDK que necesites, como el 1.5 o 1.6, por ejemplo. Presiona Install Selected.

Por último sólo se necesita una AVD o Android Virtual Devices, el cual nos permite ejecutar las aplicaciones en el emulador, configurando diferentes cosas como características de hardware o uso de tarjeta SD, entre otras.

Ejecuta desde la consola el comando ‘android’. Selecciona Virtual Devices en el panel izquierdo y presiona New…

En la ventana escribe el nombre del AVD y selecciona un tarjet. Este tarjet se refiere al SDK que se encuentre instalado. Presiona Create AVD.

Listo, con esto ya es posible desarrollar aplicaciones desde Netbeans con el plugin de Android de Kenai.

Fuente:

nbandroid de Kenai

instalación del SDK

Etiquetas:
29 julio 2010

Ocultar | Mostrar mensajes de error en PHP

por auraham

Según el manual de funciones de PHP, podemos desactivar todos los mensajes de error de esta manera:


error_reporting(0);

Otros niveles que se pueden usar en la función son:

// Report simple running errors
error_reporting(E_ERROR | E_WARNING | E_PARSE);

// Reporting E_NOTICE can be good too (to report uninitialized
// variables or catch variable name misspellings ...)
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);

// Report all errors except E_NOTICE
// This is the default value set in php.ini
error_reporting(E_ALL ^ E_NOTICE);

// Report all PHP errors (see changelog)
error_reporting(E_ALL);

// Report all PHP errors
error_reporting(-1);

// Same as error_reporting(E_ALL);
ini_set('error_reporting', E_ALL);

Manual de PHP

Etiquetas: ,
18 enero 2010

Quitar index.php de CodeIgniter

por auraham

Para poder quitar ‘index.php’ de nuestra URL debemos realizar esto

  1. Modificar el archivo .htaccess
  2. Modificar variables en conf.php
  3. Usar el módulo mod_write de Apache
  4. Modificar httpd.conf
  5. Reiniciar

De aquí en adelante nuestra instalación de CodeIgniter se llamará aplicacion_ci y se encuentra en

/usr/local/apache2/htdocs/aplicacion_ci

Modificar el archivo .htaccess
Es necesario modificar este archivo dentro de la carpeta de nuestra aplicación. Se encuentra en

/usr/local/apache2/htdocs/contest/.htaccess

Si no lo puedes ver, presiona Ctrl+H. Una vez abierto, encontrarás algo como

RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]

Reemplaza todo eso por lo siguiente

<IfModule mod_rewrite.c>
    RewriteEngine On

    ##NOMBRE DE LA APLICACION
    #Cambia esta linea por el nombre de tu aplicacion
    #Es decir, si nuestra aplicacion esta en
    #		/usr/local/apache2/htdocs/aplicacion_ci
    #El nombre de la aplicacion sera
    #		/aplicacion_ci/
    RewriteBase /aplicacion_ci

    ##PROTECCION DE SYSTEM
    #Evita que alguna persona pueda entrar directamente al directorio system
    #Si tu carpeta system tiene otro nombre, debes colocarlo aqui tambien
    #Puedes usar la misma sintaxis para ocultar otros directorios
    #Ademas, permite usar un controlador llamado System.php, lo cual, antes no era posible

    RewriteCond %{REQUEST_URI} ^system.*
    RewriteRule ^(.*)$ /index.php?/$1 [L]

    ##VERIFICAR EXISTENCIA DE ARCHIVO
    #Si la URL no comienza con 'system', el servidor web verificara si existe algo que se relacione con
    #la URL, como una imagen, script o directorio
    #Si no existe, manda la peticion a index.php
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?/$1 [L]
</IfModule>

<IfModule !mod_rewrite.c>
    #Si no tenemos el modulo mod_rewrite instalado, todos los 404
    # pueden ser enviados a index.php, y todo trabaja de manera normal
    # Submitted by: ElliotHaughin

    ErrorDocument 404 /index.php
</IfModule>

Modificar variables en conf.php

$config['index_page'] = ”;
$config['uri_protocol'] = ‘QUERY_STRING’;

Usar el módulo mod_write de Apache

Para instalar Apache con mod_write, en caso de que no lo tengas habilitado, visita este post.

Modificar httpd.conf
Hay que asegurarnos de que Apache nos permita usar .htaccess

Es necesario modificar estas líneas

<Directory "/usr/local/apache2/htdocs">
...
Options FollowSymLinks
AllowOverride FileInfo
...
</Directory>

Si te produce algún error, intenta con esto

<Directory "/usr/local/apache2/htdocs">
Options Indexes Includes FollowSymLinks MultiViews
AllowOverride AuthConfig FileInfo
Order allow,deny
Allow from all
</Directory>

Reiniciar
Por último, reinicia apache

apachectl restart

Fuentes

CodeIgniter & ElliotHaughin

31 diciembre 2009

Algo de tiempo libre

por auraham

Pues bien, desde hace días ya iniciaron las vacaciones para muchos, gracias a Dios. Por fortuna, todo va bastante bien por aquí antes de finalizar el año, y el ocio está a la orden del día. Así que qué mejor que curiosear por Internet un par de horas al día.

Estos son los temas que últimamente me han quitado muy buen tiempo:

  • Programar con CodeIgniter
  • CSS
  • SQL Inyection

Aunque sólo son tres cosas, son bastante interesantes.

Programar con CodeIgniter

Ya desde hace meses sigo, ya por mero hobbie, con un pseudoproyecto de base de datos en un servidor tipo LAMP, pero no pensé que me llevara tanto tiempo (¿y quién no?). Así que después de un tiempo me inicié con PHP, y después de ver el espagueti de PHP con CSS que hice, me recomendaron CodeIgniter, un framework opensource bastante bueno para iniciar a programar o arreglar un proyecto anterior. Ofrece muchas facilidades, como una mínima configuración, un completo manual de usuario (también en español), es muy ligero, entre otras. Altamente recomendable para iniciar un proyecto con PHP y MySQL, por supuesto, usando MVC.

CSS

Una cosa lleva a la otra. Así que para tener una mejor presentación volví a empezar con las famosas hojas de estilo. Pues bien, aunque aún no puedo hacer nada extraordinario por mí mismo, he encontrado una fuente obligada para cualquier freelancer. Se trata de Smashing Magazine, un sitio que incluye post dedicados al diseño en muchas ramas, además de explicar ejemplos con CSS, JavaScript, JQuery hasta PHP. Lo mejor de SM es que incluye enlaces a decenas de otras páginas igual de buenas, como Web Deigner Wall. Claro, si no te gusta diseñar, también puedes simplemente descargar algunas cosillas, como íconos, wallpapers o los freebies del Viernes.

SQL Inyection

Un tema diferente a programar es echar algo abajo. Desde hace tiempo he estado interesado en las debilidades de los CMS, tal como Joomla!, pero resulta que es bastante difícil realizar alguna consulta maliciosa. Ni siquiera Milw0rm me ofrece una solución, al menos ninguna actual. En fin, los desarrolladores de Joomla! hacen bien su trabajo, eso lo demuestra.

Por el momento es todo lo que he podido conocer acerca de estos temas y espero poder subir pronto algo decente. Au revoir.

Seguir

Get every new post delivered to your Inbox.