<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;DEMHQn87fyp7ImA9WhRRFE4.&quot;"><id>tag:blogger.com,1999:blog-4026970174490748728</id><updated>2011-11-27T15:27:13.107-08:00</updated><category term="XML" /><category term="webform en tiempo real" /><category term="Recorrer una tabla" /><category term="childNodes" /><category term="Valor de una celda TD con javascript" /><category term="Prefijos en variables y funciones" /><category term="Javascript" /><category term="webform con js" /><category term="modal" /><title>Edu y sus lineas de código Programación, Networking y más..</title><subtitle type="html">public string sMi_Blog="Edu";</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://eduysucodigo.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://eduysucodigo.blogspot.com/" /><author><name>Eduardo A. F.</name><uri>http://www.blogger.com/profile/09981053725148567090</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>7</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/EduYSusLineasDeCdigoProgramacinNetworkingYMs" /><feedburner:info uri="eduysuslineasdecdigoprogramacinnetworkingyms" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;CkINQHg-fCp7ImA9WxFRGUQ.&quot;"><id>tag:blogger.com,1999:blog-4026970174490748728.post-6034703770201094147</id><published>2010-05-04T06:13:00.000-07:00</published><updated>2010-05-04T09:29:51.654-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-04T09:29:51.654-07:00</app:edited><title>C# ( C Sharp) y MySQL - Conexión</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/5AZDlGI7H0cZNBwxvnABkiBu0ks/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5AZDlGI7H0cZNBwxvnABkiBu0ks/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/5AZDlGI7H0cZNBwxvnABkiBu0ks/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5AZDlGI7H0cZNBwxvnABkiBu0ks/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Hace unos dias se presento en Madrid el Visual Studio 2010, por las caracteristicas que lo describen se ve que es la bomba.  No lo he probado (ganas no me faltan) porque mi pc es un poco lento para lo que te pide este entorno.&lt;br /&gt;En vista de esto y por problemas de instalacion de SQL Server (conflicto con el SQL Server que trae VisualStudio 2008) decidí apostar por MySql.  Que con PHP y Java se comporta de mil maravillas.&lt;br /&gt;&lt;br /&gt;Asi que lo primero es la conexion y es de lo que va este post.  Un dolor de cabeza menos porque lo acabo de resolver.&lt;br /&gt;&lt;br /&gt;Esta es la historia:&lt;br /&gt;&lt;br /&gt;Tengo una maquina virtual XP con productos free, sin nada de microsoft, es decir: Netbeans, MySQL, Open Office y Xampp.  Esta la utilizo para Java y PHP.  Como en MySql tengo ocho bases de datos de distintos proyectos, por ahorrar tiempo y evitar mezclar tecnologias se me ocurrio reutilizar el motor.&lt;br /&gt;&lt;br /&gt;Lo primero que se necesita es el conector de MyS. para .Net hay varias versiones...  Yo como siempre me bajo la última asi sea beta y despues pete por todos lados, me gusta porque asi aprendo (manias mias).   El conector esta &lt;a href="http://dev.mysql.com/downloads/connector/net/"&gt;aqui&lt;/a&gt; es un archivo .zip que no necesita instalación.&lt;br /&gt;&lt;br /&gt;Para su utilizacion se debe agregar el archivo "mysql.data" en tu carpeta "references" de tu proyecto (el resto de archivos no son necesarios).  Hecho esto, en un archivo de clase "conexion.cs" importas con using el espacio a utilizar.  (using MySql.Data.MySqlClient);&lt;br /&gt;&lt;br /&gt;A continuacion viene el codigo que va dentro de la clase:&lt;br /&gt;&lt;pre style="margin: 0pt; padding: 0pt; border: 1px dashed rgb(204, 204, 204); color: green;"&gt;&lt;code style="margin: 0pt; padding: 0pt;"&gt;using System;&lt;br /&gt;using System.Collections.Generic;&lt;br /&gt;using System.Linq;&lt;br /&gt;using System.Text;&lt;br /&gt;&lt;br /&gt;//Espacio MYSQL&lt;br /&gt;using MySql.Data.MySqlClient;&lt;br /&gt;&lt;br /&gt;namespace nsPrincipal.modBaseDatos.Clases&lt;br /&gt;{&lt;br /&gt;class CBaseDatos&lt;br /&gt;{&lt;br /&gt;//Acostumbro poner una variable mensaje en todas mis clases&lt;br /&gt;//con el objetivo de una depuracion manual.&lt;br /&gt;private string sMensaje = "";&lt;br /&gt;&lt;br /&gt;//CONSTRUCTOR  al crear el objeto este utiliza la clase ConstBD&lt;br /&gt;//que es estatica y solo guarda los parametros de conexion&lt;br /&gt;//servidor: 192.168.1.103 (la maquina virtual)&lt;br /&gt;//Usuario: root&lt;br /&gt;//Clave: 12345&lt;br /&gt;//BaseDatos: bd_elchalan&lt;br /&gt;public CBaseDatos()&lt;br /&gt;{&lt;br /&gt;    try&lt;br /&gt;    {&lt;br /&gt;        //Creo mi cadena de conexion&lt;br /&gt;        string sCadenaConx = "Server="+ConstBD.sServidor+&lt;br /&gt;                             ";Uid="+ConstBD.sUsuario+&lt;br /&gt;                             ";Pwd="+ConstBD.sClave+&lt;br /&gt;                             ";Database="+ConstBD.sBaseDatos;&lt;br /&gt;&lt;br /&gt;        //Construyo mi objeto usando la cadena&lt;br /&gt;        MySqlConnection oMySqlConn = new MySqlConnection(sCadenaConx);&lt;br /&gt;        //Abro la conexion&lt;br /&gt;        oMySqlConn.Open();&lt;br /&gt;&lt;/code&gt;&lt;code style="margin: 0pt; padding: 0pt;"&gt;             //Mensaje orgasmico xD&lt;br /&gt;        this.sMensaje="Conexión realizada con éxito!";&lt;/code&gt;&lt;br /&gt;&lt;code style="margin: 0pt; padding: 0pt;"&gt;         }&lt;br /&gt;    catch (MySqlException sE)&lt;br /&gt;    {&lt;br /&gt;        this.sMensaje = "ERROR: " + sE.ToString();&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//GETS Y SETS&lt;br /&gt;public string Mensaje&lt;br /&gt;{&lt;br /&gt;    get { return this.sMensaje; }&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;span style="font-family:Georgia,serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;Todo relativamente correcto, porque cuando asociaba la creacion de este objeto en un evento click de un boton saltaba el siguiente error:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 0, 0); font-weight: bold;font-family:courier new;" &gt;MySql.Data.MySqlClient.MySqlException: Host is not allowed to connect to this MySQL server&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 0, 0); font-weight: bold;font-family:courier new;" &gt;   at MySql.Data.MySqlClient.MySqlStream.ReadPacket()&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 0, 0); font-weight: bold;font-family:courier new;" &gt;   at MySql.Data.MySqlClient.NativeDriver.Open()&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 0, 0); font-weight: bold;font-family:courier new;" &gt;   at MySql.Data.MySqlClient.Driver.Create(MySqlConnectionStringBuilder settings)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 0, 0); font-weight: bold;font-family:courier new;" &gt;   at MySql.Data.MySqlClient.MySqlPool.CreateNewPooledConnection()&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 0, 0); font-weight: bold;font-family:courier new;" &gt;   at MySql.Data.MySqlClient.MySqlPool.GetPooledConnection()&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 0, 0); font-weight: bold;font-family:courier new;" &gt;   at MySql.Data.MySqlClient.MySqlPool.TryToGetDriver()&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 0, 0); font-weight: bold;font-family:courier new;" &gt;   at MySql.Data.MySqlClient.MySqlPool.GetConnection()&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 0, 0); font-weight: bold;font-family:courier new;" &gt;   at MySql.Data.MySqlClient.MySqlConnection.Open()&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Como siempre aplico Murphy, esto era de esperar.&lt;br /&gt;Buscando errores en la pagina de MySql, conseguí algo que me pudo ayudar &lt;a href="http://forums.mysql.com/read.php?35,38653,137743#msg-137743"&gt;esto&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;En un principio creia que era problemas de permisos pero en la lan virtual no en la base de datos. que tengo montada.  No era eso porque visualstudio a travez del panel servidores podia agregar a este equipo sin problemas.&lt;br /&gt;&lt;br /&gt;Capa fisica ok!!.   Por lo que leí en ese foro el tema tenia que ver con los permisos del usuario 'root', yo creaía que este tenia absolutamente todos los privilegios incluyendo aquel que permitia la gestion remota de una base de datos, pero no es asi, este ultimo privilegio viene desactivado por razones de seguridad.   Es decir solo funciona en local.  Ejemplo:  Si tuviera mi VisualStudio y el MySql en la misma maquina virtual funcionaria sin problemas porque trabajaria como root@localhost.&lt;br /&gt;&lt;br /&gt;Como no era el caso, indagando en este &lt;a href="http://stackoverflow.com/questions/1424240/cant-diagnose-my-mysql-root-user-problem"&gt;foro&lt;/a&gt; un tal "&lt;span style="font-weight: bold;"&gt;titanoboa&lt;/span&gt;" explica el porque del error y como se soluciona.  Asi que le hice caso y con la siguiente sentencia le asigne el nuevo privilegio al "root"&lt;br /&gt;&lt;pre style="margin: 0pt; padding: 0pt; border: 1px dashed rgb(204, 204, 204); color: rgb(51, 102, 255); font-weight: bold;"&gt;&lt;code style="margin: 0pt; padding: 0pt;"&gt;SQL:&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0); font-weight: normal;"&gt;//Creo un usuario identico, pero remoto&lt;/span&gt;&lt;br /&gt;CREATE USER 'root'@'%' IDENTIFIED BY PASSWORD&lt;br /&gt;'*4ACFE3202A5FF5CF467898FC58AAB1D615029441';&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;code style="margin: 0pt; padding: 0pt;"&gt;&lt;span style="color: rgb(0, 153, 0); font-weight: normal;"&gt;//Como la tabla usuario esta formada por columnas de privilegios se usa&lt;br /&gt;//&lt;span style="font-weight: bold;"&gt;* .*&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;code style="margin: 0pt; padding: 0pt;"&gt;GRANT ALL PRIVILEGES ON * . * TO 'root'@'%'&lt;br /&gt;IDENTIFIED BY PASSWORD '*4ACFE3202A5FF5CF467898FC58AAB1D615029441'&lt;br /&gt;WITH GRANT OPTION&lt;br /&gt;MAX_QUERIES_PER_HOUR 0 &lt;span style="color: rgb(0, 153, 0); font-weight: normal;"&gt;//El 0 hace que el limite varie al maximo realizado&lt;/span&gt;&lt;br /&gt;MAX_CONNECTIONS_PER_HOUR 0&lt;br /&gt;MAX_UPDATES_PER_HOUR 0&lt;br /&gt;MAX_USER_CONNECTIONS 0;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Hecho todo esto, al ejecutar mi formulario  salio el mensaje deseado&lt;br /&gt;&lt;pre style="margin: 0pt; padding: 0pt; border: 1px dashed rgb(204, 204, 204); color: green;"&gt;&lt;code style="margin: 0pt; padding: 0pt;"&gt;Conexión realizada con éxito!&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Otro enlace de interes:&lt;br /&gt;&lt;a href="http://www.xtec.es/%7Eacastan/textos/Administracion%20de%20MySQL.html"&gt;http://www.xtec.es/~acastan/textos/Administracion%20de%20MySQL.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;FIN.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4026970174490748728-6034703770201094147?l=eduysucodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EduYSusLineasDeCdigoProgramacinNetworkingYMs/~4/446Ok9GM0Rw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://eduysucodigo.blogspot.com/feeds/6034703770201094147/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://eduysucodigo.blogspot.com/2010/05/c-c-sharp-y-mysql-conexion.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4026970174490748728/posts/default/6034703770201094147?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4026970174490748728/posts/default/6034703770201094147?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EduYSusLineasDeCdigoProgramacinNetworkingYMs/~3/446Ok9GM0Rw/c-c-sharp-y-mysql-conexion.html" title="C# ( C Sharp) y MySQL - Conexión" /><author><name>Eduardo A. F.</name><uri>http://www.blogger.com/profile/09981053725148567090</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://eduysucodigo.blogspot.com/2010/05/c-c-sharp-y-mysql-conexion.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEEGRH8-eCp7ImA9WxFSGEs.&quot;"><id>tag:blogger.com,1999:blog-4026970174490748728.post-6720554663530463890</id><published>2010-04-21T03:16:00.000-07:00</published><updated>2010-04-21T09:17:05.150-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-21T09:17:05.150-07:00</app:edited><title>MySQL, PHP y FPDF Caracteres y cotejamiento.</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ahT1Pf1yIUMTZtVyA-NhA2IDcY4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ahT1Pf1yIUMTZtVyA-NhA2IDcY4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ahT1Pf1yIUMTZtVyA-NhA2IDcY4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ahT1Pf1yIUMTZtVyA-NhA2IDcY4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Hasta que lo solucioné!! :0).&lt;br /&gt;Sucede que estoy haciendo una aplicación web de facturación.  Utilizo el dueto PHP y MySQL.&lt;br /&gt;&lt;a href="http://img213.imagevenue.com/img.php?image=47595_FacturaErronea_122_674lo.jpg" target="_blank"&gt;&lt;img src="http://img213.imagevenue.com/loc674/th_47595_FacturaErronea_122_674lo.jpg" style="float: right;" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Este dueto se convirtio en un trio en el momento en que necesitaba imprimir las facturas y/o enviarlas por email.  En este caso se me ocurrieron dos soluciones una, la mas sencilla, utilizar una libreria (PHP) de terceros para generar un PDF, y otra, currarme un código para imprimir desde el formulario HTML. Esta última descartada por tiempo y porque seguro habria que pelearse no solo con PHP sino con CSS.&lt;br /&gt;&lt;br /&gt;El famoso google me devolvió la página &lt;a href="http://www.fpdf.org/"&gt;http://www.fpdf.org/&lt;/a&gt;.  Instalé esta libreria (solo es subirla al servidor). Seguidamente con ensayo y error y ayuda del manual en la misma web fui entendiendo el comportamiento.&lt;br /&gt;&lt;br /&gt;La verdad es que es sencilla pero potente, me recuerda mucho a una experiencia con C# y sus clases para imprimir.&lt;br /&gt;&lt;br /&gt;Cuando ya habia conseguido dominarla, saltó un problema y es que no se podian ver los caracteres castellanos como la "ñ, ó, ü" en el PDF generado (ver figura 1),  pero sin embargo se veia bien en el formulario HTML (ver figura 2). Asi que volviendo a &lt;a href="http://img143.imagevenue.com/img.php?image=47319_FormularioWeb_122_496lo.jpg" target="_blank"&gt;&lt;img src="http://img143.imagevenue.com/loc496/th_47319_FormularioWeb_122_496lo.jpg" style="float: right;" border="0" /&gt;&lt;/a&gt;google encontre que se podia solucionar añadiendo&lt;br /&gt;&lt;pre style="margin: 0pt; padding: 0pt; border: 1px dashed rgb(204, 204, 204); color: green;"&gt;&lt;code style="margin: 0pt; padding: 0pt;"&gt;$txt = utf8_decode($txt);&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;a la funcion&lt;br /&gt;&lt;pre style="margin: 0pt; padding: 0pt; border: 1px dashed rgb(204, 204, 204); color: green;"&gt;&lt;code style="margin: 0pt; padding: 0pt;"&gt;function Cell($w, $h=0, $txt='', $border=0, $ln=0, $align='', $fill=false, $link=''){...}&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;de la clase &lt;span style="font-weight: bold;"&gt;fpdf.php&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Esto en principio funcionó, digo en principio porque los datos no los estaba recuperando desde la BD sino que los ponia directamente (tecleaba en el PDFFactura.php) en forma de simulacion de los mismos.&lt;br /&gt;&lt;br /&gt;El siguiente proceso, recuperar los datos de la BD y con estos generar la factura, me llevaria a tener que estudiar sobre los juegos de caracteres (CHARSET), el cotejamiento (COLLATION) y como se comunicaba MySQL y la aplicacion.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;Breve resumen:&lt;/span&gt;&lt;br /&gt;El charset viene a ser el conjunto de simbolos de un lenguaje, es decir en español existe la "ñ" mientras que en ingles no ambos alfabetos son latinos, luego el CHARSET viene a ser LATIN y el cotejamiento es la forma de compararlos.  Si por ejemplo hacemos una peticion "SELECT" con un order by "Nombre_empresa" entraria en juego el cotejamiento, suponiendo que las empresas "MCQ" y "mcq" existen y son distintas cual deberia ir primera en el result?.  Esto depende si el cotejamiento es:&lt;br /&gt;_ci: Case insensitive&lt;br /&gt;_cs: Case sensitive&lt;br /&gt;_bin: Binario&lt;br /&gt;&lt;br /&gt;No he hecho pruebas sobre esto, pero la teoria es esa.&lt;br /&gt;&lt;br /&gt;Volviendo a mi dilema...&lt;br /&gt;&lt;br /&gt;En el formulario web se visualizaba bien porque estoy trabajando con la directiva:&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&amp;lt;meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /&amp;gt;&lt;/span&gt;&lt;br /&gt;y como mi MySQL tiene estos parametros:&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;charset server          Latin1&lt;br /&gt;collation server        latin1_swedish_ci&lt;/span&gt;&lt;br /&gt;no generaba conflicto entre esos dos juegos (latin1 e iso-8859-1).&lt;br /&gt;&lt;br /&gt;La secuencia era esta:&lt;br /&gt;La información de MySQL a PHP se pasa en Latin1, el PHP trabaja con UTF-8 Unicode, por eso lo recibe y los transforma a UTF-8 pero no se porque razón (especulo que el HTML usara una funcion analoga a utfdecode pero para Latin1) automaticamente se convertia en iso-8859-1 visualizandose perfectamente en la web. (ver figura 2)&lt;br /&gt;&lt;br /&gt;Por lógica, debería suceder lo mismo en el archivo PHP del PDF (PDFFactura.php), pero no era asi. (ver figura 1) al parecer se quedaba en Latin1 y la clase &lt;span style="font-weight: bold;"&gt;fpdf.php&lt;/span&gt; lo pasaba a UTF-8 pero con los caracteres desconocidos. Como no se iba a visualizar en un HTML sino en PDF, la clase no hacia una conversion al iso-8859-1.&lt;br /&gt;&lt;a href="http://img168.imagevenue.com/img.php?image=47166_EjemploFactura_122_955lo.jpg" target="_blank"&gt;&lt;img src="http://img168.imagevenue.com/loc955/th_47166_EjemploFactura_122_955lo.jpg" style="float: right;" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Leyendo este &lt;a href="http://dev.mysql.com/doc/refman/5.1/en/charset-syntax.html"&gt;articulo&lt;/a&gt;.  Deduje que tenia que cambiar la codificación en que me tenia que devolver la informacion MySQL.&lt;br /&gt;&lt;br /&gt;La secuencia deberia ser esta:&lt;br /&gt;De MySQL a PHP se pasa en UTF-8 (ya no en Latin1). Mi clase &lt;span style="font-weight: bold;"&gt;fpdf.php&lt;/span&gt; (en PHP) la recibe correctamente puesto que PHP trabaja con UTF-8 y cuando utilizo el metodo CELL de la clase mencionada, le aplico la funcion &lt;span style="font-weight: bold;"&gt;utf8_decode($txt);&lt;/span&gt; transformado asi al iso-8859-1. que es la codificacion que usa la libreria &lt;span style="font-weight: bold;"&gt;fpdf.php&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Obteniendo el resultado (ver imagen 3).&lt;br /&gt;&lt;br /&gt;El código relacionado es el siguiente:&lt;br /&gt;Nombre archivo: PDFFactura.php&lt;br /&gt;&lt;pre style="margin: 0pt; padding: 0pt; border: 1px dashed rgb(204, 204, 204); color: green;"&gt;&lt;code style="margin: 0pt; padding: 0pt;"&gt;&amp;lt;?php include ($_SERVER['DOCUMENT_ROOT'].'/proyMODULOS/config.php'); ?&amp;gt;&lt;br /&gt;&amp;lt;?php&lt;br /&gt;require_once $_RUTARAIZ.'Clases/fpdf.php';//http://www.fpdf.org/&lt;br /&gt;?&amp;gt;&lt;br /&gt;&amp;lt;?php&lt;br /&gt;session_start();&lt;br /&gt;&lt;br /&gt;$oUsuSesion=$_SESSION['oUsuSesion'];&lt;br /&gt;if($oUsuSesion==null||!$oUsuSesion-&gt;getSesion())&lt;br /&gt;{&lt;br /&gt;   $_SESSION['sWarning']="Debe iniciar sesión.";&lt;br /&gt;   header('Location: ../../index.php');&lt;br /&gt;   exit;&lt;br /&gt;}&lt;br /&gt;else&lt;br /&gt;{&lt;br /&gt;    //Me conecto&lt;br /&gt;    $oBD = new CBaseDatos();&lt;br /&gt;    $bEstado=$oBD-&gt;fBoolConectar();&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;     //Cambio la codificacion en que MySQL me enviara la informacion&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;     //este archivo.php ya no lo recibira en LATIN1&lt;/span&gt;&lt;br /&gt;    &lt;span style="font-weight: bold;"&gt;mysql_query("SET NAMES utf8");&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    //Recupero los datos&lt;br /&gt;    //La factura y sus Detalles, el Cliente&lt;br /&gt;    $oFactura = $_SESSION['oFactura'];&lt;br /&gt;    $oFactura-&gt;pAtributosDesdeIDN($oBD);&lt;br /&gt;&lt;br /&gt;    //Este constructor se puede mejorar con variables por defecto!!&lt;br /&gt;    $oCliente=new CCliente($oFactura-&gt;getIdCliente(), null, null, null, null, null, null, null, null, null, null, null, null);&lt;br /&gt;    $oCliente-&gt;pAtributosDesdeIDN($oBD);&lt;br /&gt;&lt;br /&gt;    //Creo mi array con los detalles de la factura&lt;br /&gt;    $arDetalles=CDetalleFactura::fArTabla($oFactura-&gt;getIdFactura(), $oBD);&lt;br /&gt;&lt;br /&gt;    $sWarning=$_SESSION['sWarning'];&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//Heredo de la clase FPDF&lt;br /&gt;class PDF extends FPDF&lt;br /&gt;{&lt;br /&gt;    //http://www.fpdf.org/&lt;br /&gt;    //Cabecera de página, Titulo y Logo&lt;br /&gt;    function Header()&lt;br /&gt;    {&lt;br /&gt;        //Arial bold 15&lt;br /&gt;        $this-&gt;SetFont('Arial','B',15);&lt;br /&gt;        //Logo de la empresa&lt;br /&gt;        $this-&gt;Image('../Images/LogoHoja.jpg',137,1,74);&lt;br /&gt;        //Movernos a la derecha&lt;br /&gt;        $this-&gt;Cell(1);&lt;br /&gt;        //Título&lt;br /&gt;        $this-&gt;Cell(10,10,'Factura nº: ',0,0,'L');&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    //Pie de página&lt;br /&gt;    function Footer()&lt;br /&gt;    {&lt;br /&gt;        //Posición: a 1,5 cm del final&lt;br /&gt;        $this-&gt;SetY(-15);&lt;br /&gt;        //Arial italic 8&lt;br /&gt;        $this-&gt;SetFont('Arial','B',8);&lt;br /&gt;        //Número de página&lt;br /&gt;        $this-&gt;Cell(0,10,'Page '.$this-&gt;PageNo().'/{nb}',0,0,'C');&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    //Muestra el Nº al lado de "FACTURA nº:"&lt;br /&gt;    function NFactura(CFactura $oFactura)&lt;br /&gt;    {&lt;br /&gt;        //Arial bold 15&lt;br /&gt;        $this-&gt;SetFont('Arial','B',15);&lt;br /&gt;        $this-&gt;Cell(20);&lt;br /&gt;        //Título&lt;br /&gt;        $this-&gt;Cell(10,10,$oFactura-&gt;getIdFactura(),0,0,'L');&lt;br /&gt;        //Salto de línea&lt;br /&gt;        $this-&gt;Ln(20);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    function MiEmpresa(CFactura $oFactura)&lt;br /&gt;    {&lt;br /&gt;        $dFechaLarga=CUtils::fFechaLarga($oFactura-&gt;getFecha());&lt;br /&gt;        $sEmpresa="El nombre de tu empresa"; //La empresa que emitira la factura&lt;br /&gt;        $sNIF="B5555555";&lt;br /&gt;        $x=115;&lt;br /&gt;        //Arial bold 15&lt;br /&gt;        $this-&gt;SetFont('Arial','B',12);&lt;br /&gt;        $this-&gt;Cell($x);&lt;br /&gt;        $this-&gt;Cell(1,7,'FECHA:',20,0,'L');&lt;br /&gt;        $this-&gt;Ln();&lt;br /&gt;        $this-&gt;SetFont('Arial','',12);&lt;br /&gt;        $this-&gt;Cell($x);&lt;br /&gt;        $this-&gt;Cell(1,7,$dFechaLarga,20,0,'L');&lt;br /&gt;        $this-&gt;Ln();&lt;br /&gt;        $this-&gt;Cell($x);&lt;br /&gt;        $this-&gt;Cell(1,6,$sEmpresa,20,0,'L');&lt;br /&gt;        $this-&gt;Ln();&lt;br /&gt;        $this-&gt;Cell($x);&lt;br /&gt;        $this-&gt;Cell(1,6,$sNIF,20,0,'L');&lt;br /&gt;        $this-&gt;Ln(20);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    function Cliente(CCliente $oCliente)&lt;br /&gt;    {&lt;br /&gt;        $this-&gt;SetFont('Arial','BU',12);&lt;br /&gt;        $this-&gt;Cell(0,7,'FACTURAR A:',0,0,'L');&lt;br /&gt;        $this-&gt;Ln();&lt;br /&gt;        $this-&gt;SetFont('Arial','B',12);&lt;br /&gt;        $this-&gt;Cell(0,7,$oCliente-&gt;getEmpresa(),0,0,'L');&lt;br /&gt;        $this-&gt;Ln();&lt;br /&gt;        $this-&gt;SetFont('Arial','',12);&lt;br /&gt;        $this-&gt;Cell(0,7,$oCliente-&gt;getCifnif(),0,0,'L');&lt;br /&gt;        $this-&gt;Ln();&lt;br /&gt;        $this-&gt;Cell(0,7,$oCliente-&gt;getDireccion(),0,0,'L');&lt;br /&gt;        $this-&gt;Ln();&lt;br /&gt;        $this-&gt;Cell(0,7,$oCliente-&gt;getCodigoPostal().' - '.$oCliente-&gt;getCiudad(),0,0,'L');&lt;br /&gt;        $this-&gt;Ln(20);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    function Detalles($arDetalles)&lt;br /&gt;    {&lt;br /&gt;        $header=array('Concepto','Cantidad');&lt;br /&gt;        $this-&gt;SetFont('Arial','B',12);&lt;br /&gt;        //Anchuras de las columnas&lt;br /&gt;        $w=array(150,35);&lt;br /&gt;        //Cabeceras&lt;br /&gt;        for($i=0;$i&lt;count($header);$i++)&gt;Cell($w[$i],7,$header[$i],1,0,'C');&lt;br /&gt;        }&lt;br /&gt;        $this-&gt;Ln();&lt;br /&gt;&lt;br /&gt;        $this-&gt;SetFont('Arial','',12);&lt;br /&gt;        //Datos&lt;br /&gt;        foreach($arDetalles as $row)&lt;br /&gt;        {&lt;br /&gt;            $this-&gt;Cell($w[0],6,$row[CONCEPTO],'LR');&lt;br /&gt;            $this-&gt;Cell($w[1],6,number_format($row[CANTIDAD],2,',','').' '.chr(128),'LR',0,'R');&lt;br /&gt;            $this-&gt;Ln();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        //Línea de cierre&lt;br /&gt;        $this-&gt;Cell(array_sum($w),0,'','T');&lt;br /&gt;        $this-&gt;Ln();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    function Totales(CFactura $oFactura)&lt;br /&gt;    {&lt;br /&gt;        $this-&gt;SetFont('Arial','B',12);&lt;br /&gt;&lt;br /&gt;        $arTitulos[0]='Subtotal: ';&lt;br /&gt;        $arTitulos[1]='Iva: ';&lt;br /&gt;        $arTitulos[2]='Total: ';&lt;br /&gt;&lt;br /&gt;        //Anchuras de las columnas&lt;br /&gt;        $w=array(150,35);&lt;br /&gt;&lt;br /&gt;        //Subtotal&lt;br /&gt;        $this-&gt;Cell($w[0],6,$arTitulos[0],'LR',0,'R');&lt;br /&gt;        $this-&gt;Cell($w[1],6,number_format($oFactura-&gt;getSubtotal(),2,',','').' '.chr(128),'LR',0,'R');&lt;br /&gt;        $this-&gt;Ln();&lt;br /&gt;        //Iva&lt;br /&gt;        $this-&gt;Cell($w[0],6,$arTitulos[1],'LR',0,'R');&lt;br /&gt;        $this-&gt;Cell($w[1],6,number_format($oFactura-&gt;getIva(),2,',','').' '.chr(128),'LR',0,'R');&lt;br /&gt;        $this-&gt;Ln();&lt;br /&gt;        //Total&lt;br /&gt;        $this-&gt;Cell($w[0],6,$arTitulos[2],'LR',0,'R');&lt;br /&gt;        $this-&gt;Cell($w[1],6,number_format($oFactura-&gt;getTotal(),2,',','').' '.chr(128),'LR',0,'R');&lt;br /&gt;        $this-&gt;Ln();&lt;br /&gt;&lt;br /&gt;        //Línea de cierre&lt;br /&gt;        $this-&gt;Cell(array_sum($w),0,'','T');&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//Creación del objeto de la clase heredada&lt;br /&gt;$pdf=new PDF();&lt;br /&gt;$pdf-&gt;Header($oFactura);&lt;br /&gt;&lt;br /&gt;//Muestra numero de paginas en el pie&lt;br /&gt;$pdf-&gt;AliasNbPages();&lt;br /&gt;//Creo pagina sobre la que diburjare&lt;br /&gt;$pdf-&gt;AddPage();&lt;br /&gt;&lt;br /&gt;$pdf-&gt;NFactura($oFactura);&lt;br /&gt;//Creo los datos de la empresa emisora&lt;br /&gt;$pdf-&gt;MiEmpresa($oFactura);&lt;br /&gt;$pdf-&gt;Ln(10);&lt;br /&gt;//Creo el cliente&lt;br /&gt;$pdf-&gt;Cliente($oCliente);&lt;br /&gt;//Creo los detalles&lt;br /&gt;$pdf-&gt;Detalles($arDetalles);&lt;br /&gt;//Creo los totales&lt;br /&gt;$pdf-&gt;Totales($oFactura);&lt;br /&gt;&lt;br /&gt;$pdf-&gt;Output();&lt;br /&gt;?&amp;gt;&lt;br /&gt;&lt;/count($header);$i++)&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4026970174490748728-6720554663530463890?l=eduysucodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EduYSusLineasDeCdigoProgramacinNetworkingYMs/~4/XbuqzGE2PfE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://eduysucodigo.blogspot.com/feeds/6720554663530463890/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://eduysucodigo.blogspot.com/2010/04/mysql-php-y-fpdf-caracteres-y.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4026970174490748728/posts/default/6720554663530463890?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4026970174490748728/posts/default/6720554663530463890?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EduYSusLineasDeCdigoProgramacinNetworkingYMs/~3/XbuqzGE2PfE/mysql-php-y-fpdf-caracteres-y.html" title="MySQL, PHP y FPDF Caracteres y cotejamiento." /><author><name>Eduardo A. F.</name><uri>http://www.blogger.com/profile/09981053725148567090</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://eduysucodigo.blogspot.com/2010/04/mysql-php-y-fpdf-caracteres-y.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU4DSXkyfyp7ImA9WxFTF0k.&quot;"><id>tag:blogger.com,1999:blog-4026970174490748728.post-1947107206358611981</id><published>2010-04-08T08:43:00.000-07:00</published><updated>2010-04-08T09:26:18.797-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-08T09:26:18.797-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="childNodes" /><category scheme="http://www.blogger.com/atom/ns#" term="Valor de una celda TD con javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="Recorrer una tabla" /><category scheme="http://www.blogger.com/atom/ns#" term="XML" /><title>HTML + JavaScript Recorrer una Tabla</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/HCsz-ft4TfF9QWYxArxCXlfi1eg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HCsz-ft4TfF9QWYxArxCXlfi1eg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/HCsz-ft4TfF9QWYxArxCXlfi1eg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HCsz-ft4TfF9QWYxArxCXlfi1eg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-weight:bold;"&gt;&amp;lt;table&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;Para recorrer los nodos de una tabla hasta llegar al contenido almacenado en una celda utilizando Javascript hay que recurrir al uso de los metodos:&lt;ul&gt;&lt;br /&gt;&lt;li&gt;elemento.childNodes&lt;/li&gt;&lt;br /&gt;&lt;li&gt;elemento.childNodes[i]&lt;/li&gt;&lt;br /&gt;&lt;li&gt;elemento.childNodes[i].firstChild&lt;/li&gt;&lt;br /&gt;&lt;li&gt;elemento.childNodes.firstChild&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;Haciendo pruebas de ensayo y error hasta obtener el valor de una celda en concreto, descubrí que importa y mucho como esta creada la tabla.&lt;br /&gt;&lt;br /&gt;&lt;pre  style="margin:0; padding:0; border:1px dashed #ccc; color:green;"&gt;&lt;code style="margin:0; padding:0;"&gt;&lt;span style="font-weight:bold;"&gt;EJEMPLO 1:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;table id="tblLista"&amp;gt;&lt;br /&gt;   &amp;lt;thead&amp;gt;&lt;br /&gt;       &amp;lt;tr&amp;gt;&lt;br /&gt;           &amp;lt;th&amp;gt;F.&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;CONCEPTO&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;CANTIDAD&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;       &amp;lt;/tr&amp;gt;&lt;br /&gt;   &amp;lt;/thead&amp;gt;&lt;br /&gt;   &amp;lt;tbody&amp;gt;&lt;br /&gt;       &amp;lt;tr&amp;gt;&lt;br /&gt;           &amp;lt;td&amp;gt;&lt;br /&gt;               &amp;lt;label&amp;gt;2&amp;lt;/label&amp;gt;&lt;br /&gt;           &amp;lt;/td&amp;gt;&lt;br /&gt;           &amp;lt;td&amp;gt;&lt;br /&gt;               &amp;lt;label&amp;gt;flecha&amp;lt;/label&amp;gt;&lt;br /&gt;           &amp;lt;/td&amp;gt;&lt;br /&gt;           &amp;lt;td&amp;gt;&lt;br /&gt;               &amp;lt;label&amp;gt;5.00&amp;lt;/label&amp;gt;&lt;br /&gt;           &amp;lt;/td&amp;gt;&lt;br /&gt;           &amp;lt;td&amp;gt;&lt;br /&gt;               &amp;lt;input type="button" id="botRegM0" name="botRegM0" value="Modificar" /&amp;gt;&lt;br /&gt;           &amp;lt;/td&amp;gt;&lt;br /&gt;           &amp;lt;td&amp;gt;&lt;br /&gt;               &amp;lt;input type="button" id="botRegE0" name="botRegE0" value="Eliminar" /&amp;gt;&lt;br /&gt;           &amp;lt;/td&amp;gt;&lt;br /&gt;       &amp;lt;/tr&amp;gt;&lt;br /&gt;       &amp;lt;tr&amp;gt;&lt;br /&gt;           &amp;lt;td&amp;gt;&lt;br /&gt;               &amp;lt;label&amp;gt;5&amp;lt;/label&amp;gt;&lt;br /&gt;           &amp;lt;/td&amp;gt;&lt;br /&gt;           &amp;lt;td&amp;gt;&lt;br /&gt;               &amp;lt;label&amp;gt;tomates&amp;lt;/label&amp;gt;&lt;br /&gt;           &amp;lt;/td&amp;gt;&lt;br /&gt;           &amp;lt;td&amp;gt;&lt;br /&gt;               &amp;lt;label&amp;gt;7.20&amp;lt;/label&amp;gt;&lt;br /&gt;           &amp;lt;/td&amp;gt;&lt;br /&gt;           &amp;lt;td&amp;gt;&lt;br /&gt;               &amp;lt;input type="button" id="botRegM1" name="botRegM1" value="Modificar" /&amp;gt;&lt;br /&gt;           &amp;lt;/td&amp;gt;&lt;br /&gt;           &amp;lt;td&amp;gt;&lt;br /&gt;               &amp;lt;input type="button" id="botRegE1" name="botRegE1" value="Eliminar" /&amp;gt;&lt;br /&gt;           &amp;lt;/td&amp;gt;&lt;br /&gt;       &amp;lt;/tr&amp;gt;&lt;br /&gt;   &amp;lt;/tbody&amp;gt;&lt;br /&gt;&amp;lt;/table&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;EJEMPLO 2:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;table id="tblLista"&amp;gt;&lt;br /&gt;   &amp;lt;thead&amp;gt;&lt;br /&gt;       &amp;lt;tr&amp;gt;&lt;br /&gt;           &amp;lt;th&amp;gt;F.&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;CONCEPTO&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;CANTIDAD&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;       &amp;lt;/tr&amp;gt;&lt;br /&gt;   &amp;lt;/thead&amp;gt;&lt;br /&gt;   &amp;lt;tbody&amp;gt;&amp;lt;tr&amp;gt;&lt;br /&gt;           &amp;lt;td&amp;gt;&amp;lt;label&amp;gt;2&amp;lt;/label&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;           &amp;lt;td&amp;gt;&amp;lt;label&amp;gt;flecha&amp;lt;/label&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;           &amp;lt;td&amp;gt;&amp;lt;label&amp;gt;5.00&amp;lt;/label&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;           &amp;lt;td&amp;gt;&amp;lt;input type="button" id="botRegM0" name="botRegM0" value="Modificar" /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;           &amp;lt;td&amp;gt;&amp;lt;input type="button" id="botRegE0" name="botRegE0" value="Eliminar" /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;       &amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt;&lt;br /&gt;           &amp;lt;td&amp;gt;&amp;lt;label&amp;gt;5&amp;lt;/label&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;           &amp;lt;td&amp;gt;&amp;lt;label&amp;gt;tomates&amp;lt;/label&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;           &amp;lt;td&amp;gt;&amp;lt;label&amp;gt;7.20&amp;lt;/label&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;           &amp;lt;td&amp;gt;&amp;lt;input type="button" id="botRegM1" name="botRegM1" value="Modificar" /&amp;gt;&lt;br /&gt;           &amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;input type="button" id="botRegE1" name="botRegE1" value="Eliminar" /&amp;gt;&lt;br /&gt;           &amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;   &amp;lt;/tbody&amp;gt;&lt;br /&gt;&amp;lt;/table&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Aunque las dos tengan el mismo contenido y visualmente sean identicas, el recorrido debe de ser distinto ya que en el primer ejemplo las indentaciones y los saltos de linea los detecta como nodos de texto vacios.&lt;br /&gt;&lt;br /&gt;En el segundo ejemplo no hay saltos de linea entre &lt;span style="font-style:italic;"&gt;tr&lt;/span&gt;'s ni tampoco de un &lt;span style="font-style:italic;"&gt;td&lt;/span&gt; a su &lt;span style="font-style:italic;"&gt;label&lt;/span&gt; asi, los nodos de texto desaparecen y si antes para llegar al texto que habia en un &lt;span style="font-style:italic;"&gt;label&lt;/span&gt; habria que hacerlo con una i=4 por ejemplo aqui seria con i=1.&lt;br /&gt;&lt;br /&gt;Esto me sucedio porque &lt;span style="font-weight:bold;"&gt;PHP&lt;/span&gt; me generaba una tabla con una identacion en las &lt;span style="font-style:italic;"&gt;tr&lt;/span&gt; y &lt;span style="font-style:italic;"&gt;td&lt;/span&gt; que no se como la calcula dando como resultado el ejemplo 2 y claro, el algoritmo que habia creado funcionaba perfectamente para el ejemplo 1 cuya tabla la tome como modelo y la hice manualmente.&lt;br /&gt;&lt;br /&gt;Lo que no entiendo y si alguien lo podria comentar seria estupendo, es porque en XML se puede identar y hacer saltos de linea sin que estos sean tomados como nodos de texto.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4026970174490748728-1947107206358611981?l=eduysucodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EduYSusLineasDeCdigoProgramacinNetworkingYMs/~4/X_F1GAduB8Q" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://eduysucodigo.blogspot.com/feeds/1947107206358611981/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://eduysucodigo.blogspot.com/2010/04/html-javascript-recorrer-una-tabla.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4026970174490748728/posts/default/1947107206358611981?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4026970174490748728/posts/default/1947107206358611981?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EduYSusLineasDeCdigoProgramacinNetworkingYMs/~3/X_F1GAduB8Q/html-javascript-recorrer-una-tabla.html" title="HTML + JavaScript Recorrer una Tabla" /><author><name>Eduardo A. F.</name><uri>http://www.blogger.com/profile/09981053725148567090</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://eduysucodigo.blogspot.com/2010/04/html-javascript-recorrer-una-tabla.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0UMRXkyfCp7ImA9WxFTF0w.&quot;"><id>tag:blogger.com,1999:blog-4026970174490748728.post-2658748350722709472</id><published>2010-04-08T00:18:00.000-07:00</published><updated>2010-04-08T02:34:44.794-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-08T02:34:44.794-07:00</app:edited><title>PHP, JAVA  o .NET?</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Kh2AeH8LQZ1zr05ogR4OsBLAgjY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Kh2AeH8LQZ1zr05ogR4OsBLAgjY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Kh2AeH8LQZ1zr05ogR4OsBLAgjY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Kh2AeH8LQZ1zr05ogR4OsBLAgjY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt; Cuando decides iniciarte en el mundo de la programación te preguntas, al menos fue mi caso, ¿Cual es el mejor lenguaje?.  Concretamente por ahorro de tiempo y dinero.  Lo que todo el mundo pide... que sea "bueno, bonito y barato".&lt;/p&gt;&lt;p&gt;Antes de tomar la decision y escoger cual de todos me daría de comer indagué en distintos foros, blogs y portales de empleo.   Aunque no me gustó la conclusion (Microsoft) porque no era lo que esperaba decidí  invertir mi tiempo en aprender .NET.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Yo ya sabia programar en Visual Basic, pero lo deje en la version 6.0 y como no tenia todo el poder de un lenguaje orientado a objetos,  ...ya saben, polimorfismo, herencia, etc.  Por otra parte escuchaba entre amigos y compañeros que este terminaria como lenguaje obsoleto, que mejor aprendiera C#, aunque despues descubri que VisualBasic.Net tiene las mismas capacidades que C#.  Volviendo al hilo, me metí en el mundo POO de Microsoft.&lt;/p&gt;&lt;p&gt;Cuando no sabes lo que es una clase, un objeto,  propiedades, metodos, herencia y resto de terminos de esta tecnologia,  lo ves muy crudo.  Despues de estar acostumbrado a arrastrar un boton y picarle codigo en su evento.  La POO tiene mas miga pero eso es lo que hace esta herramienta muy versatil y de facil mantenimiento.&lt;/p&gt;&lt;p&gt;Me compre un libro que hoy en dia lo sigo utilizando "Programación Microsoft Visual C# .Net" de Anaya, si bien su portada no es la mas llamativa, es decir no entra por los ojos, su contenido es de lo mejor.  Me hubiese gustado más que profundizaran en la sección para aplicaciones web. Pero claro eso lo digo ahora que ya lo he usado pero en un principio es un libro muy completo, tampoco esa no era su finalidad explicar C# para ASPX.  El libro va desde lo que es la POO y como aplicarla con este lenguaje hasta webservices.   &lt;/p&gt;&lt;p&gt;Claro, entonces el mundo laboral era distinto al de hoy (no habia crisis),  las empresas invertian en productos BillGates.&lt;/p&gt;&lt;p&gt;Pasó un tiempo la empresa no soporto la crisis y me toco ir al paro.  Otra vez consultando paginas de empleo y por algunas entrevistas en ETT's la dinamica del lenguaje dominante esta pasando a ser JAVA, me imagino que Murphy habrá inventado una ley como esta: "Basta que aprendas a dominar un lenguaje para que la tendencia del mercado cambie".    Me inscribi en un curso de JAVA SE en tres capas  (Aplicacion, Logica de negocio y BD) esto me daría mas posibilidades en el mercado laboral ...pensé yo.&lt;/p&gt;&lt;p&gt;El curso toco JAVA Basico pero fue muy bueno porque el profesor (Hector Montoya) se las arreglo para explicarnos algo de UML y ver todo el proceso de creacion de software de calidad. Aqui conocí a Ivan un compañero que controlaba bastante de PHP. En otra entrada profundizare sobre esto.  &lt;/p&gt;&lt;p&gt;Acabe el curso y afortunadamete al poco tiempo conseguí trabajo.  Volviendo a la logica de Murphy en esta empresa necesitaban a alguien que supiera de programacion y me di cuenta que era PHP.  Menos mal que Ivan en los momentos que pudo me paso algo de sus conocimientos. &lt;/p&gt;&lt;p&gt;Al final que me siento en mi puesto de trabajo y de entrada hay que crear una aplicacion web, para gestionar noticias.   Mi maquina, un iMAC muy bonito no esta creado para programar en .NET y uds. dirán pero si en JAVA, correcto! acertarón la solucion era evidente, hacerlo en Java.   Una vez alguien me dijo "En informatica nada funciona a la primera y si funciona es porque lo has hecho mal".  Ya puestos con java hice un script para probarlo en el servidor. Sorpresa la mia, ese hosting no admitia JSP, solo PHP, ASP y .NET.&lt;/p&gt;&lt;p&gt;No me quedaba otra opcion, o PHP o pedir un PC con Visualstudio.  En la empresa solo hay un portatil que se cae a trozos con windows XP y que cuando abres el IE tarda 2 min en mostrarte la ventana de google y todo esto despues de formatearlo.&lt;/p&gt;&lt;p&gt;Me instale el NetBeans y XAMPP en machintosh, ja! :0), otro dolor de cabeza.  Ya cuando estaba todo terminado.   Quice hacer la misma estructura de clases que aplique en Java usando NetBeans pero ahora en PHP.  PHP tiene sus peculiaridades, no permite definir varios constructores ni tampoco es tipado, la importacion de librerias es mas rocambolesca pero su gran ventaja es que es totalmente gratuito, al igual que XAMPP y MySQL.   Podrias hacer una aplicacion web compleja a coste 0 (en lo que a licencias se refiere).  De hecho ya existen gestores de contenidos, este mismo blogger esta implementado con php, Joomla, WordPress, Mambo, etc.&lt;/p&gt;&lt;p&gt;En conclusión:&lt;/p&gt;&lt;p&gt;Java es tan potente como C# se integra bien con MySQL y si utilizas entornos de desarrollo como NBeans o Eclipse la programacion se asemeja a C# y VisualStudio.&lt;/p&gt;&lt;p&gt;Java tiene otras arquitecturas añadidas (Capas) Beans, Struts, Servlets etc, y con el tiempo se seguiran desarrollando nuevas, al ser software libre es muy dificil conocer todas sus ramas porque hay mucha gente poniendo su granito de arena y aportando ideas.  Sin embargo Microsoft, al ser cerrado, te facilita las cosas. Tu, visualstudio y access (por irme por lo barato) o SQLServer puedes hacer virguerias partiendo desde una base.  Pero su inconveniente que las licencias no son baratas y es casi obligado utilizar todo marca Msoft.  Windows x, sqlserver, blendstudio, visualstudio, IIS, windows server, etc etc.&lt;/p&gt;&lt;p&gt;Si me preguntaran cual es el mejor lenguaje? ...les contestaria cuanto estas dispuesto a invertir? que por norma general seria lo minimo y terminariamos en PHP y porque no JAVA? porque el lenguaje es gratuito pero no todos los hosting te permiten usarlo.&lt;/p&gt;&lt;p&gt;Y si yo fuera el empresario con suficiente capital no lo pensaria dos veces y apostaria por Microsoft.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4026970174490748728-2658748350722709472?l=eduysucodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EduYSusLineasDeCdigoProgramacinNetworkingYMs/~4/_BsGX-_STy8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://eduysucodigo.blogspot.com/feeds/2658748350722709472/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://eduysucodigo.blogspot.com/2010/04/php-java-o-net.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4026970174490748728/posts/default/2658748350722709472?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4026970174490748728/posts/default/2658748350722709472?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EduYSusLineasDeCdigoProgramacinNetworkingYMs/~3/_BsGX-_STy8/php-java-o-net.html" title="PHP, JAVA  o .NET?" /><author><name>Eduardo A. F.</name><uri>http://www.blogger.com/profile/09981053725148567090</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://eduysucodigo.blogspot.com/2010/04/php-java-o-net.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0AGQng8eCp7ImA9WxFTFko.&quot;"><id>tag:blogger.com,1999:blog-4026970174490748728.post-6956388223668227314</id><published>2010-04-07T13:04:00.000-07:00</published><updated>2010-04-07T13:22:03.670-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-07T13:22:03.670-07:00</app:edited><title>PHP - Clase Base de datos</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/qUEGbb7jCle7MFWBhPczamY4EjE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/qUEGbb7jCle7MFWBhPczamY4EjE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/qUEGbb7jCle7MFWBhPczamY4EjE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/qUEGbb7jCle7MFWBhPczamY4EjE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;span style="font-weight: bold;"&gt;Proyecto MODULOS&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Realizada en NetBeans.  Es por ello que veran las entradas &lt;span style="font-weight:bold;"&gt;// &amp;lt;editor-fold defaultstate="" desc="VARIABLES"&amp;gt; ... // &amp;lt;/editor-fold&amp;gt;&lt;/span&gt; es el equivalente a &lt;span style="font-weight:bold;"&gt;#region&lt;/span&gt; de Visual Studio. Su función es esconder en forma de acordeon las sentencias.  Si se dan cuenta esta como comentario asi que no interviene en absoluto en la ejecucion de la aplicacion.&lt;br /&gt;&lt;br /&gt;&lt;pre style="margin: 0pt; padding: 0pt; border: 1px dashed rgb(204, 204, 204); color: green;"&gt;&lt;code style="margin: 0pt; padding: 0pt;"&gt;&amp;lt;?php include ($_SERVER['DOCUMENT_ROOT'].'/proyMODULOS/config.php'); ?&amp;gt;&lt;br /&gt;&amp;lt;?php&lt;br /&gt;require_once $_RUTARAIZ.'modConexion/Clases/class.ConstBD.php';&lt;br /&gt;&lt;br /&gt;class CBaseDatos&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;// &amp;lt;editor-fold defaultstate="" desc="VARIABLES"&amp;gt;&lt;br /&gt;   private $_linkID;  //resourse para ok y false para error&lt;br /&gt;   private $_Host;&lt;br /&gt;   private $_sNombreBD;&lt;br /&gt;   private $_sUserBD;&lt;br /&gt;   private $_sPassBD;&lt;br /&gt;   private $_sMensaje;&lt;br /&gt;// &amp;lt;/editor-fold&amp;gt;&lt;br /&gt;&lt;br /&gt;// &amp;lt;editor-fold defaultstate="" desc="CONSTRUCTORES"&amp;gt;&lt;br /&gt;   /**&lt;br /&gt;    *CONSTRUCTOR Para iniciar la conexion&lt;br /&gt;    * @param &amp;lt;String&amp;gt; $sUserBD Usuario de la base de datos con privilegios de admin&lt;br /&gt;    * @param &amp;lt;String&amp;gt; $sPassBD Contraseña&lt;br /&gt;    */&lt;br /&gt;   public function __construct()&lt;br /&gt;   {&lt;br /&gt;       $this-&amp;gt;_Host=sServidorBD;&lt;br /&gt;       $this-&amp;gt;_sNombreBD=sNombreBD;&lt;br /&gt;       $this-&amp;gt;_sUserBD=sUserBD;&lt;br /&gt;       $this-&amp;gt;_sPassBD=sClaveBD;&lt;br /&gt;       $this-&amp;gt;_sMensaje="";&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;// &amp;lt;/editor-fold&amp;gt;&lt;br /&gt;&lt;br /&gt;// &amp;lt;editor-fold defaultstate="" desc="METODOS"&amp;gt;&lt;br /&gt;   public function fBoolConectar()&lt;br /&gt;   {&lt;br /&gt;       $pMensaje="SE CONECTO CON EXITO";&lt;br /&gt;       //VERIFICAMOS LA CONEXION AL MOTOR DE BD&lt;br /&gt;       //rCon es tipo resource si tiene exito y guarda un "link identifier"&lt;br /&gt;       //sino guarda un false&lt;br /&gt;       $rConex=mysql_connect&lt;br /&gt;       (&lt;br /&gt;           $this-&amp;gt;_Host,&lt;br /&gt;           $this-&amp;gt;_sUserBD,&lt;br /&gt;           $this-&amp;gt;_sPassBD&lt;br /&gt;       );&lt;br /&gt;&lt;br /&gt;       //si no es tipo resource es q no ha tenido exito la conexion;&lt;br /&gt;       if(!is_resource($rConex))&lt;br /&gt;       {&lt;br /&gt;           $pMensaje="ERROR: No se puede conectar a la base de datos..! ".$this-&amp;gt;_sNombreBD;&lt;br /&gt;           $this-&amp;gt;setMensaje($pMensaje);&lt;br /&gt;           //Lanza la excepcion y se sale del procedimiento&lt;br /&gt;           throw new Exception($pMensaje);&lt;br /&gt;       }&lt;br /&gt;       $this-&amp;gt;setLinkID($rConex);&lt;br /&gt;&lt;br /&gt;       //VERIFICAMOS QUE EXISTA LA BASE DE DATOS EN EL MOTOR&lt;br /&gt;       //Guardo la existencia de la base de datos&lt;br /&gt;       $bBDok = mysql_select_db($this-&amp;gt;getStrNombreBD(), $rConex);&lt;br /&gt;&lt;br /&gt;       //si no se pudo encontrar esa BD lanza un error&lt;br /&gt;       if(!$bBDok)&lt;br /&gt;       {&lt;br /&gt;           $pMensaje="ERROR: No se puede usar la base de datos..! ".$this-&amp;gt;getStrNombreBD();&lt;br /&gt;           $this-&amp;gt;setMensaje($pMensaje);&lt;br /&gt;           //Lanza la excepcion y se sale del procedimiento&lt;br /&gt;           throw new Exception($pMensaje);&lt;br /&gt;       }&lt;br /&gt;&lt;br /&gt;       $this-&amp;gt;setMensaje($pMensaje);&lt;br /&gt;       return true;&lt;br /&gt;       //SI TODO ESTA BIEN HAGO LA PETICION DE DATOS DE UNA TABLA&lt;br /&gt;       //$sSQL="SELECT * FROM USUARIO";&lt;br /&gt;       //$rRegistros=mysql_query($sSQL,$rCon);&lt;br /&gt;   }&lt;br /&gt;// &amp;lt;/editor-fold&amp;gt;&lt;br /&gt;&lt;br /&gt;// &amp;lt;editor-fold defaultstate="collapsed" desc="GETS Y SETS"&amp;gt;&lt;br /&gt;   private function getStrHost()&lt;br /&gt;   {&lt;br /&gt;       return $this-&amp;gt;_Host;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   public function getStrUser()&lt;br /&gt;   {&lt;br /&gt;       return $this-&amp;gt;_sUserBD;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   public function getStrPass()&lt;br /&gt;   {&lt;br /&gt;       return $this-&amp;gt;_sPassBD;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   public function getStrMensaje()&lt;br /&gt;   {&lt;br /&gt;       return $this-&amp;gt;_sMensaje;&lt;br /&gt;   }&lt;br /&gt;   private function getStrNombreBD()&lt;br /&gt;   {&lt;br /&gt;       return $this-&amp;gt;_sNombreBD;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   private function setMensaje($sValor)&lt;br /&gt;   {&lt;br /&gt;       $this-&amp;gt;_sMensaje=$sValor;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   private function setLinkID($rValor)&lt;br /&gt;   {&lt;br /&gt;       $this-&amp;gt;_linkID=$rValor;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   public function getRLinkID()&lt;br /&gt;   {&lt;br /&gt;       return $this-&amp;gt;_linkID;&lt;br /&gt;   }&lt;br /&gt;// &amp;lt;/editor-fold&amp;gt;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;?&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4026970174490748728-6956388223668227314?l=eduysucodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EduYSusLineasDeCdigoProgramacinNetworkingYMs/~4/9Q-OihZUnsQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://eduysucodigo.blogspot.com/feeds/6956388223668227314/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://eduysucodigo.blogspot.com/2010/04/php-clase-base-de-datos.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4026970174490748728/posts/default/6956388223668227314?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4026970174490748728/posts/default/6956388223668227314?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EduYSusLineasDeCdigoProgramacinNetworkingYMs/~3/9Q-OihZUnsQ/php-clase-base-de-datos.html" title="PHP - Clase Base de datos" /><author><name>Eduardo A. F.</name><uri>http://www.blogger.com/profile/09981053725148567090</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://eduysucodigo.blogspot.com/2010/04/php-clase-base-de-datos.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEYFQnY6fSp7ImA9WxFTFkg.&quot;"><id>tag:blogger.com,1999:blog-4026970174490748728.post-5791290415481083533</id><published>2010-04-07T06:32:00.000-07:00</published><updated>2010-04-07T07:55:13.815-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-07T07:55:13.815-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Prefijos en variables y funciones" /><title>Prefijos en variables</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/M_OcaEe-WmplTy5VEOTpa1LzvVM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/M_OcaEe-WmplTy5VEOTpa1LzvVM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/M_OcaEe-WmplTy5VEOTpa1LzvVM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/M_OcaEe-WmplTy5VEOTpa1LzvVM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Mi blog tiene como fin difundir mis experiencias en el mundo de la informática y al mismo tiempo como base de datos de los scripts mas utilizados en los diferentes proyectos que me he intervenido.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;Una mania de tantas:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;En un curso de JAVA, uno de los mejores profesores (Hector F. Montoya) que he tenido, me dió algunos consejos que confirmaron que mis manias no eran de tan "freaky".&lt;br /&gt;&lt;br /&gt;Uno de ellos fue el insertar prefijos en variables.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;La explicacion:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;En lenguajes debilmente tipados tales como PHP, Javascript, ASP etc, sirve de informacion sobre el tipo de dato que guarda esa variable.&lt;br /&gt;  &lt;/li&gt;&lt;br /&gt;  &lt;li&gt;Si trabajas en un entorno que tenga intelisense (ejemplo Eclipse, NetBeans, Visualstudio, Flex etc) te sirve como filtro. Al buscar tus funciones sabes que todas comienzan por f, asi al presionar f se listan tus variables y funciones con prefijo f.&lt;br /&gt;  &lt;/li&gt;&lt;br /&gt;  &lt;li&gt;Hace mas legible el codigo. A aquellos programadores noveles les va indicando&lt;br /&gt;cual es la estructura del algoritmo.  No es lo mismo definir una funcion:&lt;br /&gt;&lt;pre style="margin:0; padding:0; border:1px solid #ccc;"&gt;&lt;code style="margin:0; padding:0;"&gt;&lt;span style="font-weight:bold;"&gt;function Mifuncion(a,b,d)&lt;/span&gt;{...} &lt;br /&gt;a su equivalente &lt;br /&gt;&lt;span style="font-weight:bold;"&gt;function fStrMifuncion(sA,iB,eD)&lt;/span&gt;{...}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;La segunda te dice que es una funcion que devuelve una cadena (Str), recibe como primer parametro un string, como segundo parametro un entero y como ultimo un elemento Html.&lt;br /&gt; &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;PREFIJOS:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;ar=acronimo de array&lt;br /&gt;b= " de Boolean;&lt;br /&gt;i= " de integer&lt;br /&gt;s= " de string&lt;br /&gt;o= " de objeto&lt;br /&gt;e=elemento de DOM&lt;br /&gt;p=procedimiento (en POO llamado metodo)&lt;br /&gt;f=funcion o float&lt;br /&gt;frm=formulario&lt;br /&gt;div=Div&lt;br /&gt;hid=Hidden&lt;br /&gt;txt=Text&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Ejemplo:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="margin:0; padding:0; border:1px dashed #ccc; color:green;"&gt;&lt;code style="margin:0; padding:0;"&gt;//CLASE FONDO&lt;br /&gt;//sIdPadre es el ID del div donde se insertara este, si se pasa null el padre&lt;br /&gt;//sera document.body&lt;br /&gt;function CDiv(arDiv, sIdPadre)&lt;br /&gt;{&lt;br /&gt;    var ePadre=document.body;&lt;br /&gt;    this.eDiv=document.createElement('div');&lt;br /&gt;&lt;br /&gt;    with(this.eDiv)&lt;br /&gt;    {&lt;br /&gt;        id=arDiv['id'];&lt;br /&gt;        style.height=arDiv['Alto'];&lt;br /&gt;        style.width=arDiv['Ancho'];&lt;br /&gt;        style.backgroundColor=arDiv['ColorFondo'];&lt;br /&gt;        style.opacity=arDiv['Opacidad'];&lt;br /&gt;        style.filter=arDiv['Filtro'];//PARA IE&lt;br /&gt;        style.position=arDiv['Posicion'];&lt;br /&gt;        style.zIndex=arDiv['z'];&lt;br /&gt;        style.top=arDiv['y'];&lt;br /&gt;        style.left=arDiv['x'];&lt;br /&gt;        style.padding=arDiv['Padding'];&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    if(sIdPadre==null)&lt;br /&gt;    {&lt;br /&gt;        ePadre.appendChild(this.eDiv);&lt;br /&gt;    }&lt;br /&gt;    else&lt;br /&gt;    {&lt;br /&gt;        ePadre=document.getElementById(sIdPadre);&lt;br /&gt;        ePadre.appendChild(this.eDiv);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    //GETS&lt;br /&gt;    this.getID=function()&lt;br /&gt;    {&lt;br /&gt;        return this.eDiv.id;&lt;br /&gt;    }&lt;br /&gt;    this.getWidth=function()&lt;br /&gt;    {&lt;br /&gt;        return this.eDiv.offsetWidth;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    this.getHeight=function()&lt;br /&gt;    {&lt;br /&gt;        return this.eDiv.offsetHeight;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    this.getTop=function()&lt;br /&gt;    {&lt;br /&gt;        return this.eDiv.offsetTop;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    this.getLeft=function()&lt;br /&gt;    {&lt;br /&gt;        return this.eDiv.offsetLeft;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    //SETS&lt;br /&gt;    this.setWidth=function(sValor)&lt;br /&gt;    {&lt;br /&gt;        this.eDiv.style.width=sValor;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    this.setHeight=function(sValor)&lt;br /&gt;    {&lt;br /&gt;        this.eDiv.style.height=sValor;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    this.setTop=function(sValor)&lt;br /&gt;    {&lt;br /&gt;        this.eDiv.style.top=sValor;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    this.setLeft=function(sValor)&lt;br /&gt;    {&lt;br /&gt;        this.eDiv.style.left=sValor;&lt;br /&gt;    }&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4026970174490748728-5791290415481083533?l=eduysucodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EduYSusLineasDeCdigoProgramacinNetworkingYMs/~4/zhMCdawGlsQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://eduysucodigo.blogspot.com/feeds/5791290415481083533/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://eduysucodigo.blogspot.com/2010/04/conoceme-un-poco.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4026970174490748728/posts/default/5791290415481083533?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4026970174490748728/posts/default/5791290415481083533?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EduYSusLineasDeCdigoProgramacinNetworkingYMs/~3/zhMCdawGlsQ/conoceme-un-poco.html" title="Prefijos en variables" /><author><name>Eduardo A. F.</name><uri>http://www.blogger.com/profile/09981053725148567090</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://eduysucodigo.blogspot.com/2010/04/conoceme-un-poco.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0IMSX07eCp7ImA9WxFTFks.&quot;"><id>tag:blogger.com,1999:blog-4026970174490748728.post-7869650983852366105</id><published>2010-04-07T06:07:00.000-07:00</published><updated>2010-04-07T12:46:28.300-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-07T12:46:28.300-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="modal" /><category scheme="http://www.blogger.com/atom/ns#" term="Javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="webform con js" /><category scheme="http://www.blogger.com/atom/ns#" term="webform en tiempo real" /><title>Javascript - Formulario Dinámico</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Z5c_CPY9CMYNNZp2p0slS2Q7pDc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Z5c_CPY9CMYNNZp2p0slS2Q7pDc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Z5c_CPY9CMYNNZp2p0slS2Q7pDc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Z5c_CPY9CMYNNZp2p0slS2Q7pDc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;En un proyecto de facturación que en un principio tome como base clases unicas en PHP, es decir sin que intervenga en ningun punto javascript.  Digamos que estas clases formarian la base de mi framework.  Terminada esa fase. Me tocaba crear las interfaces (formularios web) con su respectiva validación en cliente y alguna otra tarea.&lt;br /&gt;&lt;br /&gt;Me tocaba programar en Javascript.  La programación en este lenguaje preferia delegarla a frameworks ya existentes como mootools, JQuery, script.aculo.us pero hay funciones concretas que no las tienen asi que no queda otra que picar codigo.&lt;br /&gt;&lt;br /&gt;Lo mas parecido a lo que necesitaba lo tenia &lt;a href="http://jqueryui.com/demos/dialog/#modal"&gt;jQuery UI&lt;/a&gt; pero tampoco soy un experto en estos paquetes.&lt;br /&gt;&lt;br /&gt;Dicho esto.. llegue a un punto en que decidí enfrentarme a una interface tipo modal propia.  Leyendo en distintos blogs no encontre ninguno que tuviera algun tipo de codigo que podia reutilizar.&lt;br /&gt;&lt;br /&gt;Asi que me puse manos a la obra y este es el resultado.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_GLmQ9PZSL-Y/S7zbWnT0eeI/AAAAAAAAAHE/_mPAwYoDoMU/s1600/Formulario.png"&gt;&lt;img style="float: none; margin: 0pt 10px 10px 0pt; cursor: pointer; width: 320px; height: 220px;" src="http://1.bp.blogspot.com/_GLmQ9PZSL-Y/S7zbWnT0eeI/AAAAAAAAAHE/_mPAwYoDoMU/s320/Formulario.png" alt="" id="BLOGGER_PHOTO_ID_5457478030021917154" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;pre  style="margin: 0pt; padding: 0pt; border: 1px dashed rgb(204, 204, 204);color:green;"&gt;&lt;code style="margin: 0pt; padding: 0pt;"&gt;&lt;span style="font-weight: bold;"&gt;//Archivo jsFormDinamico.js&lt;/span&gt;&lt;br /&gt;//arDIVFONDO: Son los parametros para el Div de fondo que evitara interaccionar con&lt;br /&gt;//los elementos (controles) que hay detras.  Los que programan en .NET es el&lt;br /&gt;//equivalente a la opcion MODAL del formulario.&lt;br /&gt;var arDIVFONDO=new Array();&lt;br /&gt;arDIVFONDO['id']="divFondo";&lt;br /&gt;arDIVFONDO['Alto']="0px";&lt;br /&gt;arDIVFONDO['Ancho']="0px";&lt;br /&gt;arDIVFONDO['ColorFondo']="#000";&lt;br /&gt;arDIVFONDO['Opacidad']=".5";&lt;br /&gt;arDIVFONDO['Filtro']="alpha(opacity=50)";&lt;br /&gt;arDIVFONDO['Posicion']="absolute";&lt;br /&gt;arDIVFONDO['z']="1";&lt;br /&gt;arDIVFONDO['y']="0px";&lt;br /&gt;arDIVFONDO['x']="0px";&lt;br /&gt;arDIVFONDO['Padding']="0px";&lt;br /&gt;&lt;br /&gt;//arDIVFORM: Contenedor del formulario ojo con z pq su padre no es el arDIVFONDO&lt;br /&gt;//si fuera asi, todo se veria con opacidad asi que este, esta encima con z=2&lt;br /&gt;var arDIVFORM=new Array();&lt;br /&gt;arDIVFORM['id']="divForm";&lt;br /&gt;arDIVFORM['Alto']="55px";&lt;br /&gt;arDIVFORM['Ancho']="499px";&lt;br /&gt;arDIVFORM['ColorFondo']="white";&lt;br /&gt;arDIVFORM['Opacidad']=".99";&lt;br /&gt;arDIVFORM['Filtro']="alpha(opacity=100)";&lt;br /&gt;arDIVFORM['Posicion']="absolute";&lt;br /&gt;arDIVFORM['z']="2";&lt;br /&gt;arDIVFORM['y']="0px";&lt;br /&gt;arDIVFORM['x']="0px";&lt;br /&gt;arDIVFORM['Padding']="10px";&lt;br /&gt;&lt;br /&gt;//arFORM: Los atributos del formulario que ira dentro de divForm&lt;br /&gt;var arFORM=new Array();&lt;br /&gt;arFORM['id']="frmEditar";&lt;br /&gt;arFORM['Nombre']="frmEditar";&lt;br /&gt;arFORM['Metodo']="post";&lt;br /&gt;arFORM['Accion']="contacto.php";&lt;br /&gt;arFORM['Alto']="auto";&lt;br /&gt;arFORM['Ancho']="auto";&lt;br /&gt;arFORM['ColorFondo']="auto";&lt;br /&gt;arFORM['Posicion']="relative";&lt;br /&gt;arFORM['z']="2";&lt;br /&gt;arFORM['y']="0px";&lt;br /&gt;arFORM['x']="0px";&lt;br /&gt;arFORM['Padding']="0";&lt;br /&gt;&lt;br /&gt;//arTabla: La tabla que utilizare para ordenar los controles&lt;br /&gt;//se que esto no cumple con W3C Strict, pero si me ponia con fieldset se me&lt;br /&gt;//iba hacer muy largo. 2Filas una la cabecera y otra con los controles&lt;br /&gt;var arTABLA=new Array();&lt;br /&gt;arTABLA['id']="tabDetalles";&lt;br /&gt;arTABLA['Filas']=2;&lt;br /&gt;arTABLA['Columnas']=5;&lt;br /&gt;arTABLA['Alto']="auto";&lt;br /&gt;arTABLA['Ancho']="auto";&lt;br /&gt;arTABLA['ColorFondo']="auto";&lt;br /&gt;arTABLA['Posicion']="relative";&lt;br /&gt;arTABLA['z']="2";&lt;br /&gt;arTABLA['y']="0px";&lt;br /&gt;arTABLA['x']="0px";&lt;br /&gt;arTABLA['Borde']="1px solid red";&lt;br /&gt;&lt;br /&gt;//arHIDDEN: Mi campo hidden necesario para enviarlo con POST y capturarlo con&lt;br /&gt;//PHP&lt;br /&gt;var arHIDDEN=new Array();&lt;br /&gt;arHIDDEN['Tipo']="hidden";&lt;br /&gt;arHIDDEN['id']="hidFila";&lt;br /&gt;arHIDDEN['Nombre']="hidFila";&lt;br /&gt;arHIDDEN['Valor']="5";          //Modificar, es el campo clave del registro&lt;br /&gt;&lt;br /&gt;//arTXTCONCEP: Campo de texto "CONCEPTO"&lt;br /&gt;var arTXTCONCEP=new Array();&lt;br /&gt;arTXTCONCEP['Tipo']="text";&lt;br /&gt;arTXTCONCEP['id']="txtConcep";&lt;br /&gt;arTXTCONCEP['Nombre']="txtConcep";&lt;br /&gt;arTXTCONCEP['Valor']="Diseño de tarjetas + impresion";  //Modificar&lt;br /&gt;arTXTCONCEP['Ancho']="250px";&lt;br /&gt;&lt;br /&gt;//arTXTCONCEP: Campo de texto "CANTIDAD"&lt;br /&gt;var arTXTCANT=new Array();&lt;br /&gt;arTXTCANT['Tipo']="text";&lt;br /&gt;arTXTCANT['id']="txtCant";&lt;br /&gt;arTXTCANT['Nombre']="txtCant";&lt;br /&gt;arTXTCANT['Valor']=" 300,00 ";  //Modificar&lt;br /&gt;arTXTCANT['Ancho']="70px";&lt;br /&gt;&lt;br /&gt;//arBOTCANCELAR: Sirve para destruir las dos capas y permite seguir interactuando&lt;br /&gt;//con el formulario original&lt;br /&gt;var arBOTCANCELAR=new Array();&lt;br /&gt;arBOTCANCELAR['Tipo']="button";&lt;br /&gt;arBOTCANCELAR['id']="botCancelar";&lt;br /&gt;arBOTCANCELAR['Nombre']="botCancelar";&lt;br /&gt;arBOTCANCELAR['Valor']="Cancelar";&lt;br /&gt;arBOTCANCELAR['Ancho']="auto";&lt;br /&gt;&lt;br /&gt;//arSUBACEPTAR: Sirve para enviar la informacion del formulario. (El submit de toda la vida).&lt;br /&gt;var arSUBACEPTAR=new Array();&lt;br /&gt;arSUBACEPTAR['Tipo']="submit";&lt;br /&gt;arSUBACEPTAR['id']="subAceptar";&lt;br /&gt;arSUBACEPTAR['Nombre']="subAceptar";&lt;br /&gt;arSUBACEPTAR['Valor']="Aceptar";&lt;br /&gt;arSUBACEPTAR['Ancho']="auto";&lt;br /&gt;&lt;br /&gt;//**************************************************************&lt;br /&gt;//**************  FIN ZONA DE PARAMETROS  ********************//&lt;br /&gt;//**************************************************************&lt;br /&gt;&lt;br /&gt;//--- AQUI EMPIEZA LO BUENO -- //&lt;br /&gt;&lt;br /&gt;//VARIABLES "GLOBALES" (por lo de la G ;0)&lt;br /&gt;var oGVentana=null;   //Pq "o"? pq esta clase no gestiona ningun elemento DOM&lt;br /&gt;var eGDivFondo=null;&lt;br /&gt;var eGDivForm=null;&lt;br /&gt;var eGFormulario=null;&lt;br /&gt;var eGTabla=null;&lt;br /&gt;var eGHidFila=null;&lt;br /&gt;var eGTxtConcep=null;&lt;br /&gt;var eGTxtCant=null;&lt;br /&gt;var eGbotCancelar=null;&lt;br /&gt;var eGSubAceptar=null;&lt;br /&gt;&lt;br /&gt;var bGFrmCreado=false;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//CLASE VENTANA&lt;br /&gt;function CVentana()&lt;br /&gt;{&lt;br /&gt;   var iAltura = 0; // height&lt;br /&gt;   var iAnchura = 0; // width&lt;br /&gt;&lt;br /&gt;   var pCalculaTamano=function()&lt;br /&gt;   {&lt;br /&gt;       if( typeof( window.innerHeight ) == 'number' )&lt;br /&gt;       {&lt;br /&gt;           iAltura = window.innerHeight;&lt;br /&gt;           iAnchura = window.innerWidth;&lt;br /&gt;       }&lt;br /&gt;       else if( document.body &amp;amp;&amp;amp; document.body.clientHeight )&lt;br /&gt;       {&lt;br /&gt;           //IE 4 o superior&lt;br /&gt;           iAltura = document.body.clientHeight;&lt;br /&gt;           iAnchura = document.body.clientWidth;&lt;br /&gt;       }&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   pCalculaTamano();&lt;br /&gt;   this.iAncho=iAnchura;&lt;br /&gt;   this.iAlto=iAltura;&lt;br /&gt;&lt;br /&gt;   this.getAncho=function()&lt;br /&gt;   {&lt;br /&gt;       return this.iAncho+"px";&lt;br /&gt;   }&lt;br /&gt;   this.getAlto=function()&lt;br /&gt;   {&lt;br /&gt;       return this.iAlto+"px";&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//CLASE FONDO&lt;br /&gt;//sIdPadre es el ID del div donde se insertara este, si se pasa null el padre&lt;br /&gt;//sera document.body&lt;br /&gt;function CDiv(arDiv, sIdPadre)&lt;br /&gt;{&lt;br /&gt;   var ePadre=document.body;&lt;br /&gt;   this.eDiv=document.createElement('div');&lt;br /&gt;&lt;br /&gt;   with(this.eDiv)&lt;br /&gt;   {&lt;br /&gt;       id=arDiv['id'];&lt;br /&gt;       style.height=arDiv['Alto'];&lt;br /&gt;       style.width=arDiv['Ancho'];&lt;br /&gt;       style.backgroundColor=arDiv['ColorFondo'];&lt;br /&gt;       style.opacity=arDiv['Opacidad'];&lt;br /&gt;       style.filter=arDiv['Filtro'];//PARA IE&lt;br /&gt;       style.position=arDiv['Posicion'];&lt;br /&gt;       style.zIndex=arDiv['z'];&lt;br /&gt;       style.top=arDiv['y'];&lt;br /&gt;       style.left=arDiv['x'];&lt;br /&gt;       style.padding=arDiv['Padding'];&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   if(sIdPadre==null)&lt;br /&gt;   {&lt;br /&gt;       ePadre.appendChild(this.eDiv);&lt;br /&gt;   }&lt;br /&gt;   else&lt;br /&gt;   {&lt;br /&gt;       ePadre=document.getElementById(sIdPadre);&lt;br /&gt;       ePadre.appendChild(this.eDiv);&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   //GETS&lt;br /&gt;   this.getID=function()&lt;br /&gt;   {&lt;br /&gt;       return this.eDiv.id;&lt;br /&gt;   }&lt;br /&gt;   this.getWidth=function()&lt;br /&gt;   {&lt;br /&gt;       return this.eDiv.offsetWidth;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   this.getHeight=function()&lt;br /&gt;   {&lt;br /&gt;       return this.eDiv.offsetHeight;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   this.getTop=function()&lt;br /&gt;   {&lt;br /&gt;       return this.eDiv.offsetTop;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   this.getLeft=function()&lt;br /&gt;   {&lt;br /&gt;       return this.eDiv.offsetLeft;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   //SETS&lt;br /&gt;   this.setWidth=function(sValor)&lt;br /&gt;   {&lt;br /&gt;       this.eDiv.style.width=sValor;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   this.setHeight=function(sValor)&lt;br /&gt;   {&lt;br /&gt;       this.eDiv.style.height=sValor;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   this.setTop=function(sValor)&lt;br /&gt;   {&lt;br /&gt;       this.eDiv.style.top=sValor;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   this.setLeft=function(sValor)&lt;br /&gt;   {&lt;br /&gt;       this.eDiv.style.left=sValor;&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//CLASE FORMULARIO&lt;br /&gt;function CForm(arForm, sIdPadre)&lt;br /&gt;{&lt;br /&gt;   var ePadre=document.body;&lt;br /&gt;   this.eForm=document.createElement('form');&lt;br /&gt;&lt;br /&gt;   with(this.eForm)&lt;br /&gt;   {&lt;br /&gt;       id=arForm['id'];&lt;br /&gt;       setAttribute("name", arForm['Nombre']);&lt;br /&gt;       setAttribute("method", arForm['Metodo']);&lt;br /&gt;       setAttribute("action", arForm['Accion']);&lt;br /&gt;&lt;br /&gt;       style.height=arForm['Alto'];&lt;br /&gt;       style.width=arForm['Ancho'];&lt;br /&gt;       style.backgroundColor=arForm['ColorFondo'];&lt;br /&gt;       style.position=arForm['Posicion'];&lt;br /&gt;       style.zIndex=arForm['z'];&lt;br /&gt;       style.top=arForm['y'];&lt;br /&gt;       style.left=arForm['x'];&lt;br /&gt;       style.padding=arForm['Padding'];&lt;br /&gt;       /*style.border="1px solid green";*/&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   if(sIdPadre==null)&lt;br /&gt;   {&lt;br /&gt;       ePadre.appendChild(this.eForm);&lt;br /&gt;   }&lt;br /&gt;   else&lt;br /&gt;   {&lt;br /&gt;       ePadre=document.getElementById(sIdPadre);&lt;br /&gt;       ePadre.appendChild(this.eForm);&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   //GETS&lt;br /&gt;   this.getID=function()&lt;br /&gt;   {&lt;br /&gt;       return this.eForm.id;&lt;br /&gt;   }&lt;br /&gt;   this.getWidth=function()&lt;br /&gt;   {&lt;br /&gt;       return this.eForm.offsetWidth;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   this.getHeight=function()&lt;br /&gt;   {&lt;br /&gt;       return this.eForm.offsetHeight;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   this.getTop=function()&lt;br /&gt;   {&lt;br /&gt;       return this.eForm.offsetTop;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   this.getLeft=function()&lt;br /&gt;   {&lt;br /&gt;       return this.eForm.offsetLeft;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   //SETS&lt;br /&gt;   this.setWidth=function(sValor)&lt;br /&gt;   {&lt;br /&gt;       this.eForm.style.width=sValor;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   this.setHeight=function(sValor)&lt;br /&gt;   {&lt;br /&gt;       this.eForm.style.height=sValor;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   this.setTop=function(sValor)&lt;br /&gt;   {&lt;br /&gt;       this.eForm.style.top=sValor;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   this.setLeft=function(sValor)&lt;br /&gt;   {&lt;br /&gt;       this.eForm.style.left=sValor;&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//CLASE INPUT boton, texto, hidden submit..&lt;br /&gt;function CInput(arInput, eParent)&lt;br /&gt;{&lt;br /&gt;   var ePadre=document.body;&lt;br /&gt;   this.eInput=document.createElement('input');&lt;br /&gt;&lt;br /&gt;   with(this.eInput)&lt;br /&gt;   {&lt;br /&gt;       setAttribute("type", arInput['Tipo']);&lt;br /&gt;       id=arInput['id'];&lt;br /&gt;       setAttribute("name", arInput['Nombre']);&lt;br /&gt;       setAttribute("value", arInput['Valor']);&lt;br /&gt;       //Estilo&lt;br /&gt;       style.width=arInput['Ancho'];&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   if(arInput['Tipo']=="button")&lt;br /&gt;   {&lt;br /&gt;       //Registramos los eventos&lt;br /&gt;       //http://www.w3.org/TR/DOM-Level-2-Events/events.html&lt;br /&gt;       if(document.all) //ES IE&lt;br /&gt;       {&lt;br /&gt;           this.eInput.attachEvent("onclick", pCancelar);&lt;br /&gt;       }&lt;br /&gt;       else //OTROS NAVEGADORES&lt;br /&gt;       {&lt;br /&gt;           this.eInput.addEventListener("click", pCancelar, true);&lt;br /&gt;       }&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;   function pCancelar()&lt;br /&gt;   {&lt;br /&gt;       var eDivAux = document.getElementById(eGDivForm.getID());&lt;br /&gt;       document.body.removeChild(eDivAux);&lt;br /&gt;&lt;br /&gt;       eDivAux = document.getElementById(eGDivFondo.getID());&lt;br /&gt;       document.body.removeChild(eDivAux);&lt;br /&gt;&lt;br /&gt;       //Destruyo mis objetos&lt;br /&gt;       oGVentana=null;&lt;br /&gt;       eGDivFondo=null;&lt;br /&gt;       eGDivForm=null;&lt;br /&gt;       eGFormulario=null;&lt;br /&gt;       eGTabla=null;&lt;br /&gt;       eGHidFila=null;&lt;br /&gt;       eGTxtConcep=null;&lt;br /&gt;       eGTxtCant=null;&lt;br /&gt;       eGbotCancelar=null;&lt;br /&gt;       eGSubAceptar=null;&lt;br /&gt;&lt;br /&gt;       //Actualizo mi variable&lt;br /&gt;       bGFrmCreado=false;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   if(eParent==null)&lt;br /&gt;   {&lt;br /&gt;       ePadre.appendChild(this.eInput);&lt;br /&gt;   }&lt;br /&gt;   else&lt;br /&gt;   {&lt;br /&gt;       eParent.appendChild(this.eInput);&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   //GETS&lt;br /&gt;   this.getID=function()&lt;br /&gt;   {&lt;br /&gt;       return this.eInput.id;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   this.getValor=function()&lt;br /&gt;   {&lt;br /&gt;       return this.eInput.value;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   this.getWidth=function()&lt;br /&gt;   {&lt;br /&gt;       return this.eInput.offsetWidth;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   //SETS&lt;br /&gt;   this.setWidth=function(sValor)&lt;br /&gt;   {&lt;br /&gt;       this.eInput.style.width=sValor;&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//CLASE TABLA&lt;br /&gt;function CTabla(arTabla, sIdPadre)&lt;br /&gt;{&lt;br /&gt;   var arTextos=new Array();&lt;br /&gt;   arTextos[0]="F";&lt;br /&gt;   arTextos[1]="CONCEPTO";&lt;br /&gt;   arTextos[2]="CANTIDAD";&lt;br /&gt;   arTextos[3]="";&lt;br /&gt;   arTextos[4]="";&lt;br /&gt;&lt;br /&gt;   var ePadre=document.body;&lt;br /&gt;   this.eTable=document.createElement('table');&lt;br /&gt;&lt;br /&gt;   with(this.eTable)&lt;br /&gt;   {&lt;br /&gt;       id=arTabla['id'];&lt;br /&gt;       setAttribute("name", arTabla['Nombre']);&lt;br /&gt;&lt;br /&gt;       style.height=arTabla['Alto'];&lt;br /&gt;       style.width=arTabla['Ancho'];&lt;br /&gt;       style.backgroundColor=arTabla['ColorFondo'];&lt;br /&gt;       style.position=arTabla['Posicion'];&lt;br /&gt;       style.zIndex=arTabla['z'];&lt;br /&gt;       style.top=arTabla['y'];&lt;br /&gt;       style.left=arTabla['x'];&lt;br /&gt;       style.padding=arTabla['Padding'];&lt;br /&gt;       style.border=arTabla['Borde'];&lt;br /&gt;   }&lt;br /&gt;   //Genero la tabla&lt;br /&gt;   for(var i=0; i&amp;lt;arTabla['Filas']; i++)&lt;br /&gt;   {&lt;br /&gt;       var auxTR=document.createElement("tr");&lt;br /&gt;       for(var j=0; j&amp;amp;ltarTabla['Columnas']; j++)&lt;br /&gt;       {&lt;br /&gt;           var auxTD=document.createElement("td");&lt;br /&gt;           var auxText;&lt;br /&gt;           if(i==0) //Es la cabecera&lt;br /&gt;           {&lt;br /&gt;               auxText=document.createTextNode(arTextos[j]);&lt;br /&gt;               auxTD.appendChild(auxText);&lt;br /&gt;           }&lt;br /&gt;           else //El resto de filas&lt;br /&gt;           {&lt;br /&gt;               switch (j)&lt;br /&gt;               {&lt;br /&gt;                   case 0:&lt;br /&gt;                      eGHidFila = new CInput(arHIDDEN, auxTD);&lt;br /&gt;                      auxText=document.createTextNode(eGHidFila.getValor());&lt;br /&gt;                      auxTD.appendChild(auxText);&lt;br /&gt;                       break&lt;br /&gt;                   case 1:&lt;br /&gt;                      eGTxtConcep = new CInput(arTXTCONCEP, auxTD);&lt;br /&gt;                       break&lt;br /&gt;                   case 2:&lt;br /&gt;                      eGTxtCant = new CInput(arTXTCANT, auxTD);&lt;br /&gt;                       break&lt;br /&gt;                   case 3:&lt;br /&gt;                      eGSubAceptar = new CInput(arSUBACEPTAR, auxTD);&lt;br /&gt;                       break&lt;br /&gt;                   case 4:&lt;br /&gt;                      eGbotCancelar = new CInput(arBOTCANCELAR, auxTD);&lt;br /&gt;                      break&lt;br /&gt;                   default:&lt;br /&gt;                       document.write("Esta columna no existe!!");&lt;br /&gt;               }&lt;br /&gt;           }&lt;br /&gt;           auxTR.appendChild(auxTD);&lt;br /&gt;       }&lt;br /&gt;       this.eTable.appendChild(auxTR);&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   if(sIdPadre==null)&lt;br /&gt;   {&lt;br /&gt;       ePadre.appendChild(this.eTable);&lt;br /&gt;   }&lt;br /&gt;   else&lt;br /&gt;   {&lt;br /&gt;       ePadre=document.getElementById(sIdPadre);&lt;br /&gt;       ePadre.appendChild(this.eTable);&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   //GETS&lt;br /&gt;   this.getID=function()&lt;br /&gt;   {&lt;br /&gt;       return this.eTable.id;&lt;br /&gt;   }&lt;br /&gt;   this.getWidth=function()&lt;br /&gt;   {&lt;br /&gt;       return this.eTable.offsetWidth;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   this.getHeight=function()&lt;br /&gt;   {&lt;br /&gt;       return this.eTable.offsetHeight;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   this.getTop=function()&lt;br /&gt;   {&lt;br /&gt;       return this.eTable.offsetTop;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   this.getLeft=function()&lt;br /&gt;   {&lt;br /&gt;       return this.eTable.offsetLeft;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   //SETS&lt;br /&gt;   this.setWidth=function(sValor)&lt;br /&gt;   {&lt;br /&gt;       this.eTable.style.width=sValor;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   this.setHeight=function(sValor)&lt;br /&gt;   {&lt;br /&gt;       this.eTable.style.height=sValor;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   this.setTop=function(sValor)&lt;br /&gt;   {&lt;br /&gt;       this.eTable.style.top=sValor;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   this.setLeft=function(sValor)&lt;br /&gt;   {&lt;br /&gt;       this.eTable.style.left=sValor;&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//Procedimiento que vincularas a un evento Click y que dara como resultado&lt;br /&gt;//la generacion del formulario&lt;br /&gt;function pClick()&lt;br /&gt;{&lt;br /&gt;   //Objeto ventana obtiene el tamaño de la pantalla&lt;br /&gt;   //necesario para el centrado y el recubrimiento de los controles&lt;br /&gt;   oGVentana = new CVentana();&lt;br /&gt;&lt;br /&gt;   //El elemento Div con opacidad&lt;br /&gt;   eGDivFondo= new CDiv(arDIVFONDO,null);&lt;br /&gt;   eGDivFondo.setWidth(oGVentana.getAncho());&lt;br /&gt;   eGDivFondo.setHeight(oGVentana.getAlto());&lt;br /&gt;&lt;br /&gt;   //El elemento Div contenedor del formulario&lt;br /&gt;   eGDivForm = new CDiv(arDIVFORM, null);&lt;br /&gt;  &lt;br /&gt;   //Centro el contenedor en pantalla&lt;br /&gt;   var aux=(eGDivFondo.getWidth()-eGDivForm.getWidth())/2 + "px";&lt;br /&gt;   eGDivForm.setLeft(aux);&lt;br /&gt;   aux=(eGDivFondo.getHeight()-eGDivForm.getHeight())/2 + "px";&lt;br /&gt;   eGDivForm.setTop(aux);&lt;br /&gt;&lt;br /&gt;   //Creo el Formulario y lo adjunto a su padre el eGDivForm&lt;br /&gt;   eGFormulario=new CForm(arFORM, eGDivForm.getID());&lt;br /&gt;&lt;br /&gt;   //Creo la Tabla (para tabular mis controles) y lo adjunto a su padre eGFormulario&lt;br /&gt;   eGTabla=new CTabla(arTABLA, eGFormulario.getID());&lt;br /&gt;&lt;br /&gt;   //Indico que se ha generado el formulario, esto me servira para&lt;br /&gt;   //el evento que se ejecuta cuando se redimensiona la pantalla&lt;br /&gt;   bGFrmCreado=true;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;window.onresize = function ()&lt;br /&gt;{&lt;br /&gt;   if(bGFrmCreado)&lt;br /&gt;   {&lt;br /&gt;       //Creo nuevamente oVentana para actualizar su tamaño&lt;br /&gt;       oGVentana = new CVentana();&lt;br /&gt;       //Redimensiono el Div con opacidad&lt;br /&gt;       eGDivFondo.setWidth(oGVentana.getAncho());&lt;br /&gt;       eGDivFondo.setHeight(oGVentana.getAlto());&lt;br /&gt;&lt;br /&gt;       //centro divForm&lt;br /&gt;       var aux=(eGDivFondo.getWidth()-eGDivForm.getWidth())/2 + "px";&lt;br /&gt;       eGDivForm.setLeft(aux);&lt;br /&gt;       aux=(eGDivFondo.getHeight()-eGDivForm.getHeight())/2 + "px";&lt;br /&gt;       eGDivForm.setTop(aux);&lt;br /&gt;   }&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;pre  style="margin: 0pt; padding: 0pt; border: 1px dashed rgb(204, 204, 204);color:green;"&gt;&lt;code style="margin: 0pt; padding: 0pt;"&gt;&lt;span style="font-weight: bold;"&gt;Archivo prueba.xhtml&lt;/span&gt;&lt;br /&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&amp;gt;&lt;br /&gt;&amp;lt;html xmlns="http://www.w3.org/1999/xhtml"&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;   &amp;lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/&amp;gt;&lt;br /&gt;   &amp;lt;script type="text/javascript" src="CSS_JS/jsFormDinamico.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;   &amp;lt;title&amp;gt;Formulario Dinamico&amp;lt;/title&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;body id="cuerpo"&amp;gt;&lt;br /&gt;   &amp;lt;div id="divFormulario"&amp;gt;&lt;br /&gt;       &amp;lt;form id="frmPagina" method="" action=""&amp;gt;&lt;br /&gt;           &amp;lt;fieldset&amp;gt;&lt;br /&gt;               &amp;lt;dl&amp;gt;&lt;br /&gt;                   &amp;lt;dt&amp;gt;&amp;lt;/dt&amp;gt;&lt;br /&gt;                   &amp;lt;dd&amp;gt;&amp;lt;input type="button" id="botCrear" name="botCrear" value="Crear Formulario" onclick="pClick();" /&amp;gt;&amp;lt;/dd&amp;gt;&lt;br /&gt;               &amp;lt;/dl&amp;gt;&lt;br /&gt;           &amp;lt;/fieldset&amp;gt;&lt;br /&gt;       &amp;lt;/form&amp;gt;&lt;br /&gt;   &amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4026970174490748728-7869650983852366105?l=eduysucodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EduYSusLineasDeCdigoProgramacinNetworkingYMs/~4/g3ZlNOf3_mk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://eduysucodigo.blogspot.com/feeds/7869650983852366105/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://eduysucodigo.blogspot.com/2010/04/javascript-formulario-dinamico.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4026970174490748728/posts/default/7869650983852366105?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4026970174490748728/posts/default/7869650983852366105?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EduYSusLineasDeCdigoProgramacinNetworkingYMs/~3/g3ZlNOf3_mk/javascript-formulario-dinamico.html" title="Javascript - Formulario Dinámico" /><author><name>Eduardo A. F.</name><uri>http://www.blogger.com/profile/09981053725148567090</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_GLmQ9PZSL-Y/S7zbWnT0eeI/AAAAAAAAAHE/_mPAwYoDoMU/s72-c/Formulario.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://eduysucodigo.blogspot.com/2010/04/javascript-formulario-dinamico.html</feedburner:origLink></entry></feed>

