Mas sobre formularios, para poder rellenar un formulario WEB desde VFP debes abrir este con el navegador y verificar el código que te trae, y busca los nombres de campos que quieres rellenar y que método generalmente es algún PHP) es el que procesa esta información, posteriormente armas tu PRG en VFP para el envío de estas variables y su contenido.
¿Que otras cosas podríamos hacer?Por ejemplo:
- lanzar un backup de mysql desde un terminal VFP
- lanzar cualquier comando y/o programa siempre y cuando tenga acceso en el servidor
- analizar la comunicación entre el servidor y el cliente web
Se muestran a continuación 4 segmentos de código:
- el código FOXPRO que hace las llamadas y recibe los resultados.
- código PHP que recibe los parámetros del VFP y ejecuta instrucciones y devuelve el control al VFP
- el formulario HTML que estamos emulando desde el VFP
- la base de datos MySql para hacer la prueba
- WIN7 no probé versiones inferiores
- VFP8.0 o superior debería funcionar desde la 6.0 pero no lo probé
- Yo use fedora 10 con apache 2.2.10, PHP 5.2.6 y MySql 5.0.67 pero alternativamente podríamos utilizar xampp (win32 portable), o wamp o similares que se ejecutan en la misma maquina
*//-------------------------------------------------------------------------------------------- *//............................................................................................ *//......Fecha: 18-08-2011............................................................. *//......Autor: OMAR DUILIO ROJAS FORNERON............................................. *//......Localidad: Encarnación-Paraguay...orodrf@gmail.com................................ *//......Funcion: Ejecuta un metodo php y envia ciertos parametros por metodo POST....... *//...... Es basicamente un metodo que ejecuta una rutina php en un servidor y... *//...... que envia parametros, para que me podia servir esto? bueno supongamos.. *//...... que hay algun servidor que tiene un formulario y que deseas rellenar... *//...... desde el VFP (como los formsbot o roboform) siempre y cuando no tenga.. *//...... el famoso captcha que es una imagen distorcionada de letras/numeros.... *//...... que debemos ingresar tambien en un campo............................... *//...... Requisitos: *//...... Tener un servidor web con soporte php y mysql ((como apache)) y un .... *//...... terminal con posibilidad de correr VFP................................. *//...... server................................................................. *//...... Existen excelentes herramientas como WAMP, XAMPP (portable) y otros en. *//...... la que se ejecutan en la misma maquina sin necesidad de un servidor.... *//...... ....................................................................... *//......Compatib.: Ha sido desarrollado y probado con VFP8.0 y en win7 con firefox5.y..... *//...... como servidor use un fedora10 c/apache 2.2.10, php5.2.6 y mysql 5.0.67. *//............................................................................................ *//-------------------------------------------------------------------------------------------- LOCAL oHttp,vhost,dbase,vuser,vpass *// estas variables son utilizadas en php * $dbhost=$_POST["vhost"]; /*HOSTNAME*/ * $dbasen=$_POST["dbase"]; /*DATABASE*/ * $dbuser=$_POST["vuser"]; /*USERNAME*/ * $dbpass=$_POST["vpass"]; /*USERPASS*/ xhost ="192.168.1.3" &&nombre del servidor obs: usen IP los nombres no siempre funcionan xbase ="xdbase" &&nombre de la base de datos mysql xuser ="admin" &&nombre del usuario xpass ="admin" &&contraseña &¶metros que pasaremos a php xparameters="&vhost="+xhost+; "&dbase="+xbase+; "&vuser="+xuser+; "&vpass="+xpass oHttp = CreateObject( "MSXML2.XMLHTTP" ) oHttp.Open( "post", "http://"+xhost+"/php/x.php", .f.) oHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded") oHttp.Send( xparameters ) * muestra los estados de respuesta ? oHttp.Status ? oHttp.StatusText ? "Response length:", LEN(oHttp.StatusText) ? oHttp.GetAllResponseHeaders() ? oHttp.GetResponseHeader("content-type") * envia codigos html devueltos por php a un archivo de texto y al navegador DELETE FILE ([C:\TEMP\RESPONSE.HTML]) STRTOFILE( oHttp.ResponseText, [C:\TEMP\RESPONSE.HTML] ) MODI FILE ([C:\TEMP\RESPONSE.HTML]) NOWAIT RELEASE oHTTP RUN [EXPLORER C:\TEMP\RESPONSE.HTML] /N RETURN *// FIN DEL PROGRAMA VFP *//---------------------------------------------------------------------------------------------------------- * codigo php llamado desde VFP /* //-------------------------------------------------------------------------------------------- //............................................................................................ //......Fecha: 18-08-2011............................................................ //......Autor: OMAR DUILIO ROJAS FORNERON............................................ //......Localidad: Encarnación-Paraguay...orodrf@gmail.com............................... //......Funcion: Metodo de ejemplo, para ser llamado desde VFP por metodo POST......... //...... lo unico que hace es conectarse al servidor mysql y mostrar una tabla. //...... llamada producto de la base de datos xbase............................ //-------------------------------------------------------------------------------------------- */ echo "<html>"; echo "<head>"; echo "<title>Codigo php ejecutado desde VFP, by ODRF++</title>"; echo "</head>"; echo "<body>"; $dbhost=$_POST["vhost"]; /*HOSTNAME*/ $dbasen=$_POST["dbase"]; /*DATABASE*/ $dbuser=$_POST["vuser"]; /*USERNAME*/ $dbpass=$_POST["vpass"]; /*USERPASS*/ echo "debug: ["; echo $dbhost,$dbasen,$dbuser,$dbpass; print( "]\n" ); // connect to mysql if ( !($link=mysql_connect( $dbhost, $dbuser, $dbpass)) ) { echo "Error conectando a MYSQL"; exit(); } if (!mysql_select_db( $dbasen, $link)) { echo "Error seleccionando la base de datos"; exit(); } // consultamos la base de datos $res=mysql_query( "select * from producto limit 40", $link ); if (!$res) { echo "la consulta fallo".mysql_error(); exit(); } // traemos registros seleccionados echo "<table summary=summary frame=box>"; while ( $frec=mysql_fetch_array( $res ) ) { echo "<tr>"; echo "<td>",$frec["codigo"],"</td>"; echo "<td>",$frec["nombre"],"</td>"; echo "<td>",$frec["codiva"],"</td>"; echo "</tr>"; } echo "</table>"; mysql_free_result($res); // disconnect mysql_close( $link ); echo "</body>"; echo "</html>"; *// el siguiente es codigo del formulario que suplantamos o emulamos desde vfp podria nombrarse como INDEX.HTML *<body> * <h1>*** Datos de productos ***, testing php, mysql and httpd</h1> * <form method="post" action="x.php"> * <fieldset> * <legend>Login de usuario:</legend> * <table> * <tr> * <td><label>Hostname</label></td> * <td><input name="vhost" type="text" value="" size="20" maxlength="50"></td> * </tr> * <tr> * <td><label>Database</label></td> * <td><input name="dbase" type="text" value="" size="20" maxlength="50"></td> * </tr> * <tr> * <td><label>User</label></td> * <td><input name="vuser" type="text" value="" size="20" maxlength="50"></td> * </tr> * <tr> * <td><label>Pass</label></td> * <td><input name="vpass" type="text" value="" size="20" maxlength="50"></td> * </tr> * </table> * <hr width="100%"> * <input name="send" type="submit" value="Enviar"> * <input name="defa" type="reset" value="Descartar"> * <br> * </fieldset> * *</body> *</html> *//---------------------------------------------------------------------------------------------------------- <!--pagebreak--> *// y por ultimo la base de datos mysql guardarlo en algun lugar accesible al servidor mysql como x.sql *// para importarlo al mysql ejecutar *// WIN-SHELL mysql -u root -p < C:\TEMP\x.sql *// LINUX-SHELL mysql -u root -p < /home/x.sql *// ambos deben tener la direccion exacta donde guardaron este fichero -- MySQL dump 10.13 Distrib 5.1.41, for Win32 (ia32) -- -- Host: localhost Database: xdbase -- ------------------------------------------------------ -- Server version 5.1.41 /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8 */; /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; /*!40103 SET TIME_ZONE='+00:00' */; /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; -- -- Table structure for table 'producto' -- CREATE DATABASE xdbase IF NOT EXISTS; USE xdbase; DROP TABLE IF EXISTS 'producto'; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE 'producto' ( 'CODIGO' char(15) NOT NULL, 'NOMBRE' char(55) NOT NULL, 'CODIVA' char(3) NOT NULL, 'CODMED' char(5) NOT NULL, 'XTIPO' char(1) NOT NULL, 'XGRUPO' char(3) NOT NULL, 'CODBAR' char(20) NOT NULL, 'foto' mediumblob NOT NULL, PRIMARY KEY ('CODIGO','NOMBRE','CODBAR') ) ENGINE=MyISAM DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; -- -- Dumping data for table 'producto' -- LOCK TABLES 'producto' WRITE; /*!40000 ALTER TABLE 'producto' DISABLE KEYS */; INSERT INTO 'producto' VALUES ('0002GOL','ESPEJO','10G','1 1','1','1','','ABCDEFG'), ('00093','RETEN','10G','1 1','1','1','','ABCDEFG'), ('00101004','SOPORTE','10G','1 1','1','1','','ABCDEFG'), ('00105180MB','GOMA RADIADOR INFERIOR','00E','1 1','1','1','','ABCDEFG'), ('001120','LIMPIA PARABRISAS','10G','1 1','1','2','','ABCDEFG'));º /*!40000 ALTER TABLE 'producto' ENABLE KEYS */; UNLOCK TABLES; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; -- Dump completed on 2011-07-29 16:50:16 *----------------------------------------------------------------------------------------------