Enviar formulario con AJAX usando jQuery (paso a paso)

Un interesante tutorial que nos muestra la forma de enviar los datos de un formulario html sin necesidad de recargar la página, es decir con AJAX, usando jQuery. Los datos son recibidos por un script hecho en PHP.

jQuery Formulario Ajax

Enlace |Submit A Form Without Page Refresh using jQuery | Código fuente

Bucles en Javascript, la manera correcta de implementarla

En la actualidad el lenguaje JavaScript ha tomando su lugar como un requisito importante en el desarrollo-programación de aplicaciones web. Por eso vemos tantos frameworks, librerías y otras formas similar para hacer uso de este lenguaje sin morir en el intento, lo cual es realmente de mucha ayuda. Pero hay desarrolladores que desea hechar mano del JavaScript (digamos tradicional, es decir sin frameworks) y para ello es importante que escriba su código de tal manera que no perjudique la performance de su aplicación.

Justamente media Ajaxian veo algo relacionado a esto que comentamos (en Gregory Reimer's Weblog para ser más exactos) y allí se explica, mediante ejemplos, la forma correcta y más rápida (nos referimos a la ejecución) de escribir bucles en JavaScript. Para muestra veamos, como pasamos de esto:

// looping a dom html collection
for (var i=0, node; node = hColl[i++];) {
// do something with node
}

a este otra forma cuyo tiempo de ejecución es considerablemente menor.

var i = arr.length; while (i--) {}

El desempeño del código dependerá del navegador y las características de nuestra PC. Puedes ver una prueba completa aquí.

 

UrlRewriter.NET: Reescribir URL en ASP .NET (URL's amigables)

En un artículo anterior hablamos acerca de los enlaces ó URLs amigables que nos es más que convertir esos enlaces dinámicos generados por el lenguaje de servidor que usamos a enlaces estáticas. En aquella ocasión echamos mano del archivo .htaccess para configurar las urls en nuestro servidor Apache. ¿Y que hay de las aplicaciones web hechas en ASP .NET?

UrlRewriter.Net es un componente open-source, ligero y altamente configurable para ASP .NET 1.1 y 2.0. Este componente proporciona características para reescritura de urls similares a los módulos de Apache mod_rewrite configurados en el archivo .htaccess.

Por si no quedo claro. Gracias a que podemos reescribir los urls de nuestro sitio web mediante UrlRewriter.Net podemos hacer esto:

URL antes de reescribirla
http://localhost:2661/URLRewrite2/DynamicPage.aspx?MyTitleId=1

Después de reescribir la url

http://localhost:2661/URLRewrite2/Article/Asp-Net-website-paths-1.aspx

Ha eso se le llama también urls amigables ó urls usables (relacionada con usabilidad).

¿Cómo usar el UrlRewriter.Net?

Pues eso es lo mejor, puede ver este post URL Rewriting with URLRewriter.Net Simplest Way que muestra paso a paso la forma de implementar este componente en nuestro sitio web si trabajamos con ASP .NET. Puedes descargar un ejemplo también.

Enlaces | Descargar UrlRewriter.Net

Detectar dispositivo móvil con PHP

Diferenciar entre dispositivos móviles y navegadores de escritorio con PHP

Un dilema a la hora de desarrollar contenidos para móviles es cómo diferenciar entre dispositivos móviles y navegadores de escritorio. La manera adecuada de hacer esto es usando una base de datos de todos los dispositivos móviles que existen, tales como DeviceAtlas ó WURFL (acá se explica cómo). Pero existen algunos inconvenientes.

Menos mal que siempre en el desarrollo de aplicaciones existen soluciones alternas (claro no tan fiables en este caso) que cubren esta necesidad.

El siguiente código PHP detecta el dispositivo móvil que está solicitando una petición a nuestra web y de acuerdo a ello mostrará un contenido más compacto y ligero.

El código se basa en una lista de los más conocidos navegadores móviles (alrededor de 90) y algunos casos especiales para Opera Mini, estándares W3C y algunos navegadores para Windows.

He probado este código con un navegador de escritorio y 2 navegadores móviles distintos. El resultado ha sido favorable.

<?php
$mobile_browser = '0';

//$_SERVER['HTTP_USER_AGENT'] -> el agente de usuario que está accediendo a la página.
//preg_match -> Realizar una comparación de expresión regular

if(preg_match('/(up.browser|up.link|mmp|symbian|smartphone|midp|wap|phone)/i',strtolower($_SERVER['HTTP_USER_AGENT']))){
$mobile_browser++;
}

//$_SERVER['HTTP_ACCEPT'] -> Indica los tipos MIME que el cliente puede recibir.
if((strpos(strtolower($_SERVER['HTTP_ACCEPT']),'application/vnd.wap.xhtml+xml')>0) or
((isset($_SERVER['HTTP_X_WAP_PROFILE']) or isset($_SERVER['HTTP_PROFILE'])))){
$mobile_browser++;
}

$mobile_ua = strtolower(substr($_SERVER['HTTP_USER_AGENT'],0,4));
$mobile_agents = array(
'w3c ','acs-','alav','alca','amoi','audi','avan','benq','bird','blac',
'blaz','brew','cell','cldc','cmd-','dang','doco','eric','hipt','inno',
'ipaq','java','jigs','kddi','keji','leno','lg-c','lg-d','lg-g','lge-',
'maui','maxo','midp','mits','mmef','mobi','mot-','moto','mwbp','nec-',
'newt','noki','oper','palm','pana','pant','phil','play','port','prox',
'qwap','sage','sams','sany','sch-','sec-','send','seri','sgh-','shar',
'sie-','siem','smal','smar','sony','sph-','symb','t-mo','teli','tim-',
'tosh','tsm-','upg1','upsi','vk-v','voda','wap-','wapa','wapi','wapp',
'wapr','webc','winw','winw','xda','xda-');

//buscar agentes en el array de agentes
if(in_array($mobile_ua,$mobile_agents)){
$mobile_browser++;
}

//$_SERVER['ALL_HTTP'] -> Todas las cabeceras HTTP
//strpos -> Primera aparicion de una cadena dentro de otra
if(strpos(strtolower($_SERVER['ALL_HTTP']),'OperaMini')>0) {
$mobile_browser++;
}
if(strpos(strtolower($_SERVER['HTTP_USER_AGENT']),'windows')>0) {
$mobile_browser=0;
}

if($mobile_browser>0){
// Mostrar contenido para dispositivos móviles
// Estos pueden ser más ligeros: un titulo, resumen y algunos enlaces.
// Aca puede redirigir a la ruta donde este el contenido para moviles
// Por ejemplo: http://miweb.com/movil ó http://movil.miweb.com
echo 'hola navegador cell phone';
}else{
// Contenido que se puede apreciar en navegadores de escritorio
echo 'hola navegador normal';
}
?>

Este código lo subí a http://ribosomatic.com/ejemplos/ejemplo.php y pueden probarlo con su dispositivo móvil, el mensaje deberá ser: hola navegador cell phone.

Colección de tutoriales, tips y recursos para PHP

PHPInformación que todo desarrollador-programador en PHP debe tener a la mano. Interesante artículos sobre como implementar PHP agregando ciertas funcionalidades en nuestras aplicaciones web, además algunos recursos a tener en cuenta y algunos recordatorios-tips.

Tutoriales

Ver Artículo Completo ››

¿Cómo descompilar un programa hecho con Visual Basic 5.0 y 6.0?

Visual BasicHe aquí un forma, de las tantas seguramente, para descompilar -obtener el código fuente- cualquier programa escrito en Visual Basic (.EXE, .DLL, .OCX). Funciona con programas escritos en Visual Basic 5.0. y 6.0.

Como hacerlo

  • Descargamos el software VB Decompiler.
  • Una vez instalado e iniciado, seleccionamos el programa a descompilar.
  • Presionamos el botón Decompile y ya está.


¿Fácil verdad? Pero si eres programador en Visual Basic .... ¿recomendarías otra herramienta?

Cómo instalar WordPress en varios dominios de un solo golpe

Este es un tip para el WordPress normal (no WordPress MU). Con el fin de hacer esto debes contar con algun conocimiento de PHP.

Primero sube todo los archivos de WordPress a tu host/servidor. Luego, vamos a describir los dominios donde instalaremos WordPress.

Vamos al archivo wp-config.php y haremos algunas modificaciones. Para que tengas una idea de como debe quedar, he aquí un ejemplo. Asumiendo que tengas 3 dominios: dominio1.com, dominio2.net, domino3.biz, el archivo wp-config.php quedaría así:

// ** Configuracion MySQL ** //
define('DB_NAME', 'dbname'); // El nombre de tu base de datos
define('DB_USER', 'user'); // Usuario MySQL
define('DB_PASSWORD', 'password'); // ...y la clave
define('DB_HOST', 'localhost'); // por lo general este valor no cambia
define('DB_CHARSET', 'utf8');
define('DB_COLLATE', '');

// Como vamos a instalar varios wordpress es una sola base de datos es necesario que cada
// tabla cuente con un prefijo para distingirlos

$current_sitename= $_SERVER[’HTTP_HOST’];

if (($current_sitename == “dominio1.com”) || ($current_sitename == “www.dominio1.com”)){
    $table_prefix = ‘dominio1_’;
}elseif (($current_sitename == “dominio2.net”) || ($current_sitename == “www.dominio2.net”)){
    $table_prefix = ‘dominio2_’;
}elseif (($current_sitename == “dominio3.biz”) || ($current_sitename == “www.dominio3.biz”)){
    $table_prefix = ‘dominio3_’;
}

Luego de modificarlo, según la cantidad de tus dominios, guarda los cambios. Ahora puedes iniciar el proceso de instalación de forma normal.

PostData: No he probado este tip, pero teniendo en cuenta que con WordPress se puede hacer maravillas seguro que funciona.

Vía SmileShop

Cómo implementar COMET con PHP y Prototype (2)

Creando un pequeño sistema de chat

Para esto necesitamos:
  • PHP >= 5.2.0 (incluye función json_encode por defecto)
  • Un archivo para el intercambio de datos - simple archivo de texto (datos.txt).
  • Un script PHP que se encargará de la petición HTTP persistente (peticion.php).
  • Un archivo HTML que cargue el código JavaScript y que muestre los mensajes/datos del servidor (index.html).
  • La biblioteca Prototype.

El script peticion.php

Este script hará dos cosas:
  • Escribir en el archivo datos.txt los nuevos mensajes que envie el cliente.
  • Hacer un bucle infinito siempre y cuando datos.txt no haya sido modificado.
<?php
// dirname -> parte del path correspondiente al directorio
$filename = dirname(__FILE__).'/datos.txt';

// almacenamos un nuevo mensajes en el archivo
$msg = isset($_GET['msg']) ? $_GET['msg'] : '';
if ($msg != ''){
//file_put_contents -> escribir una cadena sobre un archivo
file_put_contents($filename,$msg);
die();
}

// bucle infinito mientras los datos del archivo no son modificados
$lastmodif = isset($_GET['timestamp']) ? $_GET['timestamp'] : 0;

//filemtime -> obtiene la hora de modificación del archivo
$currentmodif = filemtime($filename);
while($currentmodif <= $lastmodif){ // verificar si el archivo de datos ha sido modificado
usleep(10000); // hacemos descansar al CPU por 10ms

//clearstatcache -> limpia la cache de estado de un archivo
clearstatcache();
$currentmodif = filemtime($filename);
}

// devolvemos array en formato json
$response = array();

//file_get_contents -> lee un archivo entero en una cadena
$response['msg'] = file_get_contents($filename);
$response['timestamp'] = $currentmodif;
echo json_encode($response);

//flush -> vaciar el búfer de salida
flush();
?>

El archivo index.html

Este documento HTML cargará la librería Prototype dentro de las etiquetas <head>, luego en el cuerpo del documento (<body>) creamos un contenedor: <div id="content"></div>, donde se mostrarán los mensajes procedentes de datos.txt. Finalmente, se creará mediante JavaScript un objeto Comet que llamará al script peticion.php para ver los nuevos mensajes del chat.

El objeto comet enviará respuesta AJAX cada vez que un nuevo mensaje se ha recibido y cada vez que un nuevo mensaje se ha enviado. La conexión persistente es usado solo para ver los nuevos mensajes. Usamos un parámetro url (timestamp) para identificar el último mensaje, así el servidor devolverá el contenido de datos.txt solo cuando la fecha/hora de modificación sea mas reciente que la fecha/hora del cliente.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Comet demo</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript" src="prototype.js"></script>
</head>
<body>

<div id="content">
</div>
<p>
<form action="" method="get" onsubmit="comet.doRequest($('word').value);$('word').value='';return false;">
<input type="text" name="word" id="word" value="" />
<input type="submit" name="submit" value="Enviar" />
</form>
</p>
<script type="text/javascript">
var Comet = Class.create();
Comet.prototype = {
timestamp: 0,
url: './peticion.php',
noerror: true,
initialize: function(){ },
connect: function(){
this.ajax = new Ajax.Request(this.url, {
method: 'get',
parameters: { 'timestamp' : this.timestamp },
onSuccess: function(transport) {
// manejamos la respuesta del servidor
var response = transport.responseText.evalJSON();
this.comet.timestamp = response['timestamp'];
this.comet.handleResponse(response);
this.comet.noerror = true;
},
onComplete: function(transport) {
// enviamos nueva petición ajax cuando esta haya finalizado
if (!this.comet.noerror)
// si conexión tuvo problemas, intentar reconectar cada 5 segundos
setTimeout(function(){
comet.connect()
}, 5000);
else
this.comet.connect();
this.comet.noerror = false;
}});
this.ajax.comet = this;
},
disconnect: function(){ },
handleResponse: function(response){
$('content').innerHTML += '<div>' + response['msg'] + '</div>';
},
doRequest: function(request){
new Ajax.Request(this.url, {
method: 'get',
parameters: { 'msg' : request }
});
}
}
var comet = new Comet();
comet.connect();
</script>
</body>
</html>

Anteriormente hicimos un ejemplo de Chat con AJAX + PHP. Donde cada cierto tiempo el cliente pide al servidor información de nuevos mensajes. En esta oportunidad no es así, por que se mantiene una conexión persistente con el servidor de acuerdo a una condición. Eso si cuando se trata de conexiones persistente hay que darle descanso al servidor. Ahora si nosotros cambiamos el archivo datos.txt por una tabla en MySQL(... ó cualquier otro manejador de BD). Entonces debemos avergiuar sobre como mantener conexiones persistentes en base de datos. Que en realidad se puede, pero no es una configuración por defecto en los Hostings. Quizás de manera local podamos hacer pruebas y así tener una idea de como estás técnicas - que comunmente vemos implementadas en servicios como Meebo, Google Talk (web) y más - funcionan. 

Estos dos ejemplos mostrados fueron tomados de Zeitoun.net, los cuales modificamos y testeamos para poder darlo a conocer en nuestra querida lengua.

Fuente original: How to implement COMET with PHP

 

Cómo implementar COMET con PHP y Prototype

Comet es una técnica de programación que permite a los servidores web enviar datos al cliente sin ninguna necesidad de que éste lo solicite. En aplicaciones AJAX ocurre lo contrario, el cliente (el navegador web) no puede ser notificado en tiempo real por el servidor si se han producido cambios en éste. Es el usuario quien deberá realizar la petición, quizás haciendo clic en un vinculo, botón ó mediante una solicitud periódica a fin de obtener datos del servidor.

En está oportunidad vamos aplicar Comet con PHP y Prototype. Nos basaremos en un iframe oculto. El objetivo es que el cliente no pida al servidor, sino que el servidor envie datos al cliente.

El servidor nos retornará la hora UNIX

  • Necesitaremos un script en PHP que se encargará de la petición HTTP persistente (backend.php).
  • Un archivo HTML, donde irá el código JavaScript necesario y donde mostraremos los datos procedementes del servidor (index.html).
  • La librería Prototype (y un poquito de conocimiento de está librería).

El archivo backend.php

El script backend.php, hará un bucle infinito y devolverá la hora UNIX siempre y cuando el cliente esté conectado.

<?php
header("Cache-Control: no-cache, must-revalidate");
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
flush();
//flush -> vacia el búfer de salida de PHP y ademas envia todo lo escrito (echo, print, ect) al navegador del cliente

?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Comet php backend</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>

<script type="text/javascript">
//Navegadores KHTML no compartes javascripts entre iframes
var is_khtml = navigator.appName.match("Konqueror") || navigator.appVersion.match("KHTML");
if (is_khtml)
{
var prototypejs = document.createElement('script');
prototypejs.setAttribute('type','text/javascript');
prototypejs.setAttribute('src','prototype.js');
var head = document.getElementsByTagName('head');
head[0].appendChild(prototypejs);
}
// cargamos objeto comet (esto en realidad es el nombre del iframe)
var comet = window.parent.comet;
</script>

<?php
while(1) { // while (1) permite un bucle infinito
echo '<script type="text/javascript">';
echo 'comet.printServerTime('.time().');';
echo '</script>';
flush();
sleep(1); // un descanso para aliviar el CPU del servidor
}
?>
</body>
</html>

El archivo index.html

Este documento HTML cargará la librería Prototype dentro de las etiquetas <head>, también creamos dentro de <body> un contenedor donde se mostrará el resultado de la petición al servidor, ó sea la hora UNIX: <div id="content"> </div>, y finalmente se creará el objeto Comet que se conectará a nuestro archivo PHP.

El objeto Coment crea etiquetas <iframe> invisibles (esto quizás varie en algunos navegadores). Estos iframes se encargarán de crear el "terreno" (por así decirlo) para la conexión HTTP persistente al archivo/script PHP.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Comet demo</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript" src="prototype.js"></script>
</head>
<body>
<div id="content">La hora del servidor se mostrará aqui</div>

<script type="text/javascript">
var comet = {
connection : false,
iframediv : false,

initialize: function() {
if (navigator.appVersion.indexOf("MSIE") != -1) {

// Para navegadores IE
comet.connection = new ActiveXObject("htmlfile");
comet.connection.open();
comet.connection.write("<html>");
comet.connection.write("<script>document.domain = '"+document.domain+"'");
comet.connection.write("</html>");
comet.connection.close();
comet.iframediv = comet.connection.createElement("div");
comet.connection.appendChild(comet.iframediv);
comet.connection.parentWindow.comet = comet;
comet.iframediv.innerHTML = "<iframe id='comet_iframe' src='./backend.php'></iframe>";

} else if (navigator.appVersion.indexOf("KHTML") != -1) {

// Para navegadores KHTML
comet.connection = document.createElement('iframe');
comet.connection.setAttribute('id', 'comet_iframe');
comet.connection.setAttribute('src', './backend.php');
with (comet.connection.style) {
position = "absolute";
left = top = "-100px";
height = width = "1px";
visibility = "hidden";
}
document.body.appendChild(comet.connection);

} else {

// Para otros navegadores (Firefox...)
comet.connection = document.createElement('iframe');
comet.connection.setAttribute('id', 'comet_iframe');
with (comet.connection.style) {
left = top = "-100px";
height = width = "1px";
visibility = "hidden";
display = 'none';
}
comet.iframediv = document.createElement('iframe');
comet.iframediv.setAttribute('src', './backend.php');
comet.connection.appendChild(comet.iframediv);
document.body.appendChild(comet.connection);

}
},
// esta función será llamada desde backend.php
printServerTime: function (time) {
$('content').innerHTML = time;
},
onUnload: function() {
if (comet.connection) {
comet.connection = false; // se eliminará el iframe para prevenir problemas con IE cuando se recargue la pagina.
}
}
}
Event.observe(window, "load", comet.initialize);
Event.observe(window, "unload", comet.onUnload);
</script>

</body>
</html>

En resumen, mediante JavaScript/Protype creamos en iframe donde aparecerá el contenido generado por backend.php, es este archivo el que mantendrá la conexión abierta con el servidor creando así un canal donde el servidor sea quien envie datos al cliente, en este caso la hora UNIX. Veremos luego un segundo ejemplo y seguiremos explicando al respecto.

PHPExcel, libreria PHP para leer y escribir archivos de Excel

Creo que el título lo dice todo. Esta librería permite leer y manipular el contenido de una hoja de cálculo hecha con Microsoft Excel. Vamos directo al grano y veamos un ejemplo. Usaremos Microsoft Office Excel 2007 para la hoja de cálculo, ósea el archivo tendrá la extensión xlsx. También usaremos la versión 5.2.x de PHP.

1. Descargue la libreria PHPExcel

Descargamos la ultima versión. Después de descomprimirla ubicamos la carpeta Clases y la movemos a una carpeta donde pondremos nuestro ejemplo para este caso se llamará phpexcel_ejemplo. De tal manera que quede así: \ruta_servidorphpexcel_ejemploClases.

2. Creamos un documentos de Excel

La hoja de cálculo tendrá el siguiente formato: (descargar archivo de ejemplo). La ubicamos en la carpeta phpexcel_ejemplo.

3. Creamos la interfaz web

Mediante HTML creamos una formulario para el ingreso de los valores, y también escribimos código para usar la librería PHPExcel. Este archio lo guardamos con el nombre de index.php en la carpeta phpexcel_ejemplo.

 <?php
/** Incluir la ruta **/
set_include_path(get_include_path() . PATH_SEPARATOR . './Classes/');

/** Clases necesarias */
require_once('PHPExcel.php');
require_once('PHPExcel/Reader/Excel2007.php');

// Variables de la página
$_VIEWDATA = array(
'v_precioTotal' => 0,
'v_descuento' => 0,
'v_precioFinal' => 0
);

// Petición de cálculo?
if (isset($_REQUEST['boton_calcular'])) {
// Cargando la hoja de cálculo
$objReader = new PHPExcel_Reader_Excel2007();
$objPHPExcel = $objReader->load("calculo.xlsx");

// Asignar hoja de calculo activa
$objPHPExcel->setActiveSheetIndex(0);

// Asignar data
$objPHPExcel->getActiveSheet()->setCellValue('automatico', $_REQUEST['transmision_Automatica']);
$objPHPExcel->getActiveSheet()->setCellValue('cuero', $_REQUEST['asientos_Cuero']);
$objPHPExcel->getActiveSheet()->setCellValue('suspension', $_REQUEST['suspension']);

// Calculos
$_VIEWDATA['v_precioTotal'] = $objPHPExcel->getActiveSheet()->getCell('total')->getCalculatedValue();
$_VIEWDATA['v_descuento'] = $objPHPExcel->getActiveSheet()->getCell('descuento')->getCalculatedValue();
$_VIEWDATA['v_precioFinal'] = $objPHPExcel->getActiveSheet()->getCell('final')->getCalculatedValue();
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Ejemplo</title>
</head>

<body>
<form id="formulario" method="post" name="formulario" action="index.php">
<table>
<tr>
<th>Transmisi&oacute;n autom&aacute;tica :</th>
<td>
<select id="transmision_Automatica" name="transmision_Automatica">
<?php if(isset($_REQUEST['transmision_Automatica'])) { ?>
<option value="<?php echo $_REQUEST['transmision_Automatica']; ?>" selected="selected"><?php echo $_REQUEST['transmision_Automatica']; ?></option>
<?php } ?>
<option value="No">No</option>
<option value="Si">Si</option>
</select>
</td>
</tr>
<tr>
<th>Asientos de cuero:</th>
<td>
<select id="asientos_Cuero" name="asientos_Cuero">
<?php if(isset($_REQUEST['asientos_Cuero'])) { ?>
<option value="<?php echo $_REQUEST['asientos_Cuero']; ?>" selected="selected"><?php echo $_REQUEST['asientos_Cuero']; ?></option>
<?php } ?>
<option value="No">No</option>
<option value="Si">Si</option>
</select>
</td>
</tr>
<tr>
<th>Suspensi&oacute;n:</th>
<td>
<select id="suspension" name="suspension">
<?php if(isset($_REQUEST['suspension'])) { ?>
<option value="<?php echo $_REQUEST['suspension']; ?>" selected="selected"><?php echo $_REQUEST['suspension']; ?></option>
<?php } ?>
<option value="No">No</option>
<option value="Si">Si</option>
</select>
</td>
</tr>
<tr>
<th>&nbsp;</th>
<td>
<input id="boton_calcular" name="boton_calcular" type="submit" value="Calcular" />
</td>
</tr>
</table>
</form>
<?php if (isset($_REQUEST['boton_calcular'])) { ?>

<h2>Detalles del Precio</h2>
<p>Basado en tus preferencias, el precio de tu carro será S/. <?php echo number_format($_VIEWDATA['v_precioFinal'], 2); ?> Nuevos Soles.</p>
<table>
<tr>
<th>Precio Total:</th>
<td><?php echo number_format($_VIEWDATA['v_precioTotal'], 2); ?> Nuevos Soles</td>
</tr>
<tr>
<th>Descuento:</th>
<td><?php echo number_format($_VIEWDATA['v_descuento'] * 100, 2); ?>%</td>
</tr>
<tr>
<td colspan="2"><hr noshade="noshade"></hr>
</tr>
<tr>
<th>Total Final:</th>
<td><?php echo number_format($_VIEWDATA['v_precioFinal'], 2); ?> Nuevos Soles</td>
</tr>
</table>
<p><a href="index.php">Calcular nuevo precio</a></p>

<?php } ?>
</body>
</html>

4. A probar ...!

Vamos al navegador web y escribirmos http://localhost/phpexcel_ejemplo/index.php y tendremos una interfaz con los datos que obtenemos de la hoja de cálculo.

Seguramente se nos ocurrirá muchas cosas en la cual emplear está interesante librería. ¿Y que tal si la combinamos con AJAX?. La librería PHPExcel contiene documentación detallada para usarla correctamente, además de muchos otros ejemplos.

Navegación

Categorias

Archivos