如何从 POST 的字符串中提取变量?

问题描述 投票:0回答:2

第一次带着问题来到这里,但我被困住了,无法弄清楚这一点。如有任何帮助,我们将不胜感激。

我正在发送一个以“###”分隔的字符串作为“有效负载”。我想将字符串解析为数组以获取单独的数据字符串。然后,我想循环遍历各个字符串以提取变量,以便可以在数据库中输入。我不确定最好的方法,我一直在测试不同的方法,或者获取空字符串响应,或者状态 500 代码。

这是我从 POST 发送的示例“有效负载”字符串:

key=03968db0386af63d57f48e8cbfd16971&name=LE%252520Tropical%252520Tuffet%252520%25252D%252520Luau&type=Pot%2520with%2520Plant###key=239fa7207c241d8a55743d9988839055&name=Modern%252520Oasis%252520Philodendron%252520Pot%252520%25252D%252520Pink%252520Swirls&type=Pot%2520with%2520Plant
<?php
$payload = $_POST['payload'];
$records = implode("\n", $payload);
foreach($records as $record){
    list($key,$name,$type) = explode("###", $record);
    echo $key;
}
?>

我期望从 POST 接收有效负载,使用“###”分隔符解析每个记录的单个字符串,从单个字符串中提取密钥、名称和类型,以便我可以使用 mysqli 添加到我的数据库。因此,数据库中的每个条目都会有一个主键标识符和每个键的统计信息。

谢谢你

php parsing post foreach
2个回答
0
投票

看起来您应该使用

###
创建查询字符串数组。然后你可以使用
parse_str()
将每个
name=value
参数解析为变量。

$payload = $_POST['payload'];
$records = explode('###', $payload);
foreach ($records as $record) {
    parse_str($record, $vars);
    ['key' => $key, 'name' => $name, 'type' => $type] = $vars;
    echo $key;
}

0
投票

您需要在

###
处分割为一个部分。然后你可以解析 URL 内容并使用 parse_str() 来解析它。最后一步是解码 URL 编码值。

$payload = 'key=03968db0386af63d57f48e8cbfd16971&name=LE%252520Tropical%252520Tuffet%252520%25252D%252520Luau&type=Pot%2520with%2520Plant###key=239fa7207c241d8a55743d9988839055&name=Modern%252520Oasis%252520Philodendron%252520Pot%252520%25252D%252520Pink%252520Swirls&type=Pot%2520with%2520Plant';
foreach (explode('###', $payload) as $section) {
    parse_str(rawurldecode($section), $output);
    $decoded = array_map('urldecode', $output);
    var_dump($decoded);
}

给你两个数组

array(3) {
  'key' =>
  string(32) "03968db0386af63d57f48e8cbfd16971"
  'name' =>
  string(25) "LE Tropical Tuffet - Luau"
  'type' =>
  string(14) "Pot with Plant"
}

array(3) {
  'key' =>
  string(32) "239fa7207c241d8a55743d9988839055"
  'name' =>
  string(43) "Modern Oasis Philodendron Pot - Pink Swirls"
  'type' =>
  string(14) "Pot with Plant"
}
© www.soinside.com 2019 - 2024. All rights reserved.