Como puedo pasar variables por el metodo post sin utilizar formularios??
| |||
Hola, Si deseas "hablar" con un servidor web mediante el método POST, sin intermediaros (es decir, formularios), tienes entonces que encargarte personalmente de crear la conexión TCP con el servidor, y enviar la información "cruda" de la petición HTTP correspondiente. Esto quiere decir, abrir la conexión y enviar el flujo de cabeceras HTTP necesarias (más algunas otras que puedas querer), y a continuación (luego de dos saltos de línea consecutivos) el contenido de las variables que vas a pasar, codificadas del mismo modo en que se codifican las variables en el query de una conversación por el método GET. Considera por ejemplo el siguiente segmento de código:
Código:
Espero que el código sea claro por sí solo. Quizás quieras jugar un poco con este ejemplo, alterando los valores de algunas variables (por ejemplo, el puerto de la conexión, si se necesitara), o modificando/agregando cabeceras HTTP.<?php // Funcion que intenta enviar una serie da valores mediante el método // POST a un documento web en particular. Recibe, en orden: (a) el // nombre del servidor con el que se va a realizar la conexion (p. // ej. 'www.servidor.com', o '127.0.0.1'), (b) la ruta hacia el // documento web al que le van a ser pasados los valores // (p. ej. '/cgi-bin/script.cgi') y (c) una matriz asociativa con los // valores a pasar. Las claves de esta matriz seran usadas como // nombres de variables y los valores como valores de cada variable. // Esta funcion podria implementar mas chequeos, pero en terminos // generales, suele devolver TRUE cuando la informacion es enviada // exitosamente, y FALSE de lo contrario. function enviar_metodo_post ($servidor, $ruta, $matriz) { $contenido = ''; $primer = true; // Bandera que indica si se esta procesando la // primera pareja clave/valor de la matriz // recibida while (list ($clave, $valor) = each ($matriz)) { if (! $primer) $contenido .= '&'; else $primer = false; $contenido .= urlencode ($clave) . '=' . urlencode ($valor); } $socket = fsockopen ($servidor, 80); // Conexion por el puerto 80 if (!$socket) { trigger_error ('No fue posible abrir la conexion con el servidor'); return false; } // Enviar cabeceras HTTP fwrite ($socket, "POST $ruta HTTP/1.0\n"); fwrite ($socket, "Content-type: application/x-www-form-urlencoded\n"); fwrite ($socket, "Content-length: " . strlen ($contenido) . "\n\n"); // Enviar el contenido de las variables fwrite ($socket, $contenido); fclose ($socket); return true; } $variables = array ('nombre' => 'Pedro Perez', 'Telefono' => '12345678'); $resultado = enviar_metodo_post ('servidor_cualquiera.com', '/ruta/hacia/algun/documento.php', $variables); if ($resultado) echo "Los valores fueron enviados mediante el metodo POST.\n"; ?> Otro ejercicio interesante podría ser imprimir la información que es enviada al servidor, y la información que es recibida de vuelta, para efectos de depuración. En éste último caso, podrías recibir la información de respuesta del servidor remoto mediante llamados a funciones como fread(), usando la variable $socket como descriptor de archivo. Un cordial saludo |
| |||
Bueno .. sólo recordar una vez más que existen las "sesiones" .. donde puedes guardar temporalmente tus variables (de cualquier tipo) en el servidor para que las propagues/uses en los scripts que lo requieras sin tener que hacer conexiones HTTP usar sockets y demás historias .. que por otro lado no está de más conocer el tema tal como lo mostró leonardop. Con "sesiones" .. tus variables sólo viajaran una vez entre el cliente (tu formulario donde las obtengas por ejemplo) hacia el servidor .. o incluso es el própio servidor (lease PHP) el que las genere y las deje ahí mismo (en el servidor) para que las llamen (usen) otros scripts tuyos .. En las FAQ's de este foro se hace una breve introducción al tema de sesiones .. Un saludo,
__________________ Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo. |
| |||
Pues las sesiones es tu solución "segura" .. Del tu formulario las envias y guardas en el servidor (en las FAQ's tienes ejemplos básicos de uso) .. En tus siguiente(s) páginas tan sólo trabajas con los valores de tus variable(s) de sesión .. Las lees en el script que tenga que hacer el "previo" .. Si hay errores ya volveras al formulario (y usando sesiones puedes leerlas nuevamente para "pre-cargar" e inicializar los "value" de tus campos <input> o los que requieras .. Una vez alterado nuevamente los datos del formulario, por el mismo proceso que guardas las sesiones en el scritp que procesa ese formulario .. volveran a tomar su nuevo valor .. y lo mismo para el script PHP que valide dichos datos (los volverá a leer de la sesión). Es tan sencillo como usar $_SESSION['variable'] para obtener dicho valor .. en lugar de lo que estaras acostumbrado $_POST['variable'] cuando usas formularios y usas el method=POST (usando arrays superglobales o en su defecto $HTTP_POST_VARS y afines) .. (bueno, a esto hacen fálta otros detallitos própios de las sesiones .. pero la base es esa). Con "sesiones" siempre podrás hacer algún condicional tipo: Código PHP: En fin .. que las sesiones "bien" usadas te puden ayudar muchoooooo y sobre todo ganar en seguridad. Un saludo,
__________________ Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo. Última edición por Cluster; 23/08/2003 a las 20:23 |