#php #arrays #email
#php #массивы #Адрес электронной почты
Вопрос:
Я новичок в PHP и пытаюсь прочитать массив из отправленной формы в $ _POST, и я использую этот код:
$email_text = array(var_export($_POST, true));
$body = "";
foreach ($email_text as $key => $value) {
$body .= $value;
}
Затем прикрепив $body
к $email_body
Моя проблема в том, что массив поступает в эту форму
array (
'email' => 'xxx@gmail.com',
'phone' => '123123',
'Patients' =>
array (
0 =>
array (
'name' => 'xxx',
'lastname' => 'xxxx',
'medication_str' => '12312312',
),
1 =>
array (
'name' => '123',
'lastname' => '123',
'medication_str' => '123',
),
),
)
Когда я пытаюсь отсортировать его с помощью foreach, это не работает.
Мой желаемый формат в HTML был бы:
email: value
phone: value
Patients
1 -
name: value
lastname: value
medication_str: value
2 -
name: value
lastname: value
medication_str: value
Заранее благодарю вас, любая помощь высоко ценится.
P.S электронная почта в порядке, и функция электронной почты:
if (empty($errors)) {
$to = $myemail;
$email_subject = "xxx";
$email_body = $body;
$headers = "From: xx@xx.comn";
mail($to, $email_subject, $email_body, $headers);
//redirect to the 'thank you' page
header('Location: web-form-thank-you.html');
}
Комментарии:
1. где ошибка и какой код вызывает ошибку, вы не объяснили эту часть, или, может быть, я не понял, вы заполняете меня здесь.:-)
2. @waanofii.tech на самом деле ошибки нет. Выходные данные отображаются в виде массива в теле электронного письма, что мне не нравится, см. код 2.
Ответ №1:
Я написал следующий код, предполагая, что приведенный выше вывод массива является выводом $body
вы можете скопировать и вставить следующее и обратите внимание, что я изменил ваше $body
имя переменной на $array
и использовал body для извлечения данных из переменной, которую я создал $array
в этом случае. Надеюсь, это исправит вашу проблему, если у вас возникнут какие-либо дополнительные проблемы, не стесняйтесь спрашивать в комментарии. мир 🙂
<?php
$email_text = array(var_export($_POST, true));
$array = "";
foreach ($email_text as $key => $value) {
$array .= $value;
}
unset($key);
unset($value);
$body="";
foreach ($array as $key => $value) {
if($key!="Patients"){
$body .= "$key: $value</br>";
}
if($key=="Patients"amp;amp;$key!=NULL) {
$body.="$key</br>";
foreach ($array[$key] as $id => $datas) {
$body.="$id</br>";
//var_dump($arrays[$key][$id]);
foreach ($array[$key][$id] as $data => $dvalue) {
$body.="$data: $dvalue</br>";
}
}
}
}
echo $body;
?>
Ответ №2:
Я написал класс, который даст вам желаемый результат:
<?php
class EmailGenerator {
const EMAIL_FIELD = 'email';
const PHONE_FIELD = 'phone';
const PATIENTS_FIELD = 'Patients';
const NAME_FIELD = 'name';
const LASTNAME_FIELD = 'lastname';
const MEDICATION_STR = 'medication_str';
const P_TAG_OPEN_TAG = '<p>';
const P_TAG_CLOSE_TAG = '</p>';
const BR_TAG = '</br>';
private $inputArray;
private $emailBody;
public function setBody($inputArray) {
$this->inputArray = $inputArray;
}
public function getHtmlBody() {
return $this->emailBody;
}
public function generateHtmlBody() {
$this->emailBody = "";
$this->emailBody .= $this->pTag(self::EMAIL_FIELD . ": " . $this->inputArray[self::EMAIL_FIELD]);
$this->emailBody .= $this->pTag(self::PHONE_FIELD . ": " . $this->inputArray[self::PHONE_FIELD]);
$this->emailBody .= self::BR_TAG;
$this->emailBody .= $this->pTag(self::PATIENTS_FIELD);
foreach ($this->inputArray[self::PATIENTS_FIELD] as $key => $value) {
$this->emailBody .= $this->pTag($key . " -");
$this->emailBody .= $this->pTag(self::NAME_FIELD . ": " . $value[self::NAME_FIELD]);
$this->emailBody .= $this->pTag(self::LASTNAME_FIELD . ": " . $value[self::LASTNAME_FIELD]);
$this->emailBody .= $this->pTag(self::MEDICATION_STR . ": " . $value[self::MEDICATION_STR]);
$this->emailBody .= self::BR_TAG;
}
}
private function pTag($input) {
return self::P_TAG_OPEN_TAG . $input . self::P_TAG_CLOSE_TAG;
}
}
$arrayBody = array (
'email' => 'xxx@gmail.com',
'phone' => '123123',
'Patients' =>
array (
0 =>
array (
'name' => 'xxx',
'lastname' => 'xxxx',
'medication_str' => '12312312',
),
1 =>
array (
'name' => '123',
'lastname' => '123',
'medication_str' => '123',
),
),
);
$emailGenerator = new EmailGenerator;
$emailGenerator->setBody($arrayBody);
$emailGenerator->generateHtmlBody();
echo $emailGenerator->getHtmlBody();
И результат таков
email: xxx@gmail.com
phone: 123123
Patients
0 -
name: xxx
lastname: xxxx
medication_str: 12312312
1 -
name: 123
lastname: 123
medication_str: 123
Я надеюсь, что это полезно. 🙂