2014-11-08 13 views
0

У меня есть тихий пост, сделанный при заполнении paypal payflow. Она возвращает длинную строку, как:Разбор строки запроса для отправки в виде массива в сообщении молчания (php)

& AVSZIP = X & TYPE = S & BILLTOEMAIL = нет% 40one.com

Я вставил смелую часть следующего сценария, который я нашел искал вокруг и думал, что это сделал бы трюк. Возможно, я совершенно не понимаю, как это работает, но я подумал, что он определит $ proArray, а затем отправит мне это сообщение в тихом сообщении. Он отправляет тихое почтовое сообщение, но ничего внутри.

Пожалуйста, скажите, нужна ли дополнительная информация, или если я просто идиот. Я также попробовал команду parse_str, но я полагаю, что не знаю, как правильно использовать это.

<?php 
//PLACE EMAIL BELOW: 
$email="[email protected]"; 
$req = ""; 
if ($_POST) 
{ 
// iterate through each name value pair 
foreach ($_POST as $key => $value) 
{ 
    $value = urlencode(stripslashes($value)); 
    $req .= "&$key=$value"; 
} 

**// Function to convert NTP string to an array 
function NVPToArray($req) 
{ 
    $proArray = array(); 
    while(strlen($req)) 
    { 
     // name 
     $keypos= strpos($req,'='); 
     $keyval = substr($req,0,$keypos); 
     // value 
     $valuepos = strpos($req,'&') ? strpos($req,'&'): strlen($req); 
     $valueval = substr($req,$keypos+1,$valuepos-$keypos-1); 
     // decoding the respose 
     $proArray[$keyval] = urldecode($valueval); 
     $req = substr($req,$valuepos+1,strlen($req)); 
    } 
}** 

//write to file 
$fh = fopen("logpost.txt", 'a');//open file and create if does not exist 
fwrite($fh, "\r\n/////////////////////////////////////////\r\n");//Just for spacing in log file 
fwrite($fh, $req);//write data 
fclose($fh);//close file 

//Email 
$mail_From = "From: [email protected]"; 
$mail_To = $email; 
$mail_Subject = "POST EXISTS"; 
$mail_Body = $proArray; 
mail($mail_To, $mail_Subject, $mail_Body, $mail_From); 

// 

//if posted return echo response 
echo $req; 
} 

// No post data received 
if (empty($_POST)) 
{ 
//write to file 
$fh = fopen("logpost.txt", 'a');//open file and create if does not exist 
fwrite($fh, "\r\n/////////////////////////////////////////\r\n");//Just for spacing in log file 
fwrite($fh, "Empty Post");//write data 
fclose($fh);//close file 

//Email 
$mail_From = "From: [email protected]"; 
$mail_To = $email; 
$mail_Subject = "Empty Post"; 
$mail_Body = ""; 
mail($mail_To, $mail_Subject, $mail_Body, $mail_From); 

//if posted return echo response 
echo "Empty Post"; 
} 

?> 

ответ

0

Это выглядит как все, что я на самом деле нужно сделать было изменение одна строка:

$req .= "&$key=$value"; 

в :

$req .= "$key = $value\n"; 

и держать $ REQ как $ mail_Body:

$mail_Body = $req; 

И не использовать функцию NVPToArray вообще. Возможно, я объяснял это неправильно или не предоставлял контекст раньше (из-за моего собственного незнания скриптов), но это тот ответ, который я искал.

Теперь у меня есть другой вопрос об этом, но это будет совсем другое сообщение.

0

В этом скрипте, кажется, много чего не так.

Прежде всего, вы не вызываете свою новую функцию NVPToArray(), поэтому ни один из этих кодов не выполняется.

Во-вторых, даже если вы вызывали эту функцию, она не возвращает proArray, так что данные будут потеряны.

В-третьих, вы пытаетесь назначить $ proArray (который не определен в контексте, который вы используете, и даже если это так, вы не вызываете функцию NVPToArray(), чтобы заполнить ее) в $ mail_body , но функция mail() принимает строку, а $ proArray будет массивом. Поэтому, даже если все остальное работает, когда $ proArray исполняется в виде строки, все, что вы получили бы в своем теле письма, будет словом «Массив». Вы должны взять ключи и значения в $ proArray и вывести из него строку. Самый простой способ, вероятно, будет:

implode("\n", array_map(function($k, $v) { return $k . ' = ' . $v; }, array_keys($proArray), $proArray)); 

Который, данный массив:

array('AVSZIP' => 'X', 'TYPE' => 'S', 'BILLTOEMAIL' => '[email protected]') 

вернется

AVSZIP = X 
TYPE = S 
BILLTOEMAIL = [email protected] 

Чтобы получить сценарий для работы, изменения я бы предлагаем вам сделать:

1) Добавьте к концу функцию NVPToArray().

return $proArray; 

2) Затем замените строку

$mail_Body = $proArray; 

с

$proArray = NVPToArray($req); 
$mail_body = implode("\n", array_map(function($k, $v) { return $k . ' = ' . $v; }, array_keys($proArray), $proArray)); 
+0

Thanks Mark. Я внес эти изменения, но он все еще просто возвращает пустое электронное письмо. Я должен упустить что-то еще. –

 Смежные вопросы

  • Нет связанных вопросов^_^