将表单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即可。