OOoES/Desarrollo/AplicacionesWeb OOoES

From OpenOffice.org Wiki

Jump to: navigation, search

El problema: CollabNet, el sitio de OOo no tiene SSI scripting es decir que no interpreta PHP, Perl u otro lenguaje de scripting, esto es un problema si se quieren montar aplicaciones web o tener datos dinamicos desde una base de datos.

Solucion: Se pretende usar un servidor remoto para capturar y escribir esta información sobre el html de la página de CollabNet.

La estrategia es sencilla, se necesita poder tener formas que puedan enviar los datos al servidor remoto. Este servidor a su vez tendrá la facilidad de hacer un volcado de los datos en un archivo XML o TXT. Una vez que este volcado se hizo se podrá tener un archivo para ser leído por el Javascript.

Ejemplo tipo 'proof of concept' donde se intenta tener datos dinamicos en una aplicacion tipo libro de visita. El código de ejemplo es el siguiente:



Contents

Forma

Este es un archivo HTML el cual la forma redirige a un archivo PHP en un servidor remoto. Esta información se almacenará en una base de datos en el servidor remoto. Luego regresará en forma de un Javascript, este Javascript será generado por el PHP.

Inserción de PHP

Archivo que contiene las instrucciones para ingresar a la base de datos en el servidor remoto. Aquí tenemos los campos necesarios para ingresar el nombre (línea 7) y luego un área de texto donde podemos ingresar nuestro comentario (ver línea 9)


[html] <html> <head> <title>My guestbook</title> </head> <body> <form action="http://www.remote.com/path/to/submit.php" method="post">

Name: <input type="text" name="name" size="20" />
Comment:
<textarea name="comment" rows="5" cols="40"></textarea>
<input type="submit" name="submit" value="submit" /></form> </body> </html> </code>

Extracción de datos por PHP

Llama a la base de datos y hace una extraccion de datos de ahi a un fetch_array y usa un fwrite para escribirlo en un archivo de Javascript.Ver la línea 19 para ver como se utiliza la función para hacer la inserción. Además en este ejemplo tenemos mensajes de verificación si no ingresamos previamente el nombre o algún comentario, (Línea 9 y 13)

<?php
/* nos regresa a la pagina anterior despues de 1 segundo */
header('Refresh:1,http://es.openoffice.org/lecturas/lecturas_0016.html'); 
include "connect.php";
if(isset($_POST['submit']))
{
	$name = $_POST['name'];
	$comment = $_POST['comment'];
if(strlen($name)<1) /* en caso de la forma este vacia */
	{
	print "You did not enter a name.";
	}
else if(strlen($comment)<1)
{
	print "You did not enter a comment.";
	}
else
{
	$insert = "Insert into guestbook (name,comment)
	values('$name','$comment')";
	mysql_query($insert) or die("Could not insert comment");
	include('fwrite.php'); /* actualizamos el javascript */
	}
}
?>

Volcado de TXT en formato Javascript

Archivo PHP generando un archivo Javascript que contendra un arreglo con los valores extraidos de la base de datos. para ello realizamos la consulta en SQL necesaria ( línea 4 ) y después entramos en un ciclo para imprimir los datos y escribir en el archivo dado .

<?php
include "connect.php";
$myFile = "file.js";
$getdata="SELECT * from guestbook order by id desc LIMIT 4";
$getdata2=mysql_query($getdata) or die("Could not get data");
$fh = fopen($myFile, 'w') or die("can't open file");
$stringData = "var mycars = new Array()\n";
fwrite($fh, $stringData);
$i = 0;
while($getdata3=mysql_fetch_array($getdata2))
{
/* mysql_real_escape_string nos protege contra comillas y las escapa */
/* necesitamos mas seguros */
 $getdata3{name}=mysql_real_escape_string($getdata3{name}); 
 $getdata3{comment}=mysql_real_escape_string($getdata3{comment});
$stringData ='mycars['.$i.'] ="'.$getdata3[name].'"
';
$i++;
fwrite($fh, $stringData);
$stringData ='mycars['.$i.'] ="'.$getdata3[comment].'"
';
$i++;
fwrite($fh, $stringData);
}
fwrite($fh, $stringData);
fclose($fh);
print '<script type="javascript">history.go(-2)</script>';
?>

Este es el codigo que genera el archivo de PHP en puro codigo Javascript:

var mycars = new Array()
mycars[0] ="Blah"
mycars[1] ="This is me"
mycars[2] ="Alex"
mycars[3] ="This is me."
mycars[3] ="This is me."

Llamado de Javascript local

HTML que reside en CollabNet el cual llama al servidor remoto y extrae los datos anteriormente ingresados.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es">
        <head>
                <title>Prueba de Javascript</title>
        <meta http-equiv="content-language" content="en" />
        <meta http-equiv="content-type" content="text/html; charset=utf-8" />
        <meta name="keywords"
        content="Ejemplo de Javascript">
        <script src="http://jza.homelinux.net/file.js"></script>
</head>
<body>
<h1>Comments</h1>	
<!-- insertamos un javascript interno donde se hace un bucle y postea 
un parrafo con el nombre del usuario y el contenido del comentario -->
	<script type="text/javascript">
	var i=0
while (i <= mycars.length )
{
document.write('<div class="comment"><p class="name">' + mycars[i] + '</p>')
	i=i+1
document.write('<p class="content">' + mycars[i] + '</p>')
	i=i+1
document.write("</div>") }
</script>
 
<!-- integramos la forma de ingreso de infomracion -->
 
<form action="http://jza.homelinux.net/submit.php" method="post">
	<p>Name: <input type="text" name="name" id="name" size="20" /><br />
	Comment: <br />
	<textarea name="comment" rows="5" cols="40"></textarea><br />
	<input type="submit" name="submit" id="submit" value="submit" />
</form>
</body>
</html>

Problemas comunes

Existen varios bugs, uno de estos es que el codigo no esta segurado y puede ser propenso a spam. Lo primero que rompe esta forma es escapar las diagonales para el texto especial. Esto puede romper el Javascript y romper la applicacion. Por lo general no se recomienda usar magic_quotes ya que han probado ser un problema en cuanto a servidor.

Personal tools