Foros del Web » Programando para Internet » PHP »

Pasar variables por post sin utilizar formularios

Estas en el tema de Pasar variables por post sin utilizar formularios en el foro de PHP en Foros del Web. Como puedo pasar variables por el metodo post sin utilizar formularios??...
  #1 (permalink)  
Antiguo 19/08/2003, 10:36
Avatar de Slash  
Fecha de Ingreso: agosto-2003
Mensajes: 51
Antigüedad: 14 años, 4 meses
Puntos: 0
Exclamación Pasar variables por post sin utilizar formularios

Como puedo pasar variables por el metodo post sin utilizar formularios??
  #2 (permalink)  
Antiguo 19/08/2003, 12:27
 
Fecha de Ingreso: julio-2003
Mensajes: 165
Antigüedad: 14 años, 5 meses
Puntos: 1
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:
<?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";

?>
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.

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
  #3 (permalink)  
Antiguo 19/08/2003, 13:01
Avatar de Slash  
Fecha de Ingreso: agosto-2003
Mensajes: 51
Antigüedad: 14 años, 4 meses
Puntos: 0
Gracias

leonardop, gracias me fue muy util tu informacion!!
  #4 (permalink)  
Antiguo 22/08/2003, 22:46
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
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.
  #5 (permalink)  
Antiguo 23/08/2003, 09:00
Avatar de Slash  
Fecha de Ingreso: agosto-2003
Mensajes: 51
Antigüedad: 14 años, 4 meses
Puntos: 0
Cracias Cluster tendre en cuenta tu recomendacion, ya que lo que tengo son cuatro paginas en php, la primera toma los datos de un formulario, la segunda muesta los datos para que el usuario vea que sean correctos, pero esta no tiene formularios y no se como enviarlos a la ultima pagina que valida los datos, pero esta es una pagina de puro php, y al final esta redirecciona a a una donde se muestra que el proceso esta terminado.

Entonces el problema esta entre la segunda y la tercera, ademas de las sesiones que me recomiendas

Gracias de antenmano!!
  #6 (permalink)  
Antiguo 23/08/2003, 21:21
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
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:
if (!isset($_SESSION['variable'])){
   echo 
"error, acceso no válido.";
} else {
   
// tu proceso ...

Así de simple válidas por ejemplo que un usuario X te acceda directamente a un script tuyo de proceso (el validador de esos datos .. o el que procesa esos datos para tu BD .. el script que hace el previo .. etc ...)

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 21:23
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Tema Cerrado

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 11:20.