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

时间:2017-04-20 19:02:11

标签: 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('[{
        "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"
  }
]');

任何想法我做错了什么?谢谢!

2 个答案:

答案 0 :(得分:0)

我认为您在使用json_decode()json_encode()时可能会感到有些困惑。

json_encode()将PHP数组编码为JSON数组。 而json_decode()将JSON数组解码回PHP数组。

关于您的情况,以下内容应产生相同的输出:

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

echo json_encode($array);

产地:

{"first_name":"Tom","last_name":"Hanks","email":"example@gmail.com"}

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

希望这有帮助。

答案 1 :(得分:0)

您发送帖子的方式:

$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_decode输出并使用json_decode解码时重现完全相同的数组。

因此,如果他们的脚本正在寻找整数作为键,如果省略[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']))
);

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