2011-01-03 21 views
8

Ich brauche Hilfe bei dem Versuch, curl zu verwenden, um Daten auf einer Seite zu veröffentlichen und die Ergebnisse abzurufen, nachdem das Formular abgeschickt wurde.Verwenden von Curl zum Senden/Abrufen eines Formulars Ergebnisse

Ich habe eine einfache Form:

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

Darüber hinaus habe ich PHP-Code haben diese Form in der gleichen Seite zu behandeln. Es gibt nur die Formularwerte zurück.

Die Locke, die ich verwendet habe, ist dies:

$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; 

Wenn ich die Seite mit dem curl Code in ihm zu starten, habe ich die form.php Seiteninhalte erhalten, aber es zeigt nicht nicht die Variablen, die PHP beim Übermitteln des Formulars geantwortet haben soll.

würde jede mögliche Hilfe mit diesem schätzen.

Danke.

+0

können wir sehen, die PHP, die behandelt die Form Submission? das Problem kann da sein. – dqhendricks

+0

auch, haben Sie verifiziert, dass das Senden des Formulars manuell die gewünschte Ausgabe produziert? – dqhendricks

+0

Das Formular manuell einreichen erzeugt die richtige Ausgabe. Das PHP, das das Formular behandelt, ist: if (isset ($ _POST ['submitted'])) {echo $ _POST [name] ..... usw. und das war's – Jason

Antwort

2

AHHHH nach Ihrem Kommentar ist das Problem klar.

Sie müssen eine weitere POST-Variable in Ihr Array aufnehmen.

Die Submit-Schaltfläche gibt auch einen Post-Wert zurück, wenn Sie darauf klicken, was Sie in Ihrem PHP-Formular abfragen.

if ($_POST['submitted']) { 

in Ihrem Curl-Code, aber Sie haben die Post-Variable "eingereicht" weggelassen.

Wenn Sie das suchen, wählen Sie bitte das Häkchen neben dieser Antwort aus. Vielen Dank!

+0

Danke, das war das Problem – Jason

+0

sicher Ding kein Problem! – dqhendricks

0

Aus dem Lesen der anderen zwei Antworten und dem Kommentar des OP habe ich ein paar Ideen.

Insbesondere ist das OP Anmerkung war:

Absenden des Formulars manuell den rechten Ausgang erzeugt. Die PHP, die die Form behandelt ist: if (isset ($ _ POST [ 'vorgelegt'])) {echo $ _POST [name] ..... usw. und das ist es

Unter Standardbedingungen Ihr Grund Form, wie in der ursprünglichen Frage erwähnt, würde ein $ _POST Array erzeugen wie folgt aus:

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

Ihr Kommentar schlägt vor, dass einige Aspekte Ihrer Form-Handler für ein $ _POST Element suchen „vorgelegt“ genannt.

1) Das Basisformular, wie in der Frage angegeben, gibt immer FALSE für eine Prüfung auf $ _POST ['submitted'] zurück und löst als solches die ELSE-Aktion (falls vorhanden) für diese Bedingung aus .

2) Ihre CURL-Aktion legt weder "submit" noch "submitted" fest und gibt auch immer FALSE für die Bedingung zurück.

Also, ich würde vorschlagen, dass Sie:

1) Überprüfen Sie die Formular-Handler, und sehen Sie, welche Felder sind wichtig, was ihre Namen sind und was deren Inhalt sein sollte.

2) Überprüfen Sie Ihr Basisformular und stellen Sie sicher, dass es die entsprechenden Felder enthält.

3) Überprüfen Sie Ihre CURL-Aktion und vergewissern Sie sich, dass alle erforderlichen Felder aufgeführt sind. (Einfache Überprüfung wäre print_r($_POST);die(); an der Spitze Ihrer Form Handler und senden Sie das Basisformular. Dies wird Ihnen zeigen genau, was das Formular sendet, so können Sie es in CURL erstellen.

+0

Danke für den gründlichen Durchlauf, das war genau der Problem. – Jason

Verwandte Themen