Amul Bhatia
Amul Bhatia

Reputation: 154

Extract form field from webhook request

I am getting the following output by this statement

$varname = file_get_contents('php://input');

Output -

You've got a new submission8793892-1=AM+BH&8793892-2=TT&8793893=aman.h340gmail.com&8793894=005-222-2222&8793895=&8793895-1=&8793895-2=&8793895-3=&8793895-4=&8793895-5=&8793895-6=India&8793896=Standard+%28%2430%2Fmonth%29&8793897_0=no&8793897_1=no&8793897_2=no&8793897_3=no&8793897_4=no&8793897_5=no&8793898=&8793899_0=yes&8793900=No&submissionHtml=&entryId=24&submissionId=x5e417c6eae46d8.13907951&geoipcache=%7B%223753571910%22%3A%7B%22ip_ctry%22%3A%22IN%22%2C%22ip_cntry%22%3A%22IND%22%2C%22ip_country%22%3A%22India%22%7D%7D&dateTime=2020-02-10+11%3A53%3A18&sessionGlobalsVars%5Bu_timezone%5D=-4&sessionGlobalsVars%5Bf_refon%5D=0&sessionGlobalsVars%5Bf_adduserinfo%5D=1&sessionGlobalsVars%5Brefid_timestamp%5D=1581349998&sessionGlobalsVars%5Btimestamp%5D=2020-02-10+11%3A53&sessionGlobalsVars%5Bgdrive_sender%5D=noreply%40app.captainform.com&sessionGlobalsVars%5Bgdrive_to%5D=annasawin%40gmail.com&sessionGlobalsVars%5Bgdrive_contact_email%5D=support%40123contactform.com&ses sionGlob

I want to extract Email Id only , how can i get it ? i tried every possible way, but no success. Tried with this, but no success, anyone can help.. thanks

$array=json_decode($varname,true);
$array["8793893"];

Upvotes: 0

Views: 60

Answers (2)

Aydin4ik
Aydin4ik

Reputation: 1935

Your input string is formed like a query string - using this fact (and if it is a fact for all your cases), and if you know in which key the email is stored (in your case it is 8793893), then you can get by parsing the string using parse_str() function:

$varname = "You've got a new submission8793892-1=AM+BH&8793892-2=TT&8793893=aman.h340gmail.com&8793894=005-222-2222&8793895=&8793895-1=&8793895-2=&8793895-3=&8793895-4=&8793895-5=&8793895-6=India&8793896=Standard+%28%2430%2Fmonth%29&8793897_0=no&8793897_1=no&8793897_2=no&8793897_3=no&8793897_4=no&8793897_5=no&8793898=&8793899_0=yes&8793900=No&submissionHtml=&entryId=24&submissionId=x5e417c6eae46d8.13907951&geoipcache=%7B%223753571910%22%3A%7B%22ip_ctry%22%3A%22IN%22%2C%22ip_cntry%22%3A%22IND%22%2C%22ip_country%22%3A%22India%22%7D%7D&dateTime=2020-02-10+11%3A53%3A18&sessionGlobalsVars%5Bu_timezone%5D=-4&sessionGlobalsVars%5Bf_refon%5D=0&sessionGlobalsVars%5Bf_adduserinfo%5D=1&sessionGlobalsVars%5Brefid_timestamp%5D=1581349998&sessionGlobalsVars%5Btimestamp%5D=2020-02-10+11%3A53&sessionGlobalsVars%5Bgdrive_sender%5D=noreply%40app.captainform.com&sessionGlobalsVars%5Bgdrive_to%5D=annasawin%40gmail.com&sessionGlobalsVars%5Bgdrive_contact_email%5D=support%40123contactform.com&ses sionGlob";
$array = [];
parse_str($varname, $array);
echo $array['8793893'];

But if you don't know they key and/or the keys are dynamic, you will have to traverse the array and look for a value that is structured like an email. PHP has a very handy filter_var() function for validating strings:

$varname = "You've got a new submission8793892-1=AM+BH&8793892-2=TT&[email protected]&8793894=005-222-2222&8793895=&8793895-1=&8793895-2=&8793895-3=&8793895-4=&8793895-5=&8793895-6=India&8793896=Standard+%28%2430%2Fmonth%29&8793897_0=no&8793897_1=no&8793897_2=no&8793897_3=no&8793897_4=no&8793897_5=no&8793898=&8793899_0=yes&8793900=No&submissionHtml=&entryId=24&submissionId=x5e417c6eae46d8.13907951&geoipcache=%7B%223753571910%22%3A%7B%22ip_ctry%22%3A%22IN%22%2C%22ip_cntry%22%3A%22IND%22%2C%22ip_country%22%3A%22India%22%7D%7D&dateTime=2020-02-10+11%3A53%3A18&sessionGlobalsVars%5Bu_timezone%5D=-4&sessionGlobalsVars%5Bf_refon%5D=0&sessionGlobalsVars%5Bf_adduserinfo%5D=1&sessionGlobalsVars%5Brefid_timestamp%5D=1581349998&sessionGlobalsVars%5Btimestamp%5D=2020-02-10+11%3A53&sessionGlobalsVars%5Bgdrive_sender%5D=noreply%40app.captainform.com&sessionGlobalsVars%5Bgdrive_to%5D=annasawin%40gmail.com&sessionGlobalsVars%5Bgdrive_contact_email%5D=support%40123contactform.com&ses sionGlob";
$array = [];
parse_str($varname, $array);

foreach ($array as $key=>$value) {
    if (filter_var($value, FILTER_VALIDATE_EMAIL)) {
        echo $value;
        return;
    }
}

Mind you, your email address is malformed in the original string posted in the question. Therefore, filter/regex won't recognise it.

Upvotes: 0

dearsina
dearsina

Reputation: 5202

Use the parse_str() function:

$varname = "You've got a new submission8793892-1=AM+BH&8793892-2=TT&8793893=aman.h340gmail.com&8793894=005-222-2222&8793895=&8793895-1=&8793895-2=&8793895-3=&8793895-4=&8793895-5=&8793895-6=India&8793896=Standard+%28%2430%2Fmonth%29&8793897_0=no&8793897_1=no&8793897_2=no&8793897_3=no&8793897_4=no&8793897_5=no&8793898=&8793899_0=yes&8793900=No&submissionHtml=&entryId=24&submissionId=x5e417c6eae46d8.13907951&geoipcache=%7B%223753571910%22%3A%7B%22ip_ctry%22%3A%22IN%22%2C%22ip_cntry%22%3A%22IND%22%2C%22ip_country%22%3A%22India%22%7D%7D&dateTime=2020-02-10+11%3A53%3A18&sessionGlobalsVars%5Bu_timezone%5D=-4&sessionGlobalsVars%5Bf_refon%5D=0&sessionGlobalsVars%5Bf_adduserinfo%5D=1&sessionGlobalsVars%5Brefid_timestamp%5D=1581349998&sessionGlobalsVars%5Btimestamp%5D=2020-02-10+11%3A53&sessionGlobalsVars%5Bgdrive_sender%5D=noreply%40app.captainform.com&sessionGlobalsVars%5Bgdrive_to%5D=annasawin%40gmail.com&sessionGlobalsVars%5Bgdrive_contact_email%5D=support%40123contactform.com&ses sionGlob";
parse_str($varname, $array);
var_dump($array);

This will give you the desired output:

array(28) {
  ["You've_got_a_new_submission8793892-1"]=>
  string(5) "AM BH"
  ["8793892-2"]=>
  string(2) "TT"
  [8793893]=>
  string(18) "aman.h340gmail.com"
  [8793894]=>
  string(12) "005-222-2222"
  [8793895]=>
  string(0) ""
  ["8793895-1"]=>
  string(0) ""
  ["8793895-2"]=>
  string(0) ""
  ["8793895-3"]=>
  string(0) ""
  ["8793895-4"]=>
  string(0) ""
  ["8793895-5"]=>
  string(0) ""
  ["8793895-6"]=>
  string(5) "India"
  [8793896]=>
  string(20) "Standard ($30/month)"
  ["8793897_0"]=>
  string(2) "no"
  ["8793897_1"]=>
  string(2) "no"
  ["8793897_2"]=>
  string(2) "no"
  ["8793897_3"]=>
  string(2) "no"
  ["8793897_4"]=>
  string(2) "no"
  ["8793897_5"]=>
  string(2) "no"
  [8793898]=>
  string(0) ""
  ["8793899_0"]=>
  string(3) "yes"
  [8793900]=>
  string(2) "No"
  ["submissionHtml"]=>
  string(0) ""
  ["entryId"]=>
  string(2) "24"
  ["submissionId"]=>
  string(24) "x5e417c6eae46d8.13907951"
  ["geoipcache"]=>
  string(69) "{"3753571910":{"ip_ctry":"IN","ip_cntry":"IND","ip_country":"India"}}"
  ["dateTime"]=>
  string(19) "2020-02-10 11:53:18"
  ["sessionGlobalsVars"]=>
  array(8) {
    ["u_timezone"]=>
    string(2) "-4"
    ["f_refon"]=>
    string(1) "0"
    ["f_adduserinfo"]=>
    string(1) "1"
    ["refid_timestamp"]=>
    string(10) "1581349998"
    ["timestamp"]=>
    string(16) "2020-02-10 11:53"
    ["gdrive_sender"]=>
    string(27) "[email protected]"
    ["gdrive_to"]=>
    string(19) "[email protected]"
    ["gdrive_contact_email"]=>
    string(26) "[email protected]"
  }
  ["ses_sionGlob"]=>
  string(0) ""
}

Upvotes: 2

Related Questions