Utilizando XAJAX 0.5 en PHP

Hola tigrillo tu sabes que AJAX es ahora una técnica común al momento de crear un portal web, por eso te quiero mostrar como utilizar una de las tantas librerías AJAX para PHP que existen; Una de las tantas y mas fáciles de aprender es XAJAX, a continuación te mostrare como utilizarla:

  1. Descarga las librerías XAJAX 0.5 desde esta pagina http://xajaxproject.org/download.php.
  2. Una vez que descargaste copia el contenido a una carpeta dentro de tu sitio web(en este ejemplo yo copie a una carpeta llamada xajax).
  3. Luego empiezas a programar; En el ejemplo puedes observar que existen 3 archivos que tienen un mismo nombre en común es decir llevan la palabra “index”, esos archivos están relacionados entre si con la finalidad de poder ejecutar peticiones AJAX .

 
OJO: Hemos clasificado 3 archivos para una sola pagina con la finalidad de mantener un orden al momento de programar y siguiendo la estructura de los ejemplos de la documentación de XAJAX que se asemeja a la programación en capas.

  • index.php, contendrá la fachada y los controles de la pagina.
  • index.server.php, en este archivo se crean las funciones a utilizar
  • index.common.php, se encarga de registrar e invocar las funciones creadas en index.server.php.

y allí te va el código:

INDEX.PHP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?php 
require_once('index.common.php'); 
//Haciendo referencia a las funciones registradas y que serán interpretadas como funciones javascript
 
/********HACIENDO CONSULTA A LA TABLA Ciclo***********/
$db=mysql_connect('localhost','root','');
mysql_select_db('db_alumnos',$db);
 
$rsCiclos=mysql_query('select codciclo,descripcion from ciclo');
/*****************************************************/
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Ejemplo XAJAX</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<?php 
//indicamos al objeto xajax se encargue de generar el javascript de las funciones registradas por ejm: ListarCursosXCiclo
$xajax->printJavascript('xajax/'); 
?>
</head>
<body>
<form name="frmPrueba" id="frmPrueba" method="post">
	Ciclos : 
	<select name="cboCiclos" id="cboCiclos" onChange="xajax_ListarCursosXCiclo(this.value);">
		<option value="">--Seleccione--</option>
	<?php while($row=mysql_fetch_array($rsCiclos)){?>
		<option value="<?php echo $row['codciclo']?>"><?php echo $row['descripcion']?></option>
	<?php }?>
	</select>
	<br><br>
	<!--DIV donde se mostrara la respuesta AJAX-->
	<div id="divListado"></div>
</form>
</body>
</html>

INDEX.SERVER.PHP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<?php 
//importando nuestras las referencias XAJAX
require_once ("index.common.php");
 
//función que lista los Cursos segun el ciclo elegido
function ListarCursosXCiclo($codciclo){ 
	$db=mysql_connect('localhost','root','');
	mysql_select_db('db_alumnos',$db);
 
	$objResponse = new xajaxResponse();
	//instanciamos el objeto para la respuesta AJAX
	//ISO-8859-1 significa que los caracteres latinos como la ñ y los acentos seran tomados en cuenta
 
	$sql=sprintf('select codcur,nomcur,desccur from curso where codciclo=%d',$codciclo);
 
	$rsCursos=mysql_query($sql);
	$cantRegistros=mysql_num_rows($rsCursos);
 
	$tabla=''; //variable donde guardaremos la tabla HTML que luego se mostrara mediante AJAX
 
	if($cantRegistros>0){ // Si existen registros entonces armamos la cabecera de la tabla
		$tabla='<table width="50%" border="1">
				  <tr>
					<th scope="col">CODIGO</th>
					<th scope="col">CURSO</th>
					<th scope="col">DESCRIPCION</th>
				  </tr>';
	 	while($row=mysql_fetch_array($rsCursos)){ //recorriendo registro x registro y armando la tabla
		 $tabla.='<tr>
					<td>'.$row['codcur'].'</td>
					<td>'.$row['nomcur'].'</td>
					<td>'.$row['desccur'].'</td>
				  </tr>';
		}
		$tabla.='</table>';
	 }
	 //asignando el contenido de la varabiale $tabla al div que esta en index.php
	 //innerHTML reemplaza el contenido HTML por otro
	 $objResponse->assign("divListado","innerHTML",$tabla);
	 //mostramos un alert
	 $objResponse->alert("Este ciclo tiene ".$cantRegistros." cursos.");
	 return $objResponse; //retornamos la respuesta AJAX
}
 
$xajax->processRequest(); //procesando cualquier petición AJAX
?>

INDEX.COMMON.PHP

1
2
3
4
5
6
7
<?php
//importando las librerias XAJAX
require_once ("xajax/xajax_core/xajax.inc.php");
$xajax = new xajax("index.server.php");
//asociamos la función creada en index.server.php al objeto XAJAX
$xajax->registerFunction("ListarCursosXCiclo");
?>

Ejecutando el ejemplo te deberia mostrar algo asi:

utilizando_xajax_en_php
Si deseas puedes descargar el ejemplo desde aqui.

Como puedes ver es simple el manejo de XAJAX 0.5, este es un ejemplo básico pronto espero publicar algo mas complejo.

Mucha suerte !!

Tags: , ,

Comments (4)

Consumir un Servicio Web en PHP utilizando NuSoap

Hola tigre ahora te explicare como Consumir un Servicio Web utilizando NuSoap 0.7.3. para ello debes tener creado un Servicio Web en cualquier lenguaje (PHP, .NET, JAVA, etc….), para explicarte, y para que me entiendas mejor usaremos el Servicio Web creado en el post anterior; Empecemos :

1.- Para que funcione el ejemplo descárgate las clases de NuSOAP versión 0.7.3 puedes hacerlo desde la pagina http://sourceforge.net/projects/nusoap/.

2.- Después descomprimes ese archivo y lo copias a tu sitio web (para este ejemplo el sitio se llama miwebservice y los archivos de NuSOAP los puse en un directorio llamado lib-nusoap).

3.- Luego ejecutas en tu MySQL 5.0 el script de la Base de Datos db_productos.sql que lo puedes descargar desde esta pagina.

4.- Posteriormente crea una pagina PHP (en este ejemplo la pagina se llama clienteweb.php) y codificas lo siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
require_once('lib-nusoap/nusoap.php');
 
$wsdl="http://localhost/miwebservice/servicioweb.php?wsdl"; //url del webservice que invocaremos
$client=new nusoap_client($wsdl,'wsdl'); //instanciando un nuevo objeto cliente para consumir el webservice  
 
$param=array('estado'=>'1'); //pasando parametros de entrada que seran pasados hacia el metodo
 
$productos = $client->call('ListarProductos', $param); //llamando al metodo y recuperando el array de productos en una variable
 
//¿ocurrio error al llamar al web service? 
if ($client->fault) { // si
      echo 'No se pudo completar la operación'; 
      die(); 
}else{ // no
	$error = $client->getError(); 
	if ($error) { // Hubo algun error 
		echo 'Error:' . $error; 
	} 
} 
 
if(is_array($productos)){ //si hay valores en el array
	for($i=0;$i<count($productos);$i++){
		echo $productos[$i]['ProductoID'].'  '.$productos[$i]['Nombre'].' su precio es : '.$productos[$i]['Precio'].'<br>';
	}
}else{
	echo 'No hay productos';
}
?>

Y al ejecutar en el navegador te debe mostrar algo así:

consumir_un_servicio_web_en_php5_utilizando_nusoap

Si deseas puedes descargar el ejemplo completo desde aquí.

Ahora si me voy a tomar mi leche, mucha suerte tigre!!

Tags: , , ,

Comments (7)

Acid Test a Google Chrome (BETA)

Hoy hicimos una prueba al nuevo navegador Google Chrome (BETA) y el resultado de entrada fue 63/100, pero luego recargando varia entre 77/100 y 79/100.

Tags: ,

Comments (1)

Internet Explorer Beta 2, un nuevo navegador casi completo

Mucho se habla de lo pésimo mal que funciona los programas de Microsoft, sin duda alguna yo mismo he colaborado en más de una ocasión, sin embargo con la salida del Internet Explorer Beta 2 me quito el sombrero y no me queda más que decir: “Bienvenidos a la competencia” , pues parece que los muchachos del Team de desarrollo de IE se cansaron de ser vistos como los programadores mediocres, y por fin sacan un software que funciona realmente bien, quizá exagero un poco pero el hecho que un programa desarrollado por Microsoft funcione bien hace que me emocione un poco, más aún cuando trae características totalmente nuevas –léase que ningún otro navegador lo ha implementado–.

IExplore 8 Beta 2

IExplore 8 Beta 2

De comienzo la velocidad de carga es muy superior a las otras versiones de IE, quiza no llegué aún alcanzar a Firefox pero va por buen camino, al respecto encontré una comparativa realizada por Adrian Kingleys en el siguiente link http://blogs.zdnet.com/hardware/?p=2463.

El uso de la memoria RAM ha sido muy tomado en cuenta pues según los entendidos el uso de RAM ha disminuido considerablemente.

InPrivate: Mis plegarias deben haber sido escuchadas, Google, ni ningún otro navegador podrá recuperar mi información tan facilmente –léase espiarme–, desde hace un buen tiempo vengo comentando a todo mundo lo molesto que es saber que Google recupera toda la información sobre los usuarios, por el sólo hecho de utilizar algunas de sus herramientas web, quien iria a pensar que Microsoft nos ayudaría (al menos por algún tiempo). InPrivate es definido como:

Start InPrivate Browsing: Two things happen when you start inPrivate Browsing: your browsing activities, history and cookies are not retained, and third party web content providers may be blocked from tracking your online activities without your consent.

Para los desarrolladores: Firebug  es a Firefox, como Developer Tools (F12) es a IExplore 8 Beta 2: Los desarrolladores ya podemos sentirnos algo más considerados, pues el IE8 trae consigo herramientas que por ahora sólo los encontramos como add ons (en el caso de Firefox). Developer Tools esun conjunto de herramientas que entre otras cosas nos permiten ver la actividad de la web, depurar los contenidos javascript, redimensionar la pantalla (lo cual normalmente lo hago con webdeveloper), seleccionar el color de un elemento, también incorpora una regla, y tooodo lo que logramos con unos cuantos addons en Firefox.

También ofrece otras características importantes como los webSlices, búsqueda inline, acelerómetros, sugerencias de búsqueda, seguridad.

Aún así no ha pasado el Acid Test más que con 21 puntos, esperemos que para la versión oficial sumen unos cuantos puntos más y así dar una buena lucha a Mozilla (71 puntos).

Link de Descarga: IExplore 8 Beta

Tags: , ,

Comments (2)

Crear un Servicio Web en PHP utilizando NuSoap

Hola recien llego de mi trabajo y me anime a escribir acerca de este tema tan interesante y de moda; Para crear Servicios Web en PHP 5 usaremos las clases de NuSOAP:

1.- Para que funcione el ejemplo descárgate las clases de NuSOAP versión 0.7.3 puedes hacerlo desde la pagina http://sourceforge.net/projects/nusoap/.

2.- Después descomprimes ese archivo y lo copias a tu sitio web (para este ejemplo el sitio se llama miwebservice y los archivos de NuSOAP los puse en un directorio llamado lib-nusoap.

3.- Luego ejecutas en tu MySQL 5.0 el script de la Base de Datos db_productos.sql que lo puedes descargar desde esta pagina.

4.- Luego crea una pagina PHP (en este ejemplo la pagina se llama servicioweb.php) y codificas lo siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
<?php
require_once('lib-nusoap/nusoap.php');
 
$server = new soap_server;
 
$ns="http://192.168.1.5/aplicativo"; // espacio de nombres; Sitio donde estará alojado el web service
$server->configurewsdl('MiWebService'); //nombre del web service
$server->wsdl->schematargetnamespace=$ns;
 
/************ REGISTRANDO EL ARRAY A DEVOLVER(array de productos) **************/
$server->wsdl->addComplexType(
	'ArregloProductos', 			// Nombre
	'complexType', 					// Tipo de Clase
	'array', 						// Tipo de PHP
	'', 							// definición del tipo secuencia(all|sequence|choice)
	'SOAP-ENC:Array', 				// Restricted Base
	array(),
	array(
		array('ref' => 'SOAP-ENC:arrayType', 'wsdl:arrayType' => 'tns:Productos[]') // Atributos
	),
	'tns:Productos'
);
 
/************ REGISTRANDO LA ESTRUCTURA DE DATOS PRODUCTOS **************/
$server->wsdl->addComplexType('Productos', 'complexType', 'struct', 'all', '',
    array(
		'ProductoID'=> array('name' => 'ProductoID','type' => 'xsd:int'),
		'Nombre'    => array('name' => 'Nombre',    'type' => 'xsd:string'),
		'Precio'    => array('name' => 'Precio',    'type' => 'xsd:string')
    )
);
 
/*METODO DEL WEB SERVICE*/
function ListarProductos($estado){
	if($estado!=''){
		$db = new mysqli(); //mysqli exclusivo para usar procedimientos almacenados
		$db_result = $db->connect ("localhost", "root", "","db_productos");
		$sql=sprintf("call usp_ListarProductos('%s');",$estado); //intentando filtrar el SQL Injection
		$result = $db->query($sql);
		if (mysqli_errno($db)) printf("mySQL error %s\n", $db->error); //si es que hubo error se muestra
		$db->close();
		$i=0;
		if($result->num_rows>0){
			while($row = mysqli_fetch_assoc($result)){
				$toc[$i]['ProductoID'] = $row["producto_id"];
				$toc[$i]['Nombre'] = $row["nombre"];
				$toc[$i]['Precio'] = $row["precio"];
				$i++;
			}
			$result->free; //liberando memoria
			return $toc;
		}
	}
	return '';
}
 
/************ REGISTRANDO EL METODO **************/
$server->register(
	'ListarProductos',   						// Nombre del Método
    array('estado' => 'xsd:string' ),           // Parámetros de Entrada
    array('return' => 'tns:ArregloProductos')   //Datos de Salida
);
 
 
/******PROCESA LA SOLICITUD Y DEVUELVE LA RESPUESTA*******/
$input = (isset($HTTP_RAW_POST_DATA)) ? $HTTP_RAW_POST_DATA : implode("\r\n", file('php://input'));
$server->service($input);
exit;
?>

Y al ejecutar en el navegador te debe mostrar algo así:

crear_un_servicio_web_en_php5_utilizando_nusoap

Si deseas puedes descargar el ejemplo completo desde aquí.

También te recomiendo que leas Consumir un Servicio Web en PHP utilizando NuSoap

Suerte Tigre !!

Tags: , , ,

Comments (3)

Procedimientos Almacenados de MYSQL en PHP

Luego de una semana agotadora de trabajo, y ya que estoy mas relajado me anime a escribir acerca de cómo utilizar procedimientos almacenados de MYSQL 5 en PHP 5, esto trae grandes beneficios en varios aspectos como la reutilización de codigo, mejor orden al momento de estudiar y entender el sistema(modularidad) y muchas cosas mas que mejor no sigo diciendo sino te aburrire jejeje.

En el siguiente ejemplo te muestro como llamar a un procedimiento almacenado para traer datos y mostrarlos en pantalla:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php 
/******** CONSULTA CON PROCEDIMIENTO ALMACENADO **********/
$db = new mysqli(); //mysqli exclusivo para usar procedimientos almacenados
$db_result = $db->connect ("localhost", "root", "","db_productos");
$sql=sprintf("call usp_ListarProductos('%s',%d);",'Leche',1); 
/*sprintf intenta filtrar el SQL Injection, es conveniente utilizarlo, 
%s indica que se le pasara una cadena y 
%d indica que se le pasara un numero entero*/
 
$result = $db->query($sql);
if (mysqli_errno($db)) printf("mySQL error %s\n", $db->error); //si es que hubo error se muestra mensaje
$db->close(); //cerramos la conexion
 
if($result->num_rows>0){
	while($row = mysqli_fetch_assoc($result)){ //recorriendo registro x registro
		echo $row["producto_id"].' '.$row["nombre"].' '.$row["precio"].'<br>';
	}
}else{
	echo 'No hay registros';
}
$result->free; //liberando memoria
?>

Explicación:

  1. Instanciamos un objeto de tipo mysqli, esto es exlusivo para poder invocar a procedimientos almacenados de mysql.
  2. Después, y como te das cuenta, pasamos los parámetros de conexión con la Base de Datos.
  3. Luego hacemos uso de la funcion “sprintf” que intentara filtrar Inyecciones SQL, no es obligatorio usarlo pero si te lo recomiendo.
  4. Posteriormente pasamos la variable $sql al metodo “query” para que se ejecute el procedimiento almacenado y hacemos un if preguntando si es que hubo un error luego cerramos la conexion.
  5. Haciendo uso de $result->num_rows>0 verificamos si el procedimiento devolvió registros, si es asi, entonces recorremos uno a uno y lo vamos pintando en pantalla, caso contrario mostramos un mensaje.

A continuación te muestro como llamar a un procedimiento almacenado pero para hacer una operación Insert o Update (para los 2 casos es similar).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php 
/******** INSERT CON PROCEDIMIENTO ALMACENADO **********/
$db = new mysqli(); //mysqli exclusivo para usar procedimientos almacenados
$db_result = $db->connect ("localhost", "root", "","db_productos");
$sql=sprintf("call usp_InsertarProductos('%s',%f);",'Leche descremada',15.30); 
/*sprintf intenta filtrar el SQL Injection, es conveniente utilizarlo, 
%s indica que se le pasara una cadena y 
%f indica que se le pasara un numero con decimales*/
 
$result = $db->query($sql);
if (mysqli_errno($db)) printf("mySQL error %s\n", $db->error); //si es que hubo error se muestra mensaje
 
if($db->affected_rows!=-1){ //si se ejecuto correctamente el procedimiento almacenado
	echo 'Se inserto el registro';
}else{
	echo 'No se pudo insertar el registro';
}
$result->free; //liberando memoria
$db->close(); //cerramos la conexion
?>

La unica diferencia importante es que usamos $db->affected_rows!=-1 para verificar si se ejecuto correctamente el procedimiento.

Si deseas puedes descargar el ejemplo completo desde aquí.

Suerte Tigre !!

Tags: , , ,

Comments (2)

Sistema de Matriculas

Hasta que por fin, después de arduo trabajo, sale nuestro primer post y que mejor para comenzar dándote como obsequio un pequeño sistema de matriculas hecho por un grupo de amigos y por mí, esta creado en C#.NET 2005 en formularios Windows usando el modelo de 3 Capas e interactuando con SQL Server 2005, espero que te sirva mucho, pero ten en consideración que no esta hecho a la perfección, así que trata de mejorarlo.

Para descargar el sistema pulsa aqui

Espero con ansias tus criticas y comentarios.

Sácale provecho tigre!!

Tags: , , , , ,

Comments (4)