Jump to content

Recommended Posts

Greetings. I currently have a php script that runs when a form I created is submitted. Basically the script posts the collected data to a second external form and submits it there. Now I want to add Form Tools in order to create a more aesthetically appealing front end and user friendly back end with database support etc. -- I've used FT before, however, never with the involvement of a second PHP script that reroutes the info.

 

At this point, Form Tools is waiting for a test submission from your form. It will use this form submission to know what information should be stored for all future submissions. They give me two options to add my code.. by PHP or API..

 

PHP is what I usually use, as it's just a matter of adding

<form action="http://www.mysite/formtools/process.php" method="post">

<input type="hidden" name="form_tools_initialize_form" value="1" />

<input type="hidden" name="form_tools_form_id" value="1" />

 

But now I have a problem because, currently, my submit button

 

<form method="post" action="formload.php">

<input type="submit" class="primaryAction" id="submit-" name="tfa_submitAction" value="submit">

  <input type="hidden" value="294-ebbb9c4d4e37fd131788e258d9663332" name="tfa_dbCounters" id="tfa_dbCounters">

  <input type="hidden" value="134518" name="tfa_dbFormId" id="tfa_dbFormId">

  <input type="hidden" value="" name="tfa_dbResponseId" id="tfa_dbResponseId">

  <input type="hidden" value="b40a6b1b2518fdfbbf03a9951e71ea75" name="tfa_dbControl" id="tfa_dbControl">

  <input type="hidden" value="1278748831" name="tfa_dbTimeStarted" id="tfa_dbTimeStarted">

  <input type="hidden" value="53" name="tfa_dbVersionId" id="tfa_dbVersionId">

 

So I was told both scripts can't be called in this fashion (two actions from one submit post) but could instead be combined into one .php script - Thanks admin thorpe

 

Being that I'm a new comer to PHP and I didn't write either of these scripts, I don't want to haphazardly combine both scripts and break either one, especially the first. Can someone help me out in discovering the best way to integrate my current PHP file with Form Tool?

 

My current code looks like this:

 

 

<?

 

// Get the post data..

$postdata = file_get_contents("php://input");

 

if($_POST['tos'] != "on")

{

echo("<h2>You MUST accept the Terms of Service to submit this form</h2>");

die();

}

 

// Extract TOS from post string..

$postdata = preg_replace("/&tos=on/","",$postdata);

 

// Fetch original form to substitute changable post variables..

$chA = curl_init();

$timeout = 5;

curl_setopt ($chA, CURLOPT_URL,"url removed");

curl_setopt ($chA, CURLOPT_RETURNTRANSFER, 1);

curl_setopt ($chA, CURLOPT_CONNECTTIMEOUT, $timeout);

$pagedata = curl_exec($chA);

curl_close($chA);

 

// Use regular expression to extract data in tfa_dbCounters..

preg_match("/value=\"([a-zA-Z0-9-]+)\" name=\"tfa_dbCounters\"/",$pagedata, $matches);

$dbcounters = $matches[1];

 

// Now fetch and substitute form ids and such..

$timestamp = time();

$postdata = preg_replace("/&tfa_dbTimeStarted=\d+/","&tfa_dbTimeStarted=$timestamp",$postdata);

$postdata = preg_replace("/&tfa_dbCounters=[a-zA-Z0-9-]+/","&tfa_dbCounters=$dbcounters",$postdata);

 

// Repost the postdata from the first form to the final destination..

$chB = curl_init("url removed");

curl_setopt($chB, CURLOPT_POST, 1);

curl_setopt($chB, CURLOPT_POSTFIELDS, $postdata);

curl_setopt($chB, CURLOPT_HEADER, 0);

curl_setopt($chB, CURLOPT_RETURNTRANSFER, 1);

$Rec_Data = curl_exec($chB);

 

// Create an HTML header..

ob_start();

header("Content-Type: text/html");

 

// Get rid of bogus characters and linefeeds..

$Temp_Output = ltrim(rtrim(trim(strip_tags(trim(preg_replace ( "/\s\s+/" , " " , html_entity_decode($Rec_Data)))),"\n\t\r\h\v\0 ")), "%20");

$Temp_Output = ereg_replace (' +', ' ', trim($Temp_Output));

$Temp_Output = ereg_replace("[\r\t\n]","",$Temp_Output);

 

// Chop off the rest of the header garbage..

$Temp_Output = substr($Temp_Output,197,300);

 

// Construct email

$splitData = explode("&",$postdata);

 

$email = "Form Submission Email\n\n";

$email = $email . "Submission from [" . $_SERVER['REMOTE_ADDR'] . "]\n";

$email = $email . "---------------------------------------------------------\n";

 

foreach($splitData as $datum)

{

$datum = preg_replace("/\+/"," ",$datum);

$datum = preg_replace("/%5B/","[",$datum);

$datum = preg_replace("/%5D/","]",$datum);

$email = $email . "$datum\n";

}

 

$email = $email . "---------------------------------------------------------\n\n";

 

// Send email..

mail($_POST['recipient'],"Form Submission From [" . $_SERVER['REMOTE_ADDR'] . "]",$email);

 

// Echo result..

echo $Temp_Output;

 

// Finish up..

$Final_Out=ob_get_clean();

echo $Final_Out;

curl_close($chB);

 

// Done.

 

?>

 

 

The code I want to add is this...

<?php

 

/**

* File: process.php

*

* This file processes any form submissions for forms already added and configured within Form Tools. To

* use it, just point your form to this file, like so:

*

*  <form method="post" action="/path/to/process.php">

*

* Once the form has been added through the Form Tools UI, this script parses the form contents

* and adds it to the database then redirects the user to whatever page is required. In addition,

* this script is used to initially set up the form within the database, to map input fields to

* database columns and types.

*/

 

 

$folder = dirname(__FILE__);

 

// always include the core library functions

require_once("$folder/global/library.php");

 

// if the API is supplied, include it as well

@include_once("$folder/global/api/api.php");

 

 

// check we're receiving something

if (empty($_POST))

{

  $page_vars = array("message_type" => "error", "message" => $LANG["processing_no_post_vars"]);

  ft_display_page("../../global/smarty/messages.tpl", $page_vars);

  exit;

}

 

// check there's a form ID included

else if (empty($_POST["form_tools_form_id"]))

{

  $page_vars = array("message_type" => "error", "message" => $LANG["processing_no_form_id"]);

  ft_display_page("../../global/smarty/messages.tpl", $page_vars);

  exit;

}

 

// is this an initialization submission?

else if (isset($_POST["form_tools_initialize_form"]))

  ft_initialize_form($_POST);

 

// otherwise, it's a regular form submission. Process it!

else

  ft_process_form($_POST);

 

// -------------------------------------------------------------------------------------------------

 

/**

* This function processes the form submissions, after the form has been set up in the database.

*/

function ft_process_form($form_data)

{

  global $g_table_prefix, $g_multi_val_delimiter, $g_query_str_multi_val_separator, $g_root_dir, $LANG,

  $g_api_version, $g_api_recaptcha_private_key;

 

  // ensure the incoming values are escaped

  $form_data = ft_sanitize($form_data);

 

  $form_id = $form_data["form_tools_form_id"];

  $form_info = ft_get_form($form_id);

 

  extract(ft_process_hooks("start", compact("form_info", "form_id", "form_data"), array("form_data")), EXTR_OVERWRITE);

 

  // check to see if this form has been completely set up

  if ($form_info["is_complete"] == "no")

  {

    $page_vars = array("message_type" => "error", "message" => $LANG["processing_form_incomplete"]);

    ft_display_page("../../global/smarty/messages.tpl", $page_vars);

    exit;

  }

 

  // check to see if this form has been disabled

  if ($form_info["is_active"] == "no")

  {

    if (isset($form_data["form_tools_inactive_form_redirect_url"]))

    {

      header("location: {$form_data["form_tools_inactive_form_redirect_url"]}");

      exit;

    }

 

    $page_vars = array("message_type" => "error", "message" => $LANG["processing_form_disabled"]);

    ft_display_page("../../global/smarty/messages.tpl", $page_vars);

    exit;

  }

 

  // do we have a form for this id?

  if (!ft_check_form_exists($form_id))

  {

    $page_vars = array("message_type" => "error", "message" => $LANG["processing_invalid_form_id"]);

    ft_display_page("../../global/smarty/messages.tpl", $page_vars);

    exit;

  }

 

 

  // was there a reCAPTCHA response? If so, a recaptcha was just submitted. This generally implies the

  // form page included the API, so check it was entered correctly. If not, return the user to the webpage

  if (isset($g_api_version) && isset($form_data["recaptcha_response_field"]))

  {

    $passes_captcha = false;

    $recaptcha_challenge_field = $form_data["recaptcha_challenge_field"];

    $recaptcha_response_field  = $form_data["recaptcha_response_field"];

 

    $folder = dirname(__FILE__);

    require_once("$folder/global/api/recaptchalib.php");

 

    $resp = recaptcha_check_answer($g_api_recaptcha_private_key, $_SERVER["REMOTE_ADDR"], $recaptcha_challenge_field, $recaptcha_response_field);

 

    if ($resp->is_valid)

      $passes_captcha = true;

    else

    {

      // since we need to pass all the info back to the form page we do it by storing the data in sessions. Enable 'em.

      @ft_api_start_sessions();

      $_SESSION["form_tools_form_data"] = $form_data;

      $_SESSION["form_tools_form_data"]["api_recaptcha_error"] = $resp->error;

 

      // if there's a form_tools_form_url specified, redirect to that

      if (isset($form_data["form_tools_form_url"]))

      {

        header("location: {$form_data["form_tools_form_url"]}");

        exit;

      }

      // if not, see if the server has the redirect URL specified

      else if (isset($_SERVER["HTTP_REFERER"]))

      {

        header("location: {$_SERVER["HTTP_REFERER"]}");

        exit;

      }

      // no luck! Throw an error

      else

      {

        $page_vars = array("message_type" => "error", "message" => $LANG["processing_no_form_url_for_recaptcha"]);

        ft_display_page("../../global/smarty/messages.tpl", $page_vars);

        exit;

      }

    }

  }

 

 

  // get a list of the custom form fields (i.e. non-system) for this form

  $form_fields = ft_get_form_fields($form_id);

 

  $custom_form_fields = array();

  foreach ($form_fields as $field_info)

  {

    $field_id    = $field_info["field_id"];

    $field_name  = $field_info["field_name"];

    $col_name    = $field_info["col_name"];

    $field_title = $field_info["field_title"];

    $field_type  = $field_info["field_type"];

    $include_on_redirect  = $field_info["include_on_redirect"];

 

    // ignore system fields

    if ($field_type == "system")

      continue;

 

    $custom_form_fields[$field_name] = array(

      "field_id" => $field_id,

      "col_name" => $col_name,

      "field_title" => $field_title,

      "include_on_redirect" => $include_on_redirect,

      "field_type" => $field_type

        );

  }

 

 

  // now examine the contents of the POST/GET submission and get a list of those fields

  // which we're going to update

  $valid_form_fields    = array();

  while (list($form_field, $value) = each($form_data))

  {

    // if this field is included, store the value for adding to DB

    if (array_key_exists($form_field, $custom_form_fields))

    {

      // ignore file fields - they're handled separately

      if ($custom_form_fields[$form_field]["field_type"] == "file" || $custom_form_fields[$form_field]["field_type"] == "image")

        continue;

 

      $col_name = $custom_form_fields[$form_field]["col_name"];

      $query_col_names[] = $col_name;

      $cleaned_value = $value;

 

      if (is_array($value))

      {

        if ($form_info["submission_strip_tags"] == "yes")

        {

          for ($i=0; $i<count($value); $i++)

            $value[$i] = strip_tags($value[$i]);

        }

 

        $cleaned_value = join("$g_multi_val_delimiter", $value);

      }

      else

      {

        if ($form_info["submission_strip_tags"] == "yes")

          $cleaned_value = strip_tags($value);

      }

 

      $valid_form_fields[$col_name] = "'$cleaned_value'";

    }

  }

 

 

  $now = ft_get_current_datetime();

  $ip_address      = $_SERVER["REMOTE_ADDR"];

  $is_finalized    = "yes";

 

  $col_names = array_keys($valid_form_fields);

  $col_names_str = join(", ", $col_names);

  if (!empty($col_names_str))

    $col_names_str .= ", ";

 

  $col_values = array_values($valid_form_fields);

  $col_values_str = join(", ", $col_values);

  if (!empty($col_values_str))

    $col_values_str .= ", ";

 

  // build our query

  $query = "

      INSERT INTO {$g_table_prefix}form_$form_id ($col_names_str submission_date, last_modified_date, ip_address, is_finalized)

      VALUES ($col_values_str '$now', '$now', '$ip_address', '$is_finalized')

          ";

 

 

  // add the submission to the database (if form_tools_ignore_submission key isn't set by either the form or the

  // Submission Pre-Parser module)

  $submission_id = "";

  if (!isset($form_data["form_tools_ignore_submission"]))

  {

    $result = mysql_query($query);

 

    if (!$result)

    {

      $page_vars = array("message_type" => "error", "error_code" => 304, "error_type" => "system",

        "debugging"=> "Failed query in <b>" . __FUNCTION__ . ", " . __FILE__ . "</b>, line " . __LINE__ .

            ": <i>" . nl2br($query) . "</i>", mysql_error());

      ft_display_page("../../global/smarty/messages.tpl", $page_vars);

      exit;

    }

 

    $submission_id = mysql_insert_id();

  }

 

 

  $redirect_query_params = array();

 

  // build the redirect query parameter array. Note that we loop through the original

  foreach ($form_fields as $field_info)

  {

    if ($field_info["include_on_redirect"] == "no" || $field_info["field_type"] == "file" || $field_info["field_type"] == "image")

      continue;

 

    switch ($field_info["col_name"])

    {

      case "submission_id":

        $redirect_query_params[] = "submission_id=$submission_id";

        break;

      case "submission_date":

        $settings = ft_get_settings();

        $submission_date_formatted = ft_get_date($settings["default_timezone_offset"], $submission_date, $settings["default_date_format"]);

        $redirect_query_params[] = "submission_date=" . rawurlencode($submission_date_formatted);

        break;

      case "last_modified_date":

        $settings = ft_get_settings();

        $submission_date_formatted = ft_get_date($settings["default_timezone_offset"], $submission_date, $settings["default_date_format"]);

        $redirect_query_params[] = "last_modified_date=" . rawurlencode($submission_date_formatted);

        break;

      case "ip_address":

        $redirect_query_params[] = "ip_address=$ip_address";

        break;

 

      default:

        $field_name = $field_info["field_name"];

 

        // if $value is an array, convert it to a string, separated by $g_query_str_multi_val_separator

        if (is_array($form_data[$field_name]))

        {

          $value_str = join($g_query_str_multi_val_separator, $form_data[$field_name]);

          $redirect_query_params[] = "$field_name=" . rawurlencode($value_str);

        }

        else

          $redirect_query_params[] = "$field_name=" . rawurlencode($form_data[$field_name]);

        break;

    }

  }

 

  // now that the submission has been added to the database, upload any files that were included and

  // store the file name in the appropriate field

  while (list($form_field, $fileinfo) = each($_FILES))

  {

    if (empty($fileinfo["name"]))

      continue;

 

    if (array_key_exists($form_field, $custom_form_fields))

    {

      $field_id  = $custom_form_fields[$form_field]["field_id"];

      $field_type = $custom_form_fields[$form_field]["field_type"];

 

      if      ($field_type == "file")

        list($success, $message, $filename) = ft_upload_submission_file($form_id, $submission_id, $field_id, $fileinfo);

      else if ($field_type == "image")

        list($success, $message, $filename) = ft_upload_submission_image($form_id, $submission_id, $field_id, $fileinfo);

    }

 

    // if required, add the filename to the redirect query params

    if ($custom_form_fields[$form_field]["include_on_redirect"] == "yes")

      $redirect_query_params[] = "$form_field=$filename";

  }

 

  // send any emails

  ft_send_emails("on_submission", $form_id, $submission_id);

 

  // if the redirect URL has been specified either in the database or as part of the form

  // submission, redirect the user [form submission form_tools_redirect_url value overrides

  // database value]

  if (!empty($form_info["redirect_url"]) || !empty($form_data["form_tools_redirect_url"]))

  {

    // build redirect query string

    $redirect_url = (isset($form_data["form_tools_redirect_url"]) && !empty($form_data["form_tools_redirect_url"]))

      ? $form_data["form_tools_redirect_url"] : $form_info["redirect_url"];

 

    $query_str = "";

    if (!empty($redirect_query_params))

      $query_str = join("&", $redirect_query_params);

 

    if (!empty($query_str))

    {

      // only include the ? if it's not already there

      if (strpos($redirect_url, "?"))

        $redirect_url .= "&" . $query_str;

      else

        $redirect_url .= "?" . $query_str;

    }

 

    header("Location: " . $redirect_url);

    exit;

  }

 

  // the user should never get here! This means that the no redirect URL has been specified

  $page_vars = array("message_type" => "error", "message" => $LANG["processing_no_redirect_url"]);

  ft_display_page("../../global/smarty/messages.tpl", $page_vars);

  exit;

}

 

 

Any help would be TREMENDOUSLY appreciated

 

 

Is there any way that I can initiate the second php script from the first one using the same post data that the first one uses? Is this a possibility?

 

Would this help me? Can I initiate the Form Tools from my initial PHP script? Will the post data carry over?

 

<?php

    $curl = curl_init();

    curl_setopt ($curl, CURLOPT_URL, "http://www.php.net");

    curl_exec ($curl);

    curl_close ($curl);

?>

 

  • 2 months later...
This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.