【问题标题】:Get Form Array and Send to email获取表单数组并发送到电子邮件
【发布时间】:2017-08-08 15:54:57
【问题描述】:

所以我还在学习 PHP,我有一个包含 4 个数组的表单。我正在尝试将阵列与其他一些信息一起发送到我的电子邮件中。我不断收到的电子邮件说“数组,数组”(然后其余信息正确显示)。我无法弄清楚我错过了什么。

我可以让家长信息正确显示,但我一直坚持让孩子信息翻译成电子邮件。

if (isset($_POST['submit'])){
    // Parent Info
    $pFname = mysql_escape_string($_POST['pFname']);
    $pLname = mysql_escape_string($_POST['pLname']);
    $email = mysql_escape_string($_POST['pEmail']);
    $street = mysql_escape_string($_POST['street']);
    $city = mysql_escape_string($_POST['city']);
    $state = mysql_escape_string($_POST['state']);
    $zip = mysql_escape_string($_POST['zip']);

    // Child Info
    $name = mysql_escape_string($_POST['Name']);
    $birthday = mysql_escape_string($_POST['Birthday']);
    $gender = mysql_escape_string($_POST['Gender']);
    $rel = mysql_escape_string($_POST['Rel']);

    $msg1 = "From: " . ' ' . $pFname . ' ' . $pLname  . ' ' . ' ' . $pEmail 
    . ' ' . ' ';

    foreach ($_POST['Name'] as $names){
        $name = $names;
    }

    foreach ($_POST['Birthday'] as $birthdays){
        $birthday = $birthdays;
    }

    foreach ($_POST['Gender'] as $genders){
        $gender = $genders;
    }

    foreach ($_POST['Rel'] as $rels) {
        $rel = $rels;
    }

    $msg = "Name: " . " " . $name . " - " . $gender .  "Birthday: " . 
     $birthday . " " . "Relationship: " . $rel . "\n\r";

    $to = 'joe@joe.com;
    $subject = 'Birthday Club Application';
    $msg = $msg . "\r\n";
    $msg .= "First Name: " . $pFname . "\r\n";
    $msg .= "Last Name: " . $pLname . "\r\n";
    $msg .= "Email: " . $email . "\r\n";
    $msg .= "Street: " . $street . "\r\n";
    $msg .= "City: " . $city . "\r\n";
    $msg .= "State: " . $state . "\r\n";
    $msg .= "Zip: " . $zip . "\r\n";

    $headers = 'From: ' . $pEmail . "\r\n";
    $headers1 = 'From: mycompany.com';
    /*$goto_after_mail = "birthdayClub.php";*/

    mail($to, $subject, $msg, $msg1, $headers);

    header("Location: " . $goto_after_mail);
}

这是 HTML:

<form id="parent-info" method="post" action="<?php echo 
 htmlspecialchars($_SERVER[" PHP_SELF "])?>">

    <h1>Guardian Information</h1>
    <h4>*All fields required*</h4>

    <input type="text" name="pFname" class="parent-entry" placeholder="First Name:" >

    <input type="text" name="pLname" class="parent-entry" placeholder="Last Name:" >

    <input type="text" name="pEmail" class="parent-entry" placeholder="Email:" >

    <input type="text" name="street" class="parent-entry" placeholder="Street Address:" >

    <input type="text" name="city" class="parent-entry" placeholder="City:" >

    <input type="text" name="state" class="parent-entry" placeholder="State:" >

    <input type="text" name="zip" class="parent-entry" placeholder="Zip Code:" >
    <br>

    <h2>Child Information</h2>
    <h4>*All fields required*</h4>

    <div class="child-form">

        <input type="text" name="Name[]" placeholder="Childs Name:" class="parent-entry" value " "; >

        <input type="text" name="Gender[]" placeholder="Gender:" class="parent-entry" value " ";>

        <input type="text" name="Birthday[]" placeholder="Ex: 1/1/01:" class="parent-entry" value " "; >

        <input type="text" name="Rel[]" placeholder="Relation to child:" class="parent-entry" value " ";>

    </div>

【问题讨论】:

  • 你应该在$to = 'joe@joe.com;的行上有一个结束撇号
  • mysql_escape_string 转义字符串 $_POST['Name'] 不是字符串 我什至不知道你为什么要使用这个函数。
  • 想说同样的话@u_mulder
  • 你这里有语法错误$to = 'joe@joe.com;,忘记了结束单引号。
  • PHP 的任何数组的字符串表示形式都是字符串Array,不管数组中有什么。因此,任何时候当你期望看到一些不同的文本时,这意味着你试图打印出一个你认为是字符串的数组。

标签: php arrays forms


【解决方案1】:
 foreach ($_POST['Name'] as $names)

这一行表明$_POST['Name'] 是一个数组。如果是这种情况,您将遇到此行的问题:

$name = mysql_escape_string($_POST['Name']);

该函数需要一个字符串。当你给它一个数组时,它会将它转换为字符串“Array”。这同样适用于所有子数组。你在数组上使用mysql_escape_string

由于您似乎有一组孩子,您想要做的是循环遍历该数组并获取每个孩子的信息以添加到电子邮件中。

如果您不想遍历所有这些数组,另一种选择是使用print_r 函数,并将其第二个可选参数设置为true。这会将数组转换为用户可读的字符串。

改变

$name = mysql_escape_string($_POST['Name']);

收件人:

$name = print_r($_POST['Name'], true);

Live demo

【讨论】:

  • 好的,所以我从 $_POST 变量中删除了 mysql_escape_string。语法错误只是复制到这里的错误。我想遍历每个孩子的信息并添加到电子邮件中,但这就是我卡住的地方。我大约 99% 确信我可以使用 foreach 循环,但正如我所说,我仍在学习 PHP,并且 foreach 循环现在让我很适合。
  • @OrangeFreak 仍然没有找到问题的根源。当您执行"Name: " . $name 时,您正试图在字符串中包含一个数组。它只会打印“数组”。我为您提供了两种方法,您可以使用这些方法将数组中的值作为字符串获取。
  • 我对变量提出了正确的建议。它仍在向我发送“数组”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-02
  • 2014-03-22
  • 1970-01-01
  • 1970-01-01
  • 2018-06-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多