2011-01-03 18 views
8

Necesito ayuda para tratar de usar curl para publicar datos en una página y recuperar los resultados después de que se haya enviado el formulario.Uso de curl para enviar/recuperar resultados de formularios

creé una forma sencilla:

<form name="test" method="post" action="form.php">    
    <input type="text" name="name" size="40" /> 
    <input type="text" name="comment" size="40" /> 
    <input type="submit" value="submit" /> 
</form> 

Además, tengo el código php para manejar esta forma, en la misma página. Todo lo que hace es repetir los valores de forma.

El rizo que he estado usando es la siguiente:

$h = curl_init(); 

    curl_setopt($h, CURLOPT_URL, "path/to/form.php"); 
    curl_setopt($h, CURLOPT_POST, true); 
    curl_setopt($h, CURLOPT_POSTFIELDS, array(
    'name' => 'yes', 
    'comment' => 'no' 
)); 
    curl_setopt($h, CURLOPT_HEADER, false); 
    curl_setopt($h, CURLOPT_RETURNTRANSFER, 1); 

    $result = curl_exec($h); 
    echo $result; 

Cuando inicio la página con el código de rizo en él, consigo el contenido de la página form.php pero no no muestra la variables que PHP debería tener eco cuando se envía el formulario.

agradecería cualquier ayuda con esto.

Gracias.

+0

¿Podemos ver el PHP que maneja la forma de la submisión? el problema puede estar allí. – dqhendricks

+0

también, ¿ha verificado que al enviar el formulario manualmente se produce el resultado deseado? – dqhendricks

+0

El envío manual del formulario produce el resultado correcto. El PHP que maneja el formulario es: if (isset ($ _POST ['submitted'])) {echo $ _POST [name] ..... etc. y eso es todo – Jason

Respuesta

2

AHHHH después de su comentario, el problema es claro.

necesita incluir una variable POST más en su matriz.

'submitted' => 'submitted' 

el botón de enviar también devuelve un valor post si hace clic, que se está comprobando en su PHP de procesamiento de formularios.

if ($_POST['submitted']) { 

en su código de curvatura, sin embargo, ha omitido la variable de publicación 'enviada'.

si esto es lo que está buscando, seleccione la marca de verificación junto a esta respuesta. ¡Gracias!

+0

Gracias, este fue el problema – Jason

+0

¡no hay problema! – dqhendricks

0

Después de leer las otras dos respuestas y el comentario del OP, tengo un par de ideas.

Específicamente, la OP comentario fue:

enviar el formulario manualmente no producir la salida derecha. El PHP que maneja el formulario es: if (isset ($ _ POST ['submitted'])) {echo $ _POST [nombre] ..... etc. y eso es todo

En condiciones estándar, su básico forma, como se señala en la pregunta original, generaría una matriz $ _POST como la siguiente:

array(
    'name' => 'The Name as Entered in the Form' , 
    'comment' => 'The Comment as Entered in the Form' , 
    'submit' => 'submit' # From the "Submit" button 
); 

su comentario sugiere que algún aspecto de su controlador de formulario está buscando un elemento de $ _POST llamado "presentado".

1) La forma básica, como se establece en la pregunta, siempre devolverá FALSO para un cheque por $ _POST ['enviado'], y, como tal, desencadenará la acción ELSE (si está presente) para ese condicional .

2) Su acción CURL no establece 'enviar' o 'enviado', y, de nuevo, siempre devolverá FALSO para el condicional.

Por lo tanto, sugeriría que:

1) chequeo de controlador de formulario, y ver qué campos son esenciales, cuáles son sus nombres y cuál es su contenido debe ser.

2) Compruebe su Formulario básico y asegúrese de que tenga los campos apropiados.

3) Compruebe su acción de CURL y asegúrese de que detalla cada campo que se requiere. (El cheque fácil sería insertar print_r($_POST);die(); en la parte superior de su Manejador de Formularios y enviar el formulario básico. Esto le mostrará exactamente lo que está enviando el formulario, para que pueda recrearlo en CURL.

+0

Gracias por la exhaustiva ejecución, esto fue exactamente el problema. – Jason

Cuestiones relacionadas