将表单PHP变量传递给JSON编码

将表单PHP变量传递给JSON编码,php,json,encode,sendgrid,Php,Json,Encode,Sendgrid,我有一个包含以下值的表单: $firstName = strip_tags(trim($_POST['first-name'])); $lastName = strip_tags(trim($_POST['last-name'])); $email = filter_var(trim($_POST['user-email']),FILTER_SANITIZE_EMAIL); 我正试图将这些值传递给此: $request_body = json_decode('[

我有一个包含以下值的表单:

    $firstName = strip_tags(trim($_POST['first-name']));
    $lastName = strip_tags(trim($_POST['last-name']));
    $email = filter_var(trim($_POST['user-email']),FILTER_SANITIZE_EMAIL);
我正试图将这些值传递给此:

    $request_body = json_decode('[{
        "first_name" : "Tom",
        "last_name" : "Hanks",
        "email" : "example@gmail.com"
    }]');
尝试将表单值保存到数组中,并将其传递到json_decode,其中$userArray是表单值,但未执行。例如:

$request_body = json_decode($userArray, true);
所有这些都是为了将这些表单值传递到API(SendGrid)中,但这对我来说不起作用,而且它们的文档也不是很有描述性。我猜他们想要一个特定的请求格式。下面是Github页面中的请求主体示例。我可以将这些值硬编码进来,它工作得很好,但是这个想法是让表单自动传递这些用户名和电子邮件值

$request_body = json_decode('[
  {
    "age": 25, 
    "email": "example@example.com", 
    "first_name": "", 
    "last_name": "User"
  }, 
  {
    "age": 25, 
    "email": "example2@example.com", 
    "first_name": "Example", 
    "last_name": "User"
  }
]');

知道我做错了什么吗?谢谢

我认为您在使用
json\u decode()
json\u encode()
时可能会有点困惑

json\u encode()
将PHP数组编码为json数组。 而
json\u decode()
将json数组解码回PHP数组

就您的情况而言,以下内容应产生相同的输出:

$array = array(
    "first_name" => "Tom",
    "last_name" => "Hanks",
    "email" => "example@gmail.com"
);

echo json_encode($array);
产生:

{“名字”:“汤姆”,“姓氏”:“汉克斯”,“电子邮件”:example@gmail.com“}

使用这些函数构建数组,然后对JSON进行编码/解码,这比手动创建JSON数组要好得多。因为这样可以避免您可能创建的任何语法错误


希望这能有所帮助。

您发送邮件的方式:

$array[0]['email'] = filter_var(trim($_POST['user-email']),FILTER_SANITIZE_EMAIL);
$array[0]['first_name'] = strip_tags(trim($_POST['first-name']));
$array[0]['last_name'] = strip_tags(trim($_POST['last-name']));

echo json_encode($array);
结果:

[{"email":"john.doe@exemple.com","first_name":"John","last_name":"Doe"}]
[0]可能是一个问题,它在读取json_解码输出时生成“[”“]”,并在使用json_解码解码时复制完全相同的数组

因此,如果他们的脚本正在寻找整数作为键,如果您省略[0],他们将得到以下格式的数组$array['email']等。这可能是一个问题

如果您希望在循环中复制该内容并一次发送多个条目

你可以这样写:

$array[] = array('email' => filter_var(trim($_POST['user-email']),FILTER_SANITIZE_EMAIL),
                 'first_name' => strip_tags(trim($_POST['first-name'])),
                 'last_name' => strip_tags(trim($_POST['last-name']))
);

你仍然会错过“年龄”。确保它不是必填字段

sendgrid api接受json编码的字符串吗?我尝试过使用json_编码,但对我来说也不起作用。这也是你所指的吗?是的,这就是我所说的,但它返回一个错误{“errors”:[{“message”:“request body Is invalid”}}}有可能
$\u POST
变量没有值吗?当我回显它们的示例请求时,它看起来是这样的:数组(1){[0]=>object(stdClass)#8(3){[“first_name”]=>string(3)“Tom”[“姓氏”]=>string(5)“汉克斯”[“电子邮件”]=>string(19)”example@example.com“}}我提供的代码片段就是这样做的,如果你愿意发布Tom、Hanks和example@example.com对于您的脚本,它应该输出与您在此处发送的内容完全相同的内容。因此,您是否可以验证您在post请求(var_dump($_post))中获得了所有内容然后检查数组中的数据是否正确(var_dump($request_body))。是否将请求作为POST发送到“request_body”中的“$url/contactdb/recipients”属性?实际上,您的解决方案可能会起作用,如果一切正常,将进行一点测试并标记为已解决。由于ScottSmudger的澄清,我最终跳过了json编码部分。这是可行的,但根本不需要使用json_编码,只需传入$array和presto即可。