Previo Siguiente

Función ¿Cuánto tiempo has vivido? con PHP

Interesante función que he usado muchas veces para saber en detalle en tiempo de vida de una persona. Bastará con colocar la fecha de nacimiento de la persona y el código hará el resto:<?phpclass Age{var $age = \'\'; function calculateAge($iTimestamp) { $iDiffYear = date(\'Y\') - date(\'Y\',...

Quitar imagenes rotas con jQuery ó Mootools

Probablemente colgemos una imagen de otro servidor ó servicios de alojamiento en nuestras páginas web. Existe la posibilidad de que con el tiempo cambie de ubicación de ésta y en nuestra página web en vez de aparecer la imagen sale una alternativa indicándonos que la dirección a la imagen que haciamos referencia es incorrecta (imagen rota). Existe una forma de prevenir...

Monitorear servidor web usando PHP

Volviendo a la batalla después de más de un mes, encontre un script bien práctico en Who Cat Code de cómo monitorear tu servidor web haciendo uso de PHP. El script es pequeño y fácil de entender:<?phpfunction check($host, $find) { $fp = fsockopen($host, 80, $errno, $errstr, 10); if (!$fp) { ...

Backup (copia seguridad) de tablas MySQL con PHP

Esta clase en PHP nos permite realizar una copia de seguridad de todas las tablas de una base datos MySQL. Es fácil de implementar, configurar y usar. Es una buena práctica realizar constantemente una copia de nuestros datos, así no tendremos que sufrir por ellos si pasara algún imprevisto. Esta clase cuenta con las siguiente características:Crea un archivo con extensión...

Scripts para interactuar con Twitter

Twitter logoComo Twitter está de moda CatsWhoCode nos presenta 10 fragmentos de códigos, en diversos lenguajes de programación, para interactuar con este servicio.

Por ejemplo está este código en PHP que obtiene el número de seguidores.

<?php
$xml=file_get_contents('http://twitter.com/users/show.xml?screen_name=catswhocode');
if (preg_match('/followers_count>(.*)</',$xml,$match)!=0) {
$tw['count'] = $match[1];
}
echo $tw['count'];
?>

Ó puedes probar esta otra para obtener la actividad reciente en tu cuenta de Twitter:

<?php
function get_status($twitter_id, $hyperlinks = true) {
$c = curl_init();
curl_setopt($c, CURLOPT_URL, "http://twitter.com/statuses/user_timeline/$twitter_id.xml?count=1");
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
$src = curl_exec($c);
curl_close($c);
preg_match('/<text>(.*)<\/text>/', $src, $m);
$status = htmlentities($m[1]);
if( $hyperlinks ) $status = ereg_replace("[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]", "<a href=http://feedproxy.google.com/%22//0/%22>//0</a>%22, $status);
return($status);
}
?>

Nosotros mencionamos anteriormente un código en PHP para enviar mensajes aTwitter.

Enlace:  10 code snippets to interact with Twitter

Aplicación: Editor de tablas MySQL con AJAX

Mysql ajax table editor

Mysql Ajax Table Editor es una aplicación web de código abierto que nos facilita la adición y edición de los datos de una tabla MySQL.

Además de los básicos añadir, editar, copiar, borrar y ver; los registros pueden ser paginados, ordenados (por columna), buscados (y búsqueda avanzada) y exportados a formato CSV.

Algo interesante es el poder unir varias tablas mediante el operador JOIN en las consultas SQL. También los nombres de las columnas pueden ser personalizados para una mejor presentación. Viene con 5 idiomas listo para usar.

Funciona sobre PHP 4 y PHP 5.

Sitio web: http://www.mysqlajaxtableeditor.com/
Demo: http://www.mysqlajaxtableeditor.com/Example1.php

Conversor de divisas (moneda) con PHP y Google

Un clase en PHP que realiza la conversión de divisas ó moneda realizando una búsqueda en Google del tipo: 50 USD in PEN, donde 50 es el monto a cambiar de dólar estadounidense a nuevo sol peruano. La clase captura el resultado y lo almacena en una variable la cual podemos usar ó mostrar. El este caso es: 146.99 nuevos soles. Podemos ver estandar internacional ISO con el código de tres letras para todas las monedas del mundo.

La clase en PHP:

<?php
class currencyCoverter
{
public $fromCurr = 'USD';
public $toCurr = 'PEN'; //por defecto
function __construct($amount, $to, $from)
{
if(intval($amount) > 0){
$this->amount = intval($amount);
}
if(trim($to) != ''){
$this->toCurr = $to;
}
if(trim($from) != ''){
$this->fromCurr = $from;
}
}
function getUpadte()
{
$returnHtml = array();
$page = 'http://www.google.com/search?&q='.$this->amount.'+' . $this->fromCurr . '+in+' . $this->toCurr;
$returnRawHtml = file_get_contents( $page );
preg_match_all('/<h2 class=r(.*)\<\/h2\>/Uis',$returnRawHtml,$returnHtml,PREG_PATTERN_ORDER);
if (isset($returnHtml[0][0]))
{
$gRate = strip_tags($returnHtml[0][0]);
return $gRate;
}
else {
return false;
}

}
}
?>

Uso:

<?php
require_once('currencies.class.php');
$FromCurrency = 'USD';
$ToCurrency = 'PEN';
$amount = 90;
$converter = new currencyCoverter($amount, $ToCurrency, $FromCurrency);
$result = $converter->getUpadte();
echo $result;
?>

Vía PHPClasses

Clase Paginador PHP con AJAX

En PHPClasses encontramos una clase en PHP de un paginador. Lista los datos de una tabla en MySQL y su paginador en la parte inferior, pero además permite realizar una búsqueda en la base de datos y paginar los resultados. Todo lo anterior mediante llamadas AJAX, sin tener que recargar la página. 

La clase tiene muchas opciones de configuración como: páginas a mostrar, registros por página, establecer conexión, etc.

Usando la clase

<?php
// this is only used in debugging,
// use error_reporting(0) in production environment
error_reporting(E_ALL || E_STRICT);

include('paginator.class.php');
// instantiate mysqli connection
$conn = new mysqli('localhost', 'root', '','empresa') ;

$query = "SELECT * FROM customers";
//$query = "SELECT * FROM customers WHERE id > 1";

// Number of records per page
$recordsPerPage = 5;
if(!empty($_GET['search'])){
$searchQuery = $_GET['search'];
}

$pageId= intval($_GET['page']);
if (empty($pageId)) {
$pageId = 1;
}else{
$pageId = intval($pageId);
}
// if you are testing it locally uncomment the following line
// to see how it is going to look like
//sleep(2);

$paginator = new Paginator($pageId,$recordsPerPage,$query,$conn);

$paginator->debug = FALSE;

// field(s) to search in
// string or array of fields
$paginator->fields = 'name';
//$paginator->fields = array('name','id');

$paginator->searchQuery = $searchQuery;

// call the core function that paginates
$rows = $paginator->paginate();
?>

<!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>
<script language="JavaScript" src="pagination.js"></script>
<link href="style.css" rel="stylesheet" type="text/css">
<script type="text/javascript" src="js/ajax.js"></script>
<script type="text/javascript" src="js/ajaxUpdater.js"></script>
<script type="text/javascript" src="js/paginate.js"></script>
</head>

<body>
<div id="wrapper">
<div id='search-box' class="search-box">
<form action="<?=$_SERVER['PHP_SELF']?>" onsubmit='paginate();return false;'>
<input id="search" type="text" class="search" />
<input type="submit" value="search" class="button" />
</form>
</div>

<div id="listing_container">
<table border="0" cellpadding="2" cellspacing="0" class="listing">
<tr>
<th nowrap="nowrap" width="40" align='left'> ID</th>
<th nowrap="nowrap" width="450" align='left'>Name</th>
</tr>
<?php

foreach($rows as $row){
echo "<tr>";
echo "<td nowrap='nowrap' align='center'>{$row['id']}</td>";
echo "<td nowrap='nowrap' align='left'>{$row['name']}</td>";
echo "</tr>";
}

echo "</table><br />";
$links = $paginator->getLinks ();
echo "<div class='paginator'> " . $links ;

echo "<p>Page " . $paginator->pageId . " of " . $paginator->totalPages . "</p>";

?>
</div><!--end of paginator-->
</div><!--end of listing_container-->
</div><!--end of wrapper-->
</body>
</html>

El resultado ...

Paginacion AJAX PHP Clases

Para descargar cualquiera de los script que encontramos en PHPClasses debemos registrarnos.

Descargar | Class: AJAX Paginator

Pequeño calendario con PHP y jQuery

Web calendarHace poco en un artículo explicando un mantenimiento de datos con PHP, MySQL y AJAX (con jQuery) adjunte un pequeño calendario hecho con PHP. No pude explicar su funcionamiento, pero ahora lo haré rapidamente. No se trata de un calendario avazando y con muchas opciones de configuración, pero es funcional para salir de apuros. Espero les sea de utilidad. [Ver demo] [Descargar]

El archivo principal se llama calendario.php, tiene 3 funciones:

  • ultimoDia, nos averigua el último día del mes y año a mostrar con fin de totalizar los días que se mostrarán en un tabla html.
  •  calendar_html, muestra la cabecera del calendario un combo select para mes y otro para el año. También muestra los días según el mes y año llamando a la función calendar.
  • calendar, arma una tabla html para mostrar los días según mes y año seleccionados.
<?php
function ultimoDia($mes,$ano){
$ultimo_dia=28;
while (checkdate($mes,$ultimo_dia + 1,$ano)){
$ultimo_dia++;
}
return $ultimo_dia;
}

function calendar_html(){
$meses= array('Enero','Febrero','Marzo','Abril','Mayo','Junio','Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre');
//$fecha_fin=date('d-m-Y',time());
$mes=date('m',time());
$anio=date('Y',time());
?>
<table style="width:200px;text-align:center;border:1px solid #808080;border-bottom:0px;" cellpadding="0" cellspacing="0">
<tr>
<td colspan="4">
<select id="calendar_mes" onchange="update_calendar()">
<?php
$mes_numero=1;
while($mes_numero<=12){
if($mes_numero==$mes){
echo "<option value=".$mes_numero." selected=\"selected\">".$meses[$mes_numero-1]."</option> \n";
}else{
echo "<option value=".$mes_numero.">".$meses[$mes_numero-1]."</option> \n";
}
$mes_numero++;
}
?>
</select>
</td>
<td colspan="3">
<select style="width:70px;" id="calendar_anio" onchange="update_calendar()">
<?php
// años a mostrar
$anio_min=$anio-30; //hace 30 años
$anio_max=$anio; //año actual
while($anio_min<=$anio_max){
echo "<option value=".$anio_min.">".$anio_min."</option> \n";
$anio_min++;
}
?>
</select>
</td>
</tr>
</table>
<div id="calendario_dias">
<?php calendar($mes,$anio) ?>
</div>
<?php
}

function calendar($mes,$anio){
$dia=1;
if(strlen($mes)==1) $mes='0'.$mes;
?>
<table style="width:200px;text-align:center;border:1px solid #808080;border-top:0px;" cellpadding="0" cellspacing="0">
<tr style="background-color:#CCCCCC;">
<td>D</td>
<td>L</td>
<td>M</td>
<td>M</td>
<td>J</td>
<td>V</td>
<td>S</td>
</tr>
<?php

//echo $mes.$dia.$anio;
$numero_primer_dia = date('w', mktime(0,0,0,$mes,$dia,$anio));
$ultimo_dia=ultimoDia($mes,$anio);

$total_dias=$numero_primer_dia+$ultimo_dia;

$diames=1;
//$j dias totales (dias que empieza a contarse el 1º + los dias del mes)
$j=1;
while($j<$total_dias){
echo "<tr> \n";
//$i contador dias por semana
$i=0;
while($i<7){
if($j<=$numero_primer_dia){
echo " <td></td> \n";
}elseif($diames>$ultimo_dia){
echo " <td></td> \n";
}else{
if($diames<10) $diames_con_cero='0'.$diames;
else $diames_con_cero=$diames;

echo " <td><a style=\"display:block;cursor:pointer;\" onclick=\"set_date('".$anio."-".$mes."-".$diames_con_cero."')\">".$diames."</a></td> \n";
$diames++;
}
$i++;
$j++;
}
echo "</tr> \n";
}
?>
</table>
<?php
}
?>

Otro proceso importante lo encontramos en el archivo setvalues.php, este archivo sirve de puente para las llamadas AJAX, entre la funcion JavaScript que llamará al calendario y la función PHP que mostrará el calendario.

<?php
require('calendario.php');
$mes=$_GET['month'];
$anio=$_GET['year'];
$dia=1;
calendar($mes,$anio);
?>

Como se puede apreciar solo llama a la función calendar, osea la que se encarga de armar la tabla html con los días a mostrar según los parametros $mes y $anio. Pero ... ¿de donde se obtiene estos valores?

Veamos las funciones JavaScript del archivo jquery.functions.js:

  • update_calendar, obtiene los valores de los combo select mes y anio para capturar dichos valores y así realizar una petición al archivo setvalues.php contestando así la pregunta anterior.
  • set_date, establece la fecha seleccionada en el text input deseado y oculta el calendario.
  • show_calendar, muestra u oculta el calendario.
// funciones del calendario

$(document).ready(function(){
//div donde se mostrará calendario debe estar oculto
$('#calendario').hide();
});

function update_calendar(){
var month = $('#calendar_mes').attr('value');
var year = $('#calendar_anio').attr('value');

var valores='month='+month+'&year='+year;

$.ajax({
url: 'setvalue.php',
type: "GET",
data: valores,
success: function(datos){
$("#calendario_dias").html(datos);
}
});
}

function set_date(date){
//input text donde debe aparecer la fecha
$('#fecha').attr('value',date);
show_calendar();
}

function show_calendar(){
//div donde se mostrará calendario
$('#calendario').toggle();
}

Finalmente veamos su funcionamiento en este caso el archivo index.php 

<title>Mini Calendario Web</title>
<script type="text/javascript" src="js/jquery-1.3.1.min.js"></script>
<script type="text/javascript" src="js/jquery.functions.js"></script>
</head>

<body>
<form id="formulario">
<p>
<label for="fecha"> Selecciona la fecha
<input type="text" name="fecha" id="fecha" /> <a onclick="show_calendar()" style="cursor: pointer;"><small>(calendario)</small></a>
<div id="calendario">
<?php calendar_html() ?>
</div>
</label>
</p>
</form>
</body>

Como pueden apreciar:

  • llamamos a los archivos JavaScript necesarios (incluyendo jQuery)
  • incluimos un link llamando a la función show_calendar()
  • también mostramos el calendario completo dentro del div id="calendario".

El resultado lo pueden ver aqui ó descargarlo. Espero les sea útil el código para que ustedes hagan sus modificaciones ó personalicen mejor.

Técnicas de manejo de excepciones JavaScript

Es importante saber el manejo de excepciones ó errores cuando se programa con JavaScript. Es estar un paso adelante de lo que pueda ocurrir y darle otra salida a los errores que puedan ocurrir en nuestras aplicaciones web que hacen uso de JavaScript. Veamos alguns técnicas:

Usando el bloque try...catch

El bloque try...catch en JavaScript es muy similar en uso al que implementan otros lenguajes de programación. El bloque try evalua el código y el bloque catch captura y muestra el error. 

<script type="text/javascript">
window.onload = function()
{
try
{
var x = 90;
var value = x / y;
}
catch(err)
{
document.write(err.name + ": " + err.message + "<br/>");
}
}
</script>

Resultado es el tipo y la descripción del error, en este caso: ReferenceError: y is not defined

Además también podemos usar el último bloque de la sentencia try...catch, veamos:

<script type="text/javascript">
window.onload = function()
{
try
{
var x = 90;
var value = x / y;
}
catch(err)
{
document.write(err.name + ": " + err.message + "<br/>");
}
finally
{
alert('This is finally block');
}
}
</script>

Usando evento onerror

El evento onerror ocurrirá cada vez que hay algún error al realizar una acción en el documento.

<script type="text/javascript">
window.onload = function()
{
var x = 90;
var value = x / y;
}

window.onerror = function(errorMessage, fileName, lineNumber)
{
document.write('Error: ' + errorMessage);
}
</script>

Usando jQuery

Esto es similar al uso del evento onerror pero con sintáxis jQuery

$(window).error(
function(errorMeaage, fileName, lineNumber)
{
// handle error here
}
);

Vía Daily Coding