yoursurrogategod Posted February 27, 2012 Share Posted February 27, 2012 Ok, I'm new to this and I don't know much about PHP, much less Curl and how to use the functions inside of PHP: http://us.php.net/manual/en/book.curl.php However, I need to do something with this. I have to create this curl.php file, inside that file I need to take the $_POST array and send it to a different php file... I'm not sure how to do this. And yes, I only need that. I'd post the source, but my company's proprietary policies prevent me. Quote Link to comment https://forums.phpfreaks.com/topic/257884-need-help-with-curl-in-php/ Share on other sites More sharing options...
codebyren Posted February 28, 2012 Share Posted February 28, 2012 Without seeing what you've tried (if anything), it's difficult to know where you're at. For example, are you at least managing to capture the post data in your proposed curl.php file before sending it to the other php file? There's a decent tutorial here that covers posting to another URL using cURL. Have a look at the aptly named "POSTing to a URL" section. That should at least help you out with what I'd say is the more difficult part of your problem. Quote Link to comment https://forums.phpfreaks.com/topic/257884-need-help-with-curl-in-php/#findComment-1321983 Share on other sites More sharing options...
requinix Posted February 28, 2012 Share Posted February 28, 2012 If that other PHP file is also on your server you can just include() it. It'll have access to $_POST and everything. Quote Link to comment https://forums.phpfreaks.com/topic/257884-need-help-with-curl-in-php/#findComment-1321986 Share on other sites More sharing options...
yoursurrogategod Posted February 28, 2012 Author Share Posted February 28, 2012 Without seeing what you've tried (if anything), it's difficult to know where you're at. For example, are you at least managing to capture the post data in your proposed curl.php file before sending it to the other php file? There's a decent tutorial here that covers posting to another URL using cURL. Have a look at the aptly named "POSTing to a URL" section. That should at least help you out with what I'd say is the more difficult part of your problem. Thanks, that really helps. Quote Link to comment https://forums.phpfreaks.com/topic/257884-need-help-with-curl-in-php/#findComment-1322030 Share on other sites More sharing options...
yoursurrogategod Posted February 28, 2012 Author Share Posted February 28, 2012 Running into an issue. This is my code: <?php $ch = curl_init(); // set URL and other appropriate options curl_setopt($ch, CURLOPT_POST, "http://webstage.intra.lifespan.org/applications/inquiz/index.php?survey=custom-cme-modsedation"); // grab URL and pass it to the browser curl_exec($ch); // close cURL resource, and free up system resources curl_close($ch); echo "<p>The survey is complete. Thank you for your time.</p>"; echo "<a href=\"http://www.surveymonkey.com/s/G22Y9TR\">Survey Evaluation</a>"; ?> Here is the issue, those values don't seem to be getting passed along. Again, curl + php n00b, I'm probably doing something silly . Quote Link to comment https://forums.phpfreaks.com/topic/257884-need-help-with-curl-in-php/#findComment-1322101 Share on other sites More sharing options...
yoursurrogategod Posted February 29, 2012 Author Share Posted February 29, 2012 <?php $ch = curl_init(); // set URL and other appropriate options curl_setopt($ch, CURLOPT_URL, "http://webstage.intra.lifespan.org/applications/inquiz/index.php"); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $_POST); // grab URL and pass it to the browser curl_exec($ch); // close cURL resource, and free up system resources curl_close($ch); echo "<p>The survey is complete. Thank you for your time.</p>"; echo "<a href=\"http://www.surveymonkey.com/s/G22Y9TR\">Survey Evaluation</a>"; ?> Oh man, I'm close! Ok, the above does what I want... well... almost what I want. The $_POST array gets sent across swimmingly. The only problem that I have is that once that data gets sent across, the page (index.php) is displayed in my curl.php (at the bottom of curl.php I have some text and a surveymonkey link, which is displayed after the contents of index.php are shown). Now, what I don't want it to do is show the contents of index.php, at all. I just want the text and that one link to show up. How can I do that? Quote Link to comment https://forums.phpfreaks.com/topic/257884-need-help-with-curl-in-php/#findComment-1322326 Share on other sites More sharing options...
yoursurrogategod Posted February 29, 2012 Author Share Posted February 29, 2012 Ok, didn't see a way to modify the above post, so making a new one... how odd... Is there a way for me to encapsulate the code in a hidden diff or something? That way, any output from it won't ever get displayed. Quote Link to comment https://forums.phpfreaks.com/topic/257884-need-help-with-curl-in-php/#findComment-1322332 Share on other sites More sharing options...
codebyren Posted February 29, 2012 Share Posted February 29, 2012 You want the CURLOPT_RETURNTRANSFER setting. This will capture the response to your cURL post in a variable and then you can do what you want with it (i.e. output it or not). <?php // Your current cURL initialization and settings stay as you have them // Tell cURL you want to capture the response (not render it to the browser) curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // Then assign the cURL response to a variable $output = curl_exec($ch); // Then close the cURL connection as usual curl_close($ch); // Do whatever you want with the $output variable. ?> Quote Link to comment https://forums.phpfreaks.com/topic/257884-need-help-with-curl-in-php/#findComment-1322415 Share on other sites More sharing options...
yoursurrogategod Posted March 1, 2012 Author Share Posted March 1, 2012 You want the CURLOPT_RETURNTRANSFER setting. This will capture the response to your cURL post in a variable and then you can do what you want with it (i.e. output it or not). <?php // Your current cURL initialization and settings stay as you have them // Tell cURL you want to capture the response (not render it to the browser) curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // Then assign the cURL response to a variable $output = curl_exec($ch); // Then close the cURL connection as usual curl_close($ch); // Do whatever you want with the $output variable. ?> Thanks, much appreciated. Ok, I got another problem. You know how I said that this was working before? Something I did broke it. I printed out the $_POST array in my curl.php file and it's getting there, so I have no idea why it decided to not work anymore. Are there any debug steps that I can take to figure out why it's bombing? Quote Link to comment https://forums.phpfreaks.com/topic/257884-need-help-with-curl-in-php/#findComment-1322772 Share on other sites More sharing options...
codebyren Posted March 1, 2012 Share Posted March 1, 2012 Post your updated code so we can see why it might be bombing. As for debugging cURL, the php manual covers this here. Quote Link to comment https://forums.phpfreaks.com/topic/257884-need-help-with-curl-in-php/#findComment-1322822 Share on other sites More sharing options...
yoursurrogategod Posted March 1, 2012 Author Share Posted March 1, 2012 <?php $ch = curl_init(); // set URL and other appropriate options curl_setopt($ch, CURLOPT_URL, "http://webstage.intra.lifespan.org/applications/inquiz/index.php?survey=custom-cme-modsedation"); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $_POST); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // grab URL and pass it to the browser $output = curl_exec($ch); // get the error, if any. //echo "<pre>"; //echo (curl_error($ch)); // close cURL resource, and free up system resources curl_close($ch); /*echo "<pre>"; print_r($_POST); die();*/ echo "<p>The survey is complete. Thank you for your time.</p>"; echo "<a href=\"http://www.surveymonkey.com/s/G22Y9TR\">Survey Evaluation</a>"; ?> This is the cURL code. I don't get a specific error, but when the stuff gets passed on to the other index.php, it's not getting transferred over. Quote Link to comment https://forums.phpfreaks.com/topic/257884-need-help-with-curl-in-php/#findComment-1322826 Share on other sites More sharing options...
codebyren Posted March 1, 2012 Share Posted March 1, 2012 So you can recognise that the output from cURL is from the other index.php but it displays as if there was no POST data submitted? Quote Link to comment https://forums.phpfreaks.com/topic/257884-need-help-with-curl-in-php/#findComment-1322843 Share on other sites More sharing options...
yoursurrogategod Posted March 1, 2012 Author Share Posted March 1, 2012 So you can recognise that the output from cURL is from the other index.php but it displays as if there was no POST data submitted? Ok, maybe I can answer your question with my explanation. This is how it works, as it should. +-----------------+ +-----------------+ +-----------------+ | | | | | | | foo/index.php | -> | foo/curl.php | -> | index.php | | | | | | | +-----------------+ +-----------------+ +-----------------+ The array of info that gets passed from foo/index.php (that's where a quiz that the user takes is shown), to foo/curl.php (which displays the surveymonkey link and forwards the $_POST from the previous page to the next index.php), to index.php which stores the results in a database. Now, I've found out that this did do it at one point, but I don't know why it stopped doing this. One weird thing that I did was print the $_POST in foo/curl.php and index.php (the last file in the scheme of things). What I found was that the $_POST array is not the same in all instances. Below is the output that I see in curl.php (I commented out curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); to see all of this) after viewing the source in Firefox. One weird thing is that the $_POST array in foo/curl.php (separated by '=' characters) is longer than the one listed in index.php (this file begins withe the <!DOCTYPE). Why would this happen? Array ( [survey] => custom-cme-modsedation [questionnumber] => Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 [6] => 7 [7] => 8 [8] => 9 [9] => 10 [10] => 11 [11] => 12 [12] => 13 [13] => 14 [14] => 15 [15] => 16 [16] => 17 [17] => 18 [18] => 19 [19] => 20 [20] => 21 [21] => 22 [22] => 23 [23] => 24 [24] => 25 [25] => 26 [26] => 27 [27] => 28 [28] => 29 [29] => 30 [30] => 31 [31] => 32 [32] => 33 [33] => 34 [34] => 35 [35] => 36 ) [response_1] => 32412312 [response_2] => Array ( [0] => A ) [response_3] => A [response_4] => True [response_5] => Array ( [0] => A ) [response_6] => Array ( [0] => A ) [response_7] => A [response_8] => A [response_9] => A [response_10] => Array ( [0] => A ) [response_11] => A [response_12] => A [response_13] => True [response_14] => A [response_15] => True [response_16] => True [response_17] => A [response_18] => A [response_19] => A [response_20] => A [response_21] => A [response_22] => C [response_23] => D [response_24] => A [response_25] => A [response_26] => A [response_27] => A [response_28] => A [response_29] => Array ( [0] => A [1] => B [2] => C [3] => D ) [response_30] => B [response_31] => qwq [response_33] => 123 [response_34] => qwq123 [response_35] => A ) ================================================================================ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title></title> <link rel="stylesheet" type="text/css" href="/style.css"> <link rel="home" href="http://intra.lifespan.org/"> <link rel="find" href="http://intra.lifespan.org/Search/"> <script language="JavaScript" type="text/javascript"> <!-- function init() { } //--> </script> <style type="text/css"> <!-- .invalid {color: red} .status {font-size: 12px; font-style: italic; padding: 0; margin-top: 0.5em; margin-bottom: 0.5em} .question {margin-top: 1em; margin-bottom: 1em} .useridbox {float: right; font-size: 11px; color: gray; padding-left: 1em; white-space: nowrap} .userid {font-weight: bold} /* For answer report */ .choice.correct {font-weight: bold} .answerChoice.correct {font-weight: bold} .answerChoice.correctresponse {font-weight: bold;color: red} .choice.incorrect {color: red} .rationale {margin: 0.7em 0 0 0} .answer .value {font-weight: bold} .choicesBox {margin-left: 1em} .answerBox {background-color: #EEE; padding: 1em; margin: 1em 1.3em 2em 1.3em} --> </style> <meta name="Formatter" content="ShearerSite 1.5b17"> </head> <body bgcolor="#FFFFFF" onloadfromcontent onload="init()"> <!-- begin header --> <div class="intraHeaderStripeButtons"><map name="m_HeaderButtons" id="m_HeaderButtons"> <area shape="rect" coords="0, 1, 23, 17" href="/Phonebook/" title="Phonebook" alt="Phonebook"> <area shape="rect" coords="30, 1, 83, 17" href="/Search/" title="Search" alt="Search"> <area shape="rect" coords="90, 0, 167, 17" href="/HomePage/SiteGuide.asp" title="Site Guide" alt="Site Guide" > <area shape="rect" coords="170, 0, 215, 17" href="/IS/Help/" title="Help" alt="Help"> </map><img src="/_borders/HeaderGradient.jpg" alt="" width="254" height="18"><img src="/_borders/HeaderButtons.gif" usemap="#m_HeaderButtons" alt="" width="215" height="18"></div> <div class="intraHeaderStripeLogo"><a href="/"><img src="/_borders/IntraLogoSmall.gif" alt="Intranet Home Page" width="120" height="22"></a> </div> <div id="template_placeholder_upper-navigation"> </div> <!-- end header --> <div id="template_content"> Array ( [survey] => custom-cme-modsedation [questionnumber] => Array [response_1] => 32412312 [response_2] => Array [response_3] => A [response_4] => True [response_5] => Array [response_6] => Array [response_7] => A [response_8] => A [response_9] => A [response_10] => Array [response_11] => A [response_12] => A [response_13] => True [response_14] => A [response_15] => True [response_16] => True [response_17] => A [response_18] => A [response_19] => A [response_20] => A [response_21] => A [response_22] => C [response_23] => D [response_24] => A [response_25] => A [response_26] => A [response_27] => A [response_28] => A [response_29] => Array [response_30] => B [response_31] => qwq [response_33] => 123 [response_34] => qwq123 [response_35] => A ) <p>The survey is complete. Thank you for your time.</p><a href="http://www.surveymonkey.com/s/G22Y9TR">Survey Evaluation</a> It would be easier to view the above in a text-editor and not just in-browser . Quote Link to comment https://forums.phpfreaks.com/topic/257884-need-help-with-curl-in-php/#findComment-1322890 Share on other sites More sharing options...
yoursurrogategod Posted March 1, 2012 Author Share Posted March 1, 2012 Ok, I've had a little bit of insight. I messed with the form in foo/index.php and this is what I've found: <div id="mid"> <div id="title">CME Mod Sedation Test</div> <!-- <form method="post" action="/applications/inquiz/index.php?survey=custom-cme-modsedation" name="questionForm" id="questionForm" style="margin-left: 58px;"> --> <form method="post" action="/applications/inquiz/custom/cme/modsedation/curl.php" name="questionForm" id="questionForm" style="margin-left: 58px;"> <input type="hidden" name="survey" value="custom-cme-modsedation"> <div class="question">Name <input type="hidden" name="questionnumber[]" value="1"><input type="text" name="response_1" value="" size="40"></div> Look at lines 3 and 4. Whenever I call the index.php directly (the last to be called in the sequence), it works fine. But when going through curl.php, not so much. This seems to be confirmed when looking at the 2 different $_POST from foo/curl.php and index.php (they are structured differently). Why would this change? Did the array get compacted or something? Quote Link to comment https://forums.phpfreaks.com/topic/257884-need-help-with-curl-in-php/#findComment-1322899 Share on other sites More sharing options...
yoursurrogategod Posted March 1, 2012 Author Share Posted March 1, 2012 Ok, one insight is that when $_POST is passed from foo/index.php to foo/curl.php (and printed out in foo/curl.php), it looks like this: Array ( [survey] => custom-cme-modsedation [questionnumber] => Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 [6] => 7 [7] => 8 [8] => 9 [9] => 10 [10] => 11 [11] => 12 [12] => 13 [13] => 14 [14] => 15 [15] => 16 [16] => 17 [17] => 18 [18] => 19 [19] => 20 [20] => 21 [21] => 22 [22] => 23 [23] => 24 [24] => 25 [25] => 26 [26] => 27 [27] => 28 [28] => 29 [29] => 30 [30] => 31 [31] => 32 [32] => 33 [33] => 34 [34] => 35 [35] => 36 ) [response_1] => 32412312 [response_2] => Array ( [0] => A ) [response_3] => A [response_4] => True [response_5] => Array ( [0] => A ) [response_6] => Array ( [0] => A ) [response_7] => A [response_8] => A [response_9] => A [response_10] => Array ( [0] => A ) [response_11] => A [response_12] => A [response_13] => True [response_14] => A [response_15] => True [response_16] => True [response_17] => A [response_18] => A [response_19] => A [response_20] => A [response_21] => A [response_22] => C [response_23] => D [response_24] => A [response_25] => A [response_26] => A [response_27] => A [response_28] => A [response_29] => Array ( [0] => A [1] => B [2] => C [3] => D ) [response_30] => B [response_31] => qwq [response_33] => 123 [response_34] => qwq123 [response_35] => A ) But once transferred from foo/curl.php to index.php, it looks like this: Array ( [survey] => custom-cme-modsedation [questionnumber] => Array [response_1] => 32412312 [response_2] => Array [response_3] => A [response_4] => True [response_5] => Array [response_6] => Array [response_7] => A [response_8] => A [response_9] => A [response_10] => Array [response_11] => A [response_12] => A [response_13] => True [response_14] => A [response_15] => True [response_16] => True [response_17] => A [response_18] => A [response_19] => A [response_20] => A [response_21] => A [response_22] => C [response_23] => D [response_24] => A [response_25] => A [response_26] => A [response_27] => A [response_28] => A [response_29] => Array [response_30] => B [response_31] => qwq [response_33] => 123 [response_34] => qwq123 [response_35] => A ) It's as if when transferred over, the array was collapsed/flattend/squished. I did some more reading on CURLOPT_POSTFIELDS and this is what I've found: http://us.php.net/manual/en/function.curl-setopt.php#107621 If CURLOPT_POSTFIELDS doesn't work, then how can one pass $_POST around? index.php _needs_ to have nested sub-arrays. Help! Now I'm really lost! Quote Link to comment https://forums.phpfreaks.com/topic/257884-need-help-with-curl-in-php/#findComment-1322926 Share on other sites More sharing options...
codebyren Posted March 1, 2012 Share Posted March 1, 2012 It's the nested arrays getting you. You should be able to use http_build_query to pass the data rather than feed the raw $_POST array to cURL. Something like this (which I haven't tried): <?php curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($_POST)); ?> Quote Link to comment https://forums.phpfreaks.com/topic/257884-need-help-with-curl-in-php/#findComment-1322928 Share on other sites More sharing options...
yoursurrogategod Posted March 1, 2012 Author Share Posted March 1, 2012 YES! That did it! It works! Fun fact. http_build_query makes this line of code pointless: curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); The page that gets stuff sent to is no longer displayed even when that line is commented out. Thank you very much! Quote Link to comment https://forums.phpfreaks.com/topic/257884-need-help-with-curl-in-php/#findComment-1322932 Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.