Mostrando entradas con la etiqueta PHP. Mostrar todas las entradas
Mostrando entradas con la etiqueta PHP. Mostrar todas las entradas

miércoles, 10 de agosto de 2011

Sumar los valores de filas y columnas de una tabla en PHP

Ayer, un amigo me preguntó:
¿Cómo puedo obtener la sumatoria de los valores de una fila? y además,
¿Cómo puedo obtener la sumatoria de los valores de la columna?

También me comentó que no había encontrado una solución después de realizar varias búsquedas en Google, no tuve más que crearla y compartirla, aquí el código de PHP:

<?php

/* VARIABLES
$nf = número de filas
$nc = número de columnas
$ct= total de columna
$ft= total de fila
$cf = total de columna sumatoria de fila
*/
$cf='';
$ft='';
$c='';
$ct[]=''; 
echo '<table>';
for ($i = 0; $i <= $nf; $i++) {
echo '<tr>';
for ($c = 1; $c <= $nc; $c++) {
echo '<td>'.$c.' </td>';
$ft+=$c;
     if ( ! isset($ct[$c])) {
      $ct[$c]= null;
     }
$ct[$c]+=$c;
}

echo '<td style="background:yellow">'.$ft.' </td>';
$cf+=$ft;
$ft=0;
echo '</tr>';

}
echo '<tr>';
for ($c = 1; $c <= $nc; $c++) {
echo '<td style="background:lime">'.$ct[$c].'</td>';
}
echo '<td style="background:lime">'.$cf.'</td>';
echo '</tr></table>';
?>

Breve explicación:
  • Los valores de la tabla se toman del contador del FOR, pero puede ser aleatorio o extraídos de una base de datos.
  • La tabla es flexible, sólo basta con cambiar el número de filas (variable $nf) y el número de columnas (variable $nc) para crecer o decrecer el tamaño de la tabla.
  • Coloqué un color representativo para las sumatorias: amarillo para la suma de los valores de la fila, verde para la suma de los valores de las columnas.

El resultado:


martes, 29 de septiembre de 2009

Video tutorial: Integrar fotos de Flickr en sitios Web o Blogs (jQuery, API Flickr, PHP)

Preparé un video tutorial para el blog llamado Nettuts, el cual muestro en 5 minutos como integrar fotos desde Flickr a nuestro sitio web o blog utilizando el API de Flickr, PHP y jQuery, este último para mostrar las fotos estilo diapositivas con un efecto FadeIn / FadeOut. ¡Disfrútenlo!

Nota: ¿Desean el código fuente?

martes, 21 de julio de 2009

Menú dinámico / activo con categorías y sub-categorías en PHP y CSS

Después del post (Menú activo con CSS y PHP), me llego una pregunta sobre cómo mantener seleccionada la categoría, tras haber dado click en una sub-categoría, es decir:

Tengo un menú horizontal, el cual tengo las categorías principales: Inicio - Servicios - Portafolio, a su vez tengo un menú vertical con las sub-categorías, ejemplo: Servicios -> Desarrollo web, quiero mantener activo el item de la categoría y además el item de la sub-categoría al entrar a ella.

¿Cómo se hace esto?

Tomaremos como ejemplo el CSS del post anterior para dar diseño a nuestros menus, de tal forma que quedará lo siguiente:

#menu, #menu-vertical{
padding: 0;
width: 100%;
background: transparent;
voice-family: "\"}\"";
voice-family: inherit;

}

#menu ul{
font: bold 11px Arial;
margin:0;
margin-left: 20px;
padding: 0;
list-style: none;

}

#menu li{
display: inline;
margin: 0 2px 0 0;
padding: 0;
text-transform:uppercase;

}

#menu-vertical li{
display:block;
margin: 15px 0 0 0;
padding: 0;
text-transform:uppercase;
}

#menu a {
float: left;
display: block;
color: white;
margin: 0 1px 0 0; /*Margenes entre el menu*/
padding: 5px 10px;
text-decoration: none;
letter-spacing: 1px;
background-color: black; /*Color por Default*/
border-bottom: 1px solid white;
}

#menu-vertical a {
color: white;
margin-left:0px;
padding:5px;
text-decoration: none;
letter-spacing: 1px;
background-color: black; /*Color por Default*/
border-bottom: 1px solid white;
}

#menu a:hover{
background-color: #535353; /*Menu hover bgcolor*/
}

#menu #current a, #menu-vertical #current a{ /*TAB seleccionado, Página Actual*/
background-color: #80931D;
border-color: #80931D;

}
.clean {clear:both;}

HTML

<div id="menu">
<ul>
<li <?php Menu("/lab/menuactive/active-menu.php","");?> ><a href="active-menu.php" title="Inicio" class="active">INICIO</a></li>
<li <?php Menu("/lab/menuactive/active-menu2.php",""); ?> ><a href="active-menu2.php" title="segundo" class="active">SEGUNDO</a></li>
</ul></div>
<div class="clean"></div>
<div id="menu-vertical">
<ul>
<li <?php Menu("/lab/menuactive/active-menu.php","/lab/menuactive/active-menu-principal.php"); ?> ><a href="active-menu-principal.php" title="Inicio" class="active">Principal</a></li>
<li <?php Menu("/lab/menuactive/active-menu.php","/lab/menuactive/active-menu-principal2.php"); ?> ><a href="active-menu-principal2.php" title="segundo" class="active">Secundario</a></li>

<li <?php Menu("/lab/menuactive/active-menu2.php","/lab/menuactive/active-menu-principal3.php"); ?> ><a href="active-menu-principal3.php" title="Inicio" class="active">Principal de Segundo</a></li>
</ul></div>


- La función de Menu trabaja con 2 parametros, el 1. es la categoría, 2. la sub-categoría. Se incluye entre las listas, porque imprimirá el id=current, el cual indica que esta el item activado. En las categoría se deja en blanco el parametro de sub-categoría por obvias razones, pero para la subcategoría es importante agregar la categoría y el enlace a la sub-categoría misma del item.

PHP

function Menu ($direccion,$subdireccion) {

/* El array $secciones, mantiene los enlaces de las categorías y sub-categorías,
active-menu.php es la categoría que tiene como sub-categorías a active-menu-principal.php
y active-menu-principal2.php, es ahí donde debes agregar las sub-categorías, para que
funcione el script. */

$secciones = array(
"/lab/menuactive/active-menu.php" => array (
"/lab/menuactive/active-menu-principal.php",
"/lab/menuactive/active-menu-principal2.php"
),

"/lab/menuactive/active-menu2.php" => array (
"/lab/menuactive/active-menu-principal3.php"
)
);


//Obtiene el URL actual
$url = $_SERVER['PHP_SELF'];

//Aquí es donde se hace la magía
foreach ($secciones as $llave=>&$valor)
{

if($direccion==$llave && $subdireccion==$url){
echo 'id="current"';
}

if($direccion==$llave && $subdireccion==""){
foreach ($valor as $valores){
if($url==$valores or ereg($direccion,$url))
echo 'id="current"';
}
}
}
}
DESCARGAR ARCHIVOS
Ojo: Debes cambiar la dirección URL (ruta) de tus enlaces (ejemplo: /lab/menuactive por la ruta en donde coloques tus archivos)

Ejemplo funcionando:




martes, 19 de mayo de 2009

Los errores más comunes de un programador PHP

Uno de los lenguajes más usados para el desarrollo web es, sin duda, PHP, y no solo por ser fácil de aprender, si no porque hay mucha información disponible en la red desde tutoriales hasta foros donde la misma comunidad te brinda de su ayuda.
PHP es uno de los pocos que no existe declaración de variables, volviendo más flexible el desarrollo, pero este beneficio, trae consigo problemas en seguridad y errores en la sintaxis.

Los errores más comunes que se cometen al usar PHP como lenguaje para creación de sitios web son:

1) Configuración básica de seguridad

Las nuevas versiones de PHP contienen en su instalación una configuración básica de seguridad (la cual es la indispensable), pero en ocaciones nuestro servidor tiene habilitado o deshabilitado opciones que podrán beneficiar o perjudicar la seguridad de nuestras aplicaciones, para conocer esta configuración, se necesita saber que opciones tiene habilitadas PHP, para ello se utiliza la función phpinfo(), la cual mostrará las configuraciones que contiene el archivo php.ini. Para ello debes realizar lo siguiente:
  1. Imprime la función phpinfo(); en un archivo blanco de PHP.
  2. Las siguientes opciones deben estar en los siguientes estados, si no es así cambialos:
    1. register_globals: desactivadas off.
    2. safe_mode: activado on
NOTA: register_globals y safe_mode han sido eliminados en la versión 6.0.0. de PHP.
Más información en PHP Seguridad

2) Usar una versión vieja de PHP (como PHP4)

¿Sigues usando la versión PHP4?, sabias que PHP4 tiene niveles de seguridad muy bajos y que además no cuenta con muchas funcionalidades necesarias para desarrollo de una aplicación potente que se puede lograr con PHP5. Por ejemplo, PHP4 aun no es posible la programación orientada a objetos (que en el siguiente punto, lo explico).

3) No convertir caracteres a su entidad HTML
No hay que confiar en los usuario!!. Algunos datos que los usuarios envian a nuestra aplicación es posible que se encuentre infectada. Infectada me refiero a que quieran realizar ciertas acciones o sentencias que pueden modificar el contenido de nuestro sitio, es por ello que debemos limpiar esos datos, para ello se realiza lo siguiente:
htmlspecialchars($_GET['comentarios'], ENT_QUOTES);

4) Inyección SQL
Puedes consultar este punto, en mi blog: "Inyección SQL: Hackeando páginas web".

5) Comillas simples o dobles
Si en algunas ocaciones has visto estos signos entre palabra \' o \", hay un problema de magic_quotes. Es porque se tiene habilitado la opción magic_quotes_gpc dentro del archivo php.ini, y realizar lo siguiente:

$variable="¿te apellidas O\'reilly?";

//Imprimira ¿te apellidas O'reilly? , sin \
echo stripslashes($variable);


6) Mal empleo de HTTP-headers
Cuando usamos: session_start(); , header(); , setcookie(); , en ocaciones recibimos el warning siguiente:
warning: Cannot add header information - headers already sent....
Si recibe este warning, es posible que no los estas usando en la parte cabecera del sitio, para su solición realiza lo siguiente:
  1. output_buffering = off en php.ini.
  2. Agrega ob_start(); al principio de tu página, y ob_end_flush(); al final de tu página para liberar el buffer.

7) No proteger ID session
El ID es un dato muy sensible dentro de una aplicación. Por ejemplo, la contraseña de un usuario.

Si el dato no cuenta con encriptación:
if ($_SESSION['contrasena'] == $contrasena) {
//Area protegida
}
Si el dato tiene encriptación:
if ($_SESSION['contrasena'] == sha1($contrasena)) {
//Area protegida
}
8) No usar OOP (Programación Orientada a Objetos) para creación de aplicaciones web

Las ventajas de usar este paradigma de programación son:
  1. Fomenta la reutilización y extensión del código.
  2. Facilita el mantenimiento del software.
  3. Permite crear sistemas más complejos.
  4. Agiliza el desarrollo de software.
  5. Facilita la creación de programas visuales.
  6. Facilita el trabajo en equipo.
  7. Relacionar el sistema al mundo real.
Fuente: Programación Orientada a Objetos

9) No incluir otros lenguajes como JavaScript
¡No todo realiza de manera eficiente PHP!. Un ejemplo simple es la validación de formularios. PHP es un lenguaje que se ejecuta en el servidor, por ende, tiene que enviar los datos al servidor, y desde ahi verificarlos. Al usar JavaScript para realizar esta acción se evita el refrescado del sitio, acelerando la velocidad de respuesta de la aplicación web, ya que se ejecuta en el navegador y no en el servidor. Por esa y otras razones nace JavaScript.

10) No conocer Frameworks
Los frameworks o marco de trabajo, se utilizan para facilitar el desarrollo, ya que proveen de una estructura para la implementación en la aplicación (más información).
En pocas palabras te facilitará la creación de la aplicación web por su caracteristica MVC (Modal View Controller), pero claro no todo es oro, si usas un framework dependerás de el.

Los 10 Top frameworks de PHP son:
  1. Yii
  2. CodeIgniter
  3. PHPDevShell
  4. CakePHP
  5. Akelos
  6. Prado
  7. Symfony
  8. Zend
  9. Zoop
  10. QPHP
Fuente: Top 10 PHP Frameworks

martes, 13 de enero de 2009

"The Woork Handbook" - libro gratis sobre desarrollo y diseño web

Soy seguidor desde hace un tiempo del blog Woork de Antonio Lupetti. Un blog con temas diversos en diseño y desarrollo web, así como códigos propios del autor. Hace unos días publico un interesante libro, llamado "The Woork HandBook", el cual contiene un copy-paste de todos los post sobresalientes. Los artículos contienen además del código, ilustraciones, enlaces a los post donde se publicaron dichos artículos, imagenes, etc. Lo que les puedo decir, es que, no es un libro común y corriente, es más bien, "querido diario", "el recuento" del trabajo de Antonio, es muy entretenido, ya que se deja aun lado mucha teoría, y es más bien "manos a la obra". Lo recomiendo bastante!.

miércoles, 17 de diciembre de 2008

Acordiones (Cheat Sheets) para Desarrolladores Web

No cabe duda que es complicado acordarse de todas las sintaxis, elementos, y demás en cada lenguaje de programación web, ahora acordarse para todos es aun más complicado, es por eso que tuve la tarea de buscar algunos acordiones (cheat sheets) que nos simplificarán el trabajo a la hora de desarrollar.

lunes, 3 de noviembre de 2008

¿Cómo comprobar si Javascript esta activo o no?

Un problema en que nos encontramos muchos de los desarrolladores web es el encontrarse con usuarios que su navegador no soporta o no tiene activado código de Javascript. Y es un grave problema si el sitio se encuentra lleno de AJAX, o por lo menos, algunas alertas en Javascript.

La mejor manera de detectar si el navegar tiene soporte de Javascript, es con las etiquetas de HTML, noscript.

¿Cómo usarlo?
Dentro de la etiqueta Body, se agregará lo siguiente:
Lo que hará el código anterior, es mandar un mensaje de alerta sobre su Navegador, e informandole que tiene que hacer, si el usuario prefiere no usar Javascript, lo redireccionará a un sitio sin Scripts, en donde se podrá informar más al usuario/visitante.
Se puede usuar el código en una página principal, o en el HEADER del sitio, pero a su vez, se puede usuar incluyendola desde un página aparte con el INCLUDE de PHP, el cual, solo se incluiría en páginas que usen Javascript, un ejemplo:
En la página soporta_javascript.html se incluirá el código explicado anteriormente, el cual se incluira en las páginas que contienen código javascript, si no lo soporta, se redireccionará a una sin script.

jueves, 16 de octubre de 2008

Cómo enviar todos los datos de un Formulario con AJAX


En las pasadas entradas (véase AJAX), comentábamos cómo cargar datos de manera asíncrona con AJAX.

Pero no hemos trabajado en el envío de datos con formularios, que es en si, algo muy básico. Generaremos un script genérico para no cambiarlo cada vez que necesitemos usarlo para otro formulario, además haremos que los datos que se envían en otra página, se reciban en una sección especifica.

1. Crearemos nuestro formulario, por ejemplo agregar una noticia:



Una breve explicación:
  1. El formulario debe tener name y id, con el mismo nombre, a su vez cada campo.
  2. Se añade el evento ONCLICK en el boton, el cual EnviarForm (el nombre de la función creada en AJAX) envía 4 parametros: noticiasa.php (en donde se enviarán los datos, y en dicha página se recibirán con POST o REQUEST). c=3 (es la sección de la página a donde se enviarán los datos, para una explicación más profunda en Enviar valores con AJAX). noticias (id, nombre del formulario). contenido (nombre del DIV, ver en Cargar páginas con AJAX).

2. Creación del Script de AJAX

Recuerden que para que funcione nuestro script, debemos crear primero el Objeto de AJAX, de esta manera:

function ajaxFunction() { var xmlHttp; try { // Firefox, Opera 8.0+, Safari xmlHttp=new XMLHttpRequest(); return xmlHttp; } catch (e) { // Internet Explorer try { xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); return xmlHttp; } catch (e) { try { xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); return xmlHttp; } catch (e) { alert("Tu navegador no soporta AJAX!"); return false; }}}}

Ya creado, podremos añadir nuestra función para el envío de todos los campos del formulario:

function EnviarForm(_pagina,seccion,formid,capa) {
var ajax;
var
Formulario = document.getElementById(formid);
var longitudFormulario =
Formulario.elements.length;
var cadenaFormulario = "";
var
sepCampos;
sepCampos = "";
for (var i=0; i <= Formulario.elements.length-1;i++) { cadenaFormulario += sepCampos+Formulario.elements[i].name+'='+encodeURI(Formulario.elements[i].value); sepCampos="&"; } ajax = ajaxFunction(); ajax.open("POST", _pagina, true); ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); ajax.onreadystatechange = function() { if (ajax.readyState==1){ document.getElementById(capa).innerHTML =
}
if (ajax.readyState == 4) {
document.getElementById(capa).innerHTML = ajax.responseText;
}
}

ajax.send(cadenaFormulario+"&"+seccion);
}


Una breve explicación:
  1. EnviarForm(_pagina,seccion,formid,capa): Se reciben los valores que enviamos con el formulario.
  2. Enviamos todos los campos en cadenaFormulario, además concatenamos en que sección de la página los recibiremos (seccion).

3. Recibiendo los valores de los campos

En nuestra página (noticiasa.php), agregaremos lo siguiente:

if($_REQUEST["c"]==3){
if(!empty($_REQUEST["titulo"]) or
!empty($_REQUEST["tags"]) )
{
echo $_REQUEST["titulo"]; //Titulo de la Noticia
}

Una breve explicación:
  1. Con el IF, pregunto si el valor de la variable C, es de 3, que es el caso.
  2. Después veo si las variables no están vacías con la función EMPTY.
  3. Por ultimo, imprimo el titulo de la noticia.

viernes, 3 de octubre de 2008

Enviar valores con AJAX y recibirlos con REQUEST o POST (PHP)

En el post anterior (Cargar páginas con PHP y AJAX), comentábamos como sería la forma básica para comenzar con AJAX con las llamadas a otras páginas de manera asíncrona.

Ahora bien, vamos a suponer, que en la página que vamos a cargar, tiene secciones dentro de esta, y solo queremos mostrar una de ellas. Para ello podemos pensar de la manera que lo haríamos con PHP, por ejemplo: Vamos crear un vínculo a la página TARIFAS, lo cual seria asi:



Pero, nosotros queremos mostrar la tarifa para la renta de un Coche, entonces nuestro enlace se le añadirá lo siguiente:


Si tenemos un poco de experiencia con PHP, sabremos que llamamos la pàgina “Tarifas.php” y en la cual mandamos el valor “coches” en la variable “tarifa”.
Recibiremos el valor de la variable “tarifa” con el método POST o REQUEST, de la siguiente forma:


¿Pero como se puede realizar lo anterior con AJAX?

1. Creamos el objeto de AJAX (véase antes: Cargar páginas con PHP y AJAX y Cómo añadir ‘Cargando’ (loading) a AJAX).

2. Agregamos la siguiente función:



La cual recibe la página, el valor, y la capa en donde se cargaran los datos, y lo que envía es el valor recibo.

3. Ya por ultimo, la creación de nuestro enlace, del ejemplo de Tarifas, pero ahora en versión para AJAX:




Y listo!, ahí se tiene una llamada asíncrona con envío de valores.

jueves, 18 de septiembre de 2008

Menú activo con CSS y PHP (en 2 diferentes formas)

Por su dinamismo, el menú interactivo da mucha vida a una página web. El usuario de manera visual se da cuenta en que sección esta del sitio, sin necesidad de remarcar el titulo de dicha sección.


¿Cómo ocurre?

En enlace del menu se queda selecionando al momento que se le da click, indicando la página actual que se esta mostrando en pantalla.

Ejemplo: Aquí muestro un sistema de reporte de prácticas que estoy haciendo en PHP, AJAX, CSS, etc., el cual, si notan, esta seleccionado "Usuarios", y se esta mostrando la página de dicho titulo. Dentro de esta tengo un TAB, el cual al igual que el menú horizontal princiapl, esta haciendo lo mismo, pero de manera embebida.
¿Cómo hacer un menú activo (current / active) ?

Existen muchas maneras, pero yo las he hecho en 2 formas diferentes, en mi parecer una es más funcional que la otra, pero cada quien a su criterio las usará, que al final, se trata de hacer lo mismo.
Crearemos nuestro archivo CSS, donde personalizaremos nuestro menú. (OJO no se necesita conocer mucho de CSS para hacer este tipo de menús, la verdad!!. No les explicaré el código por su simpleza, pero si, tienen dudas, no duden en preguntar).
/* Horizontal menu */

#menu{
padding: 0;
width: 100%;
background: transparent;
voice-family: "\"}\"";
voice-family: inherit;
}

#menu ul{
font: bold 11px Arial;
margin:0;
margin-left: 20px;
padding: 0;
list-style: none;
}

#menu li{
display: inline;
margin: 0 2px 0 0;
padding: 0;
text-transform:uppercase;
}

#menu a{
float: left;
display: block;
color: white;
margin: 0 1px 0 0; /*Margenes entre el menu*/
padding: 5px 10px;
text-decoration: none;
letter-spacing: 1px;
background-color: black; /*Color por Default*/
border-bottom: 1px solid white;
}

#menu a:hover{
background-color: #535353; /*Menu hover bgcolor*/
}

#menu #current a{ /*TAB seleccionado, Página Actual*/
background-color: #80931D;
border-color: #80931D;
}

Ya teniendo nuestra hoja de estilo pasaremos a programar nuestro menú, para ello, explicaré la primera forma:

1. Menú activo con función:
Crearemos una función que nos indiqué si estamos en la página actual


function Menu($sitio) {
$url = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
if(ereg($sitio,$url)) {echo 'id="current"'; }
}

y el código de nuestro menú


Lo explico, la función llamada Menu, se manda ejecutar, recibiendo, la dirección del enlace, este se compara con la página actual que se este visuelizando en pantalla (por medio de HTTP_HOST y PHP SELF), si concuerdan estos dos (EREG), imprimirá/agregará el current (del CSS, quedando asi seleccionado.
Para mí esta es la mejor opción, porque trabaja con EREG (busca coincidencias), y no importa si nuestra página actual tiene envio de datos por GET, ejemplo: usuarios.php?id=3&cuenta=2, de todos modos servirá.
2. Menú activo con Array (vector)
Otra de las formas que conozco, es usar un array con las páginas que tenemos en nuestro sitio web.
$url=$_SERVER['REQUEST_URI']; //Obtengo la página actual

Después creo el Array:
$current = Array(
"index.php" => "Inicio",
"cuenta.php" => "Cuenta",
"usuarios.php" => "Usuarios");
Obtengo el valor:
$title=$current[$url];

Despues de esto, comparare lo que me esta devolviendo title, en cada enlace de nuestro menu:



Esta forma no es muy conveniente por lo que les comentaba anteriormente, pero funciona también!.

lunes, 15 de septiembre de 2008

Cargar páginas con PHP y AJAX

Se han preguntado ¿Cómo cargar una página dentro de un DIV sin recargar todo el sitio?

Por ejemplo:
Tienen un menu vertical y otro horizontal, y entre ellos se encuentra el contenido del sitio, y es en donde quieres cargar nuevo contenido con los enlaces de los menus.



1. Ya sea que el código de AJAX, lo guardes en un archivo .JS, o lo pongas en el HEAD de tu sitio, es lo mismo, a mi gusto, prefiero guardarlo en un archivo .js, y mandarlo llamar desde mi head, por ejemplo, el nombre de mi archivo se llama AJAX.JS, y esta dentro de la carpeta JS:


2. Crearemos el objeto AJAX (XMLHttpRequest) de multi-navegador, para que tanto pueda trabajar con FireFox Mozilla, Safari, Internet Explorer, etc. nuestra llamada asíncrona.


function ajaxFunction() {
var xmlHttp;
try {
// Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
return xmlHttp;
} catch (e) {
// Internet Explorer
try {
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
return xmlHttp;
} catch (e) {
try {
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
return xmlHttp;
} catch (e) {
alert("Tu navegador no soporta AJAX!");
return false;
}}}
}

3. Ya creado el objeto de AJAX, vamos a crear una función para mandar llamar nuestra página de manera asíncrona:


function Enviar(_pagina,capa) {
var
ajax;
ajax = ajaxFunction();

ajax.open("POST", _pagina, true);

ajax.setRequestHeader("Content-Type",
"application/x-www-form-urlencoded");
ajax.onreadystatechange = function()
{

if (ajax.readyState == 4)
{
document.getElementById(capa).innerHTML =
ajax.responseText;

}}
ajax.send(null);
}


4. Si notan, el enlace debe contener los parametros de PAGINA y CAPA, me refiero a la página que se va abrir en el DIV, y la CAPA es el DIV en donde se va cargar la página del enlace, en nuestro caso se llama "contenido". Quedando de esta manera cualquiera de los menus:

Las páginas a cargar dentro del div, no deben de llemar etiquetas HTML, HEAD, TITLE. por ejemplo (esta página se llamaria pagina-a-cargar.php):

Un punto importante es, que en nuestra página principal (donde se encuentren los links, ejemplo Index.php, de la figura que he puesto al principio) tengamos nuestro DIV llamado contenido dentro de las etiquetas BODY:



Y listo!, ya tienen como llamar de manera asíncrona una página!...

ACTUALIZACIÓN 26/junio/2009: Quite el status==200, por alguna razón firefox, no toma el valor de status, y simplemente trabaja con readyState.

ACTUALIZACIÓN 02/febrero/2011: Ahora ya pueden cargar archivos PDF con AJAX. Antes recuerden que AJAX solo lee XML, por lo que se realizó lo siguiente:

- Se creó un archivo llamado pdf.html, el cual contiene lo siguiente:

<object data="twitter.pdf" type="application/pdf" width="750" height="600">
alt : <a href="twitter.pdf">twitter.pdf</a>
</object>

De tal forma que, se agrega el object junto con el nombre del archivo.

- Se agregó el botón PDF en el menú, con el código exactamente igual que las opciones anteriores, lo único es que se cambia el nombre de la página.

Lamentablemente tengo los archivos en un servidor donde no acepta PHP, pero pueden cambiar el valor del nombre del archivo PDF. Lean mi post Enviar valores con AJAX y recibirlos con REQUEST o POST (PHP) . Después de la explicación, verán que es posible agregar variables y recibir sus valores con AJAX.


VER EJEMPLO / DEMO >>>

DESCARGAR ARCHIVOS >>>



Certificación oficial en PHP

¿En que me puede ayudar una certificación en PHP?

Currículum
Aumentar el valor correspondiente de su sueldo anual
Ser más competitivo en la búsqueda de empleo
Obtener el titulo de “Profesional en PHP”

¿Quién me puede ofrecer una certificación oficial en PHP?

Zend, una compañía encargada en el desarrollo de productos relacionados con el desarrollo, despliegue y gestión de negocios basado en PHP (aplicaciones web).
Además tiene como servicio, la certificación de PHP de manera oficial.

¿Qué obtengo al certificarme con ZEND PHP Company?

Zend (http://www.zend.com/), es la empresa más conocida en el área de desarrollo en PHP, sacando provecho a esto, ZEND lanza “Zend`s Yellow Pages”, una sección amarilla para los profesionales en PHP, certificados en su empresa. La gran mayoría de las empresas buscan sus trabajadores en estas páginas amarrillas, así que estamos hablando de un alto porcentaje de encontrar empleo en tu área cercana.
LinkeIn, una red social exclusiva para profesionales de PHP, es otro de los servicios que te ofrece ZEND.

¿Dónde puedo realizar el examen de certificación con ZEND PHP Company?

El examen lo puedes hacer atravez de la certificadora Pearson VUE (http://www.vue.com/)

¿Cuánto cuesta el examen?

El examen cuesta $125 dolares

¿Dónde puedo encontrar material de estudio gratis para pasar mi examen de certificación?

En Internet hay muchos recursos, guías, videos para pasar este examen. Uno de manera oficial y más actual es:

Zend PHP 5 Certification Package
Es el paquete con todo el contenido para pasar el examen de certificación de PHP con ZEND Company, incluye:

- Intro to PHP (video!)
- PHP Language Basics
- PHP and Forms
- PHP Web Features
- Strings and Regular expressions
- Working with Arrays
- Working with Databases
- PHP Functions
- Object-Oriented PHP
- Handling Exceptions
- Managing Files
- Streams and Sockets
- XML
- Web Services
- PHP Security

Descargar:
http://rapidshare.com/files/114438129/CNtsZndPHP5P.part1.rar
http://rapidshare.com/files/114518946/CNtsZndPHP5P.part2.rar

viernes, 22 de agosto de 2008

Inyección SQL - Hackeando páginas web

Las típicas preguntas que nos hacemos:
¿Cómo puedo hackear una página web?
¿Cuál es la manera más fácil de hacerlo?
Soy inexperto en Hacking, ¿podré hacerlo?

Pues bien, la manera más fácil es buscar una vulnerabilidad en el nivel de validación de las entradas a la base de datos, como por ejemplo el área de administración (Login/Password) del sitio.
Una inyección SQL sucede cuando se inserta o "inyecta" un código SQL "invasor" dentro de otro código SQL para alterar su funcionamiento normal, y hacer que se ejecute maliciosamente el código "invasor" en la base de datos.
Fuente: Wikipedia

Con el auge de los sitios/plataformas web desarrollados en PHP y ASP, conforme a eso también se han visto las distintas vulnerabilidades en estos. Ya que el máximo problema que existe es la Inyección SQL.

Pero, ¿Cómo se hace?

Comúnmente los desarrolladores novatos hacen su sistema de validación de usuarios de esta forma:
$usuario=$_POST['usuario'];
$pass=$_POST['pass'];
$sql="SELECT * FROM
usuarios WHERE usuario= '$usuario' AND contrasena='$pass'";

Al ejecutar el mismo, si coincide en la base de datos, entrara ya sea a crear la sesión o actualizar el estado del campo.
Obviamente para entrar debemos conocer el usuario y contraseña correcta, pero nosotros inyectaremos un código malicioso para que nos devuelva un TRUE en la consulta.

Colocaremos lo siguiente, en el formulario de administración:

Usuario: admin
Contraseña: ' or''='

A la hora que se ejecute la sentencia, permitirá a entrar al sitio web! y listo!

Si eres desarrollador, te interesara como evitar todas las vulnerabilidades de inyecciones.

PHP
En php se utiliza la función mysql_real_escape_string, la cual escapa caracteres especiales de una cadena para su uso en una sentencia SQL.
Entonces tu consulta agregando esta función quedaría:
$sql="SELECT * FROM usuarios WHERE usuario=
\"".mysql_real_escape_string($usuario). "\"" AND
contrasena=\"".mysql_real_escape_string($pass). "\""";
ASP
Para asp se utiliza de la siguiente manera:

Dim Usuario, Password, RS, SSQL Usuario = Request.Form("txtUsuario")
Password = Request.Form("txtPassword") SSQL = "SELECT count(*) FROM
Usuarios WHERE Usuario = '" & Usuario & "' AND password='" &
Password & "'" Set RS = Server.CreateObject("ADODB.Recordset")
RS.Open SSQL, "Cadena de conexion" If (RS.EOF)
Then Response.Write "Acceso denegado."
Else Response.Write "Te has identificado como " &
RS("Usuario") End IfSet RS = Nothing
Donde txtUsuario y txtPassword vienen del formulario donde pedimos el Usuario y Contraseña.

lunes, 21 de abril de 2008

Decodificador de archivos CSV

Los ficheros CSV (del inglés comma-separated values) son un tipo de documento sencillo para representar datos en forma de tabla, en las que las columnas se separan por comas (o punto y coma en donde la coma es el separador decimal: España, Francia, Italia...) y las filas por saltos de línea. Los campos que contengan una coma, un salto de línea o una comilla doble deben ser encerrados entre comillas dobles. (Wikipedia)

Son muy utilizados para importar / exportar el contenido de la base de datos, para una mejor manipulación.

Hace unas semanas desarrolle un herramienta / programa en PHP, que permite:

* Decodificar archivos de texto plano en formato CSV
* Interpretar y cuenta su contenido
* Generar un archivo de salida en CSV que contenga los datos de una selección de filas.

El archivo .RAR, contiene:

- Index.php
-Archivo fuente CSV, llamado EdKEL.csv


Para poder descodificar otro archivo en vez de (EdKEL.csv), basta con modificar el Index.php, en la linea de código:

$handle = fopen("EdKEL.csv", "r");
cambiarlo por $handle=fopen("Ruta/NombredelArchivo.csv","r");