Foros del Web » Programando para Internet » PHP »

POST sin formulario?

Estas en el tema de POST sin formulario? en el foro de PHP en Foros del Web. ¿Se pueden enviar variables por POST sin tener un formulario?...
  #1 (permalink)  
Antiguo 07/02/2006, 02:28
Avatar de oskarL  
Fecha de Ingreso: mayo-2005
Ubicación: Madrid
Mensajes: 499
Antigüedad: 18 años, 11 meses
Puntos: 2
Pregunta POST sin formulario?

¿Se pueden enviar variables por POST sin tener un formulario?
__________________
Solo hay 10 clases de personas, las que saben binario y las que no.
  #2 (permalink)  
Antiguo 07/02/2006, 05:28
Avatar de xyyy7  
Fecha de Ingreso: enero-2004
Ubicación: Maracay.-
Mensajes: 637
Antigüedad: 20 años, 2 meses
Puntos: 5
Creo a ver visto algo de este tema de en FORO DE JAVASCRIT...
"Creo" que con javascript hay manera de hacer eso, de todas maneras pasate por los expertos de javascript en este mismo foro para ver que te dicen ellos.-
__________________
Maracay Edo Aragua - Venezuela :
Mi Favorita :
http://www.MySQL.Com
  #3 (permalink)  
Antiguo 07/02/2006, 06:56
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
No sé cual es la situación de envio de esas variables .. pero en principio desde un script PHP -sin tener- que generar una página HTML para "simular" el proceso, puedes usar sockets implementando el protocolo HTTP para enviar tus datos al script/página/etc que necesites por el método que necesites.

Fijate en los ejemplos de:
www.php.net/fsockopen
(sobre todo en los ejemplos de los comentarios de los usurios).

Un saludo,
  #4 (permalink)  
Antiguo 07/02/2006, 18:26
Avatar de xyyy7  
Fecha de Ingreso: enero-2004
Ubicación: Maracay.-
Mensajes: 637
Antigüedad: 20 años, 2 meses
Puntos: 5
Cita:
Iniciado por Cluster
Fijate en los ejemplos de:
www.php.net/fsockopen
(sobre todo en los ejemplos de los comentarios de los usurios).
Eso esta muy bueno, y ciertamente es la solución... ese tipo de funciones tipo fsockopen, sockets, particularmente lo usaba como para mandar variables a scripts colocados en otros servidores y puedan ser procesados..

pero para usarlo de manera interna, y mandar post sin formulario se ve una muy buena alternativa...

Yo también pido gracias...
__________________
Maracay Edo Aragua - Venezuela :
Mi Favorita :
http://www.MySQL.Com
  #5 (permalink)  
Antiguo 08/02/2006, 02:38
Avatar de oskarL  
Fecha de Ingreso: mayo-2005
Ubicación: Madrid
Mensajes: 499
Antigüedad: 18 años, 11 meses
Puntos: 2
Muchas gracias! A ver si lo puedo conseguir
__________________
Solo hay 10 clases de personas, las que saben binario y las que no.
  #6 (permalink)  
Antiguo 08/02/2006, 08:16
Avatar de oskarL  
Fecha de Ingreso: mayo-2005
Ubicación: Madrid
Mensajes: 499
Antigüedad: 18 años, 11 meses
Puntos: 2
Probado

Bueno, ya lo he probado, y lo que he hecho exactamente es dos archivos: envia.php y recibe.php.

Como en realidad no redirecciona de envia.php a recibe.php, si no que desde envia.php lee el contenido de recibe.php y lo devuleve, tengo el problema de que al escribirlo, muestra tambien el texto que he necesitado para enviar las variables, es decir, esto:
Código:
POST $path HTTP/1.1\r\nHost: $host\r\nContent-type:application/x-www-form-urlencoded\r\n${others}User-Agent: Mozilla 4.0\r\nContent-length:".strlen($query)."\r\nConnection: close\r\n\r\n$query
¿Que puedo hacer para que no me muestre ese texto?

Los archivos:

ENVIA.PHP:
Código PHP:
<?function post($host,$query,$others=''){
  
$path=explode('/',$host);
  
$host=$path[0];
  unset(
$path[0]);
  
$path='/'.(implode('/',$path));
  
$post="POST $path HTTP/1.1\r\nHost: $host\r\nContent-type:application/x-www-form-urlencoded\r\n${others}User-Agent: Mozilla 4.0\r\nContent-length:".strlen($query)."\r\nConnection: close\r\n\r\n$query";
  
$h=fsockopen($host,80);
  
fwrite($h,$post);
  for(
$a=0,$r='';!$a;){
      
$b=fread($h,8192);
      
$r.=$b;
      
$a=(($b=='')?1:0);
  }
  
fclose($h);
  return 
$r;
}

echo 
post("localhost/pruebas/recibe.php","prueba=ok&enviado=1 ");
RECIBE.PHP:
Código PHP:
<?php

    
foreach($_REQUEST as $key => $value){
        $
$key=$value;
    }

?>

<html>
<body>
<input type=text value="<?php echo $prueba ?>">
</body>
</html>
__________________
Solo hay 10 clases de personas, las que saben binario y las que no.

Última edición por Cluster; 08/02/2006 a las 11:04
  #7 (permalink)  
Antiguo 08/02/2006, 11:10
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
mm .. pero tu estás enviando datos a "recibe.php" .. no necesitarías hacer un "echo" a tu función "post" por qué realmente no te intresa lo que devuelva que es justamente el protocolo HTTP en sí de la petición (bueno .. si con fines de recoger el mensaje de error/exito que arroja como para controlar si hay problemas de conexión).

Si necesitas obtener la respuesta, tendrás que filtrar lo que recibes para quedarte sólo con los "datos" en sí .. (descartando cabeceras).

En los comentarios de los usuarios de la función:

fsockopen()
http://www.php.net/manual/en/function.fsockopen.php

Tienes muchas funciones interesantes bastante completas (para enviar y recibir lo que del "socket" abierto transas ...)

Un saludo,
  #8 (permalink)  
Antiguo 09/02/2006, 02:38
Avatar de oskarL  
Fecha de Ingreso: mayo-2005
Ubicación: Madrid
Mensajes: 499
Antigüedad: 18 años, 11 meses
Puntos: 2
Vaya, pues entonces no se si me servira para lo que necesito.

Lo quiero utilizar para un formulario de registro. Explico el funcionamiento:

Tengo una pagina con un formulario para rellenar datos, el submit los envia a una pagina (que llamare "procesa") que comprueba que los datos son correctos o no (entre otras cosas comprobar si el usuario esta registrado). En caso de que los datos no sean correctos, redirecciona con un header a la pagina del formulario y muestra el error. La idea es que los datos que haya rellenado el usuario, aparezcan rellenadas, para evitar que lo tenga que volver a hacer.

Quiero evitar el uso de sesiones.

Como puedo adaptar el codigo de los sockets para conseguir lo que quiero?

Muchas Gracias.
__________________
Solo hay 10 clases de personas, las que saben binario y las que no.
  #9 (permalink)  
Antiguo 09/02/2006, 06:33
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Lo normal es que en ese proceso de "vuelta" de datos hacia el formulario sea por GET . .no en POST. Total . .no son datos "críticos" (pues no son correctos).

header ("Location: formulario.php?nombre=".$_POST['nombre']);

Y los tomas en tu formulario.php por $_GET que es por donde te llegarán si es que no pasó tus validaciones.

No sé por qué no quieres usar sesiones, pero realmente la foma más "transparente" y segura de hacer esto mismo es con sesiones. Almacenas el valor de todo $_POST (array) en una variable de sesión y en tu formulario (previa redirección simple por header() sin variables en el URL) tomas dicha variable de sesión.

Por otro lado si estás creando un registro de usuarios .. al final más tarde o temprano terminaras usando o necesitaras usar sesiones (o piensas usar cookies? .. o que piensas usar?).

Un saludo,
  #10 (permalink)  
Antiguo 10/02/2006, 02:12
Avatar de oskarL  
Fecha de Ingreso: mayo-2005
Ubicación: Madrid
Mensajes: 499
Antigüedad: 18 años, 11 meses
Puntos: 2
Por GET esta claro que no lo quiero hacer, porque por mucho que sean datos poco revelantes, son demasiados.

Sesiones no quiero usar porque ya las estoy usando con otras variables que ya tienen ese nombre. Y me diras, pues cambiales el nombre! pero no puedo, es una larga historia... jeje

Y lo de los usuarios no es para que se conecten a la página, es para madarles boletines al correo, y otras cosas parecidas
__________________
Solo hay 10 clases de personas, las que saben binario y las que no.
  #11 (permalink)  
Antiguo 10/02/2006, 06:41
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Sesiones no quiero usar porque ya las estoy usando con otras variables que ya tienen ese nombre. Y me diras, pues cambiales el nombre! pero no puedo, es una larga historia... jeje
Pues creo que deberías repasar tu "historia" y replantearte el tema. Además no sé por qué dices "el mismo nombre" .. No veo ninguna justificación a no usar sesiones. Por supuesto algo de código tendras que cambiar (o es que no tienes acceso a el como para modificarlo?).

Se trata de algo tipo:

En tu script de proceso del formulario (donde apuntas tu action y lo procesas).

Código PHP:
<?
session_Start
();
// Tomas todo el array "POST" y lo llevas a una variable de sesión:
$_SESSION['formulario_variables']=$_POST;
?>
//haces tus validacioens y demás procesos .. si no pasan vuelves al formulario.
Tu formulario.php

Código PHP:
<?
session_start
();
$variables_devuelta=$_SESSION['formulario_variables'];

// y las usas
?>
<input type="text" name="nose" value="<? echo $variables_devuelta['nose'?>">
Y así con todas .. así de simple.

Si por ejemplo tienes algo como .. "si entras al formulario por otro lado .. generas otros "value" para esos campos del formulario" siempre se puede hacer condicionales tipo:

Código PHP:
<?
if (isset($_SESSION['variables_formulario'])){
   
$valores_por_defecto=$_SESSION['variables_formulario'];
} else {
   
// Obtienes sus valores por otros médios (consulta SQL a una BBDD? ..)
   
$valores_por_defecto['nose']=row['nose'];
   
$valores_por_defecto['otro']=row['otro'];
}
?>
// y lo usas
<input type="text" name="nose" value="<? echo $variables_por_defecto['nose'?>">
Se trata de que "separes" tu proceso que obtiene los datos a "presentar" del médio de donde vengan .. (sea de vuelta de por tus variables de sesión .. o salgan de una consulta a tu BBDD .. etc).

Un saludo,
  #12 (permalink)  
Antiguo 13/02/2006, 16:53
 
Fecha de Ingreso: enero-2006
Mensajes: 7
Antigüedad: 18 años, 2 meses
Puntos: 0
Hice la misma pregunta en otro tema el cual decía:

Me preguntaba si en PHP se podía enviar datos POST a una dirección url sin tener que utilizar un form. Por algún lado oi que hay alguna función para abrir una página en modo POST con PHP, pero la verdad no la he encontrado.

De hecho, quería saber cómo podría lograrse. No busco usar sesiones ni cookies. Lo que sucede es que necesito llamar una página para que actualice varias veces la misma información, pero sin tener que enviar los datos desde un formulario. (Hubiera sido más fácil si la página recibiera los datos por GET, pero no lo hace)

Última edición por infiniter; 13/02/2006 a las 17:00
  #13 (permalink)  
Antiguo 14/02/2006, 05:53
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Me preguntaba si en PHP se podía enviar datos POST a una dirección url sin tener que utilizar un form. Por algún lado oi que hay alguna función para abrir una página en modo POST con PHP, pero la verdad no la he encontrado.
La función que "leistes" (oir?) es:

fsockopen() que te permite abir un "socket" .. de ahí a lo que "hables" por ese canal de comunicación abierto es taréa del protocolo que uses. En tu caso como dices enviar datos a una página en modo POST lo que usarás es el protocolo HTTP.

También tienes las extensiones cURL (www.php.net/curl) para facilitar esta taréa.

Y .. multitud de funciones o classes para manejarte con el protocolo HTTP desde PHP y así facilitarte la vida (para que no tengas que empaparte del protocolo HTTP). Busacalas en www.phpclasses.org y revisa en los comentarios de los usuarios de la función:

fsockopen()
www.php.net/fsockopen

Un saludo,

PD: ... justamente lo comenté unos mensajes arriba de este todo esto. Intenta no duplicar tus preguntas por lo demás.
  #14 (permalink)  
Antiguo 14/02/2006, 08:48
 
Fecha de Ingreso: enero-2006
Mensajes: 7
Antigüedad: 18 años, 2 meses
Puntos: 0
Gracias ya que "leíste" (leistes?) mi mensaje. Oí de ella porque un amigo fue el que me hizo el comentario.
Parece que tal extensión puede servirme bien para la tarea (taréa?) que necesito. Muchas gracias.
(Disculpas por las correcciones, solo que me pareció apropiado)

Un saludo.
  #15 (permalink)  
Antiguo 14/02/2006, 17:39
 
Fecha de Ingreso: enero-2006
Mensajes: 7
Antigüedad: 18 años, 2 meses
Puntos: 0
pude enviar mensajes por POST sin usar formularios, sin embargo al observar el contenido de una de las páginas el navegador lanzó el mensaje: object moved. ¿A qué se debe esto?
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.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:55.