Dec 11th, 2011, 10:54 AM
Hi Bwaye,
First off (while I remember it), a minor thing: move this line...
... after the ft_api_init_form_page() line. Otherwise it will always just set $fields to an empty array, then overwrite it with whatever's returned by ft_api_ini_form_page(). It won't have strip_tags run properly.
Secondly, regarding your main question: what's happening is that your sessions aren't being cleared - it's just that it's not quite working as you'd expect. (I don't think this situation is actually documented, so don't feel bad...!)
When you fill in the form & click submit, the form data is POSTed to the same page. The ft_api_init_form_page() line, which returns $fields, ONLY returns data that's already been stored in sessions. At this stage, the new content in the POST request hasn't been stored yet. The POST content is added to sessions later on in the ft_api_process_form() page.
So what you need to do in this situation is detect for the situation where the form just failed the recaptcha, and update $fields to properly store the latest POST data. For that, try this code:
Hope this helps.
[P.S. Stuff like this is why the Form Builder module is going to be such a saving grace. No more editing PHP code... yay!]
First off (while I remember it), a minor thing: move this line...
PHP Code:
$fields = isset($_SESSION["form_tools_form_data"]) ? ft_strip_tags($_SESSION["form_tools_form_data"]) : array();
... after the ft_api_init_form_page() line. Otherwise it will always just set $fields to an empty array, then overwrite it with whatever's returned by ft_api_ini_form_page(). It won't have strip_tags run properly.
Secondly, regarding your main question: what's happening is that your sessions aren't being cleared - it's just that it's not quite working as you'd expect. (I don't think this situation is actually documented, so don't feel bad...!)
When you fill in the form & click submit, the form data is POSTed to the same page. The ft_api_init_form_page() line, which returns $fields, ONLY returns data that's already been stored in sessions. At this stage, the new content in the POST request hasn't been stored yet. The POST content is added to sessions later on in the ft_api_process_form() page.
So what you need to do in this situation is detect for the situation where the form just failed the recaptcha, and update $fields to properly store the latest POST data. For that, try this code:
PHP Code:
<?php
require_once("global/api/api.php");
ft_api_start_sessions();
$fields = ft_api_init_form_page(11);
$fields = isset($_SESSION["form_tools_form_data"]) ?
ft_strip_tags($_SESSION["form_tools_form_data"]) : array();
$params = array(
"submit_button" => "submit",
"next_page" => "thanks.php",
"form_data" => $_POST,
"file_data" => $_FILES,
"finalize" => true
);
ft_api_process_form($params);
// this is the new bit
if (!empty($g_api_recaptcha_error))
{
$fields = array_merge($fields, $_POST);
}
Hope this helps.
[P.S. Stuff like this is why the Form Builder module is going to be such a saving grace. No more editing PHP code... yay!]