Multiform parsing

Fixed on parsing array

Change-Id: If9cbc8561dabaf4836fe5bb0ea7b9449269e7269
Signed-off-by: smarcet <smarcet@gmail.com>
This commit is contained in:
smarcet 2021-04-19 15:02:26 -03:00
parent 7ee6777f60
commit 2dd658c778
2 changed files with 54 additions and 1 deletions

View File

@ -108,7 +108,10 @@ final class ParseMultiPartFormDataInputStream
$block = $this->decide($value);
foreach ($block['parameters'] as $key => $val ) {
$results['parameters'][$key] = $val;
if(key_exists($key, $results['parameters']) && is_array($results['parameters'][$key] ) && is_array($val))
$results['parameters'][$key] = array_merge($results['parameters'][$key], $val);
else
$results['parameters'][$key] = $val;
}
foreach ( $block['files'] as $key => $val ) {
@ -245,6 +248,8 @@ final class ParseMultiPartFormDataInputStream
$val = intval($val);
if(!empty($val) && is_double($val))
$val = doubleval($val);
if(!empty($val) && is_numeric($val))
$val = $val + 0;
if (preg_match('/^(.*)\[\]$/i', $match[1], $tmp)) {
$data[$tmp[1]][] = $val;
} else {

View File

@ -81,4 +81,52 @@ DATA;
$this->assertTrue(count($res['parameters']) > 0);
}
public function testArray(){
$input = <<<DATA
------WebKitFormBoundaryt61VjbNKJb4PiKXk
Content-Disposition: form-data; name="name"
ncode
------WebKitFormBoundaryt61VjbNKJb4PiKXk
Content-Disposition: form-data; name="label"
Code
------WebKitFormBoundaryt61VjbNKJb4PiKXk
Content-Disposition: form-data; name="description"
ndndnllll
------WebKitFormBoundaryt61VjbNKJb4PiKXk
Content-Disposition: form-data; name="file_preview"
------WebKitFormBoundaryt61VjbNKJb4PiKXk
Content-Disposition: form-data; name="summit_id"
6
------WebKitFormBoundaryt61VjbNKJb4PiKXk
Content-Disposition: form-data; name="event_types[]"
56
------WebKitFormBoundaryt61VjbNKJb4PiKXk
Content-Disposition: form-data; name="event_types[]"
59
------WebKitFormBoundaryt61VjbNKJb4PiKXk
Content-Disposition: form-data; name="event_types[]"
58
------WebKitFormBoundaryt61VjbNKJb4PiKXk--
DATA;
$_SERVER['CONTENT_TYPE'] = 'multipart/form-data; boundary=----WebKitFormBoundaryt61VjbNKJb4PiKXk';
$parser = new \utils\ParseMultiPartFormDataInputStream($input);
$res = $parser->getInput();
$this->assertTrue(isset($res['parameters']));
$parameters = $res['parameters'];
$this->assertTrue(count($parameters) > 0);
$this->assertTrue(isset($parameters['event_types']));
$this->assertTrue(count($parameters['event_types']) == 3);
}
}