CodeIgniter Forums
TypeError after POST - Printable Version

+- CodeIgniter Forums (https://forum.codeigniter.com)
+-- Forum: CodeIgniter 4 (https://forum.codeigniter.com/forumdisplay.php?fid=28)
+--- Forum: CodeIgniter 4 Support (https://forum.codeigniter.com/forumdisplay.php?fid=30)
+--- Thread: TypeError after POST (/showthread.php?tid=86535)

Pages: 1 2


TypeError after POST - piieerre - 01-31-2023

Hello everyone

I encounter an error after submitting a form (POST).

My CI version: 4.3.1
PHP version: 8.2.1

Here is the error:


TypeError
date(): Argument #2 ($timestamp) must be of type ?int, bool given
SYSTEMPATH/ThirdParty/Kint/Zval/Representation/SplFileInfoRepresentation.php at line 186
Code:
179         return null;
180     }
181
182     public function getMTime(): ?string
183     {
184         if (null !== $this->mtime) {
185
186             $year = \date('Y', $this->mtime);
187
188             if ($year !== \date('Y')) {
189                 return \date('M d Y', $this->mtime);
190             }
191
192             return \date('M d H:i', $this->mtime);
193         }
  1. SYSTEMPATH/ThirdParty/Kint/Zval/Representation/SplFileInfoRepresentation.php : 186   —   date()
  2. SYSTEMPATH/ThirdParty/Kint/Zval/Representation/SplFileInfoRepresentation.php : 151   —  Kint\Zval\Representation\SplFileInfoRepresentation->getMTime ()
    Code:
    144         if ($this->perms & 0001) {
    145             $this->flags[] = ($this->perms & 01000) ? 's' : 'x';
    146         } else {
    147             $this->flags[] = ($this->perms & 01000) ? 'S' : '-';
    148         }
    149
    150         $this->contents = \implode($this->flags).' '.$this->owner.' '.$this->group;
    151         $this->contents .= ' '.$this->getSize().' '.$this->getMTime().' ';
    152
    153         if ($this->is_link && $this->linktarget) {
    154             $this->contents .= $this->path.' -> '.$this->linktarget;
    155         } elseif (null !== $this->realpath && \strlen($this->realpath) < \strlen($this->path)) {
    156             $this->contents .= $this->realpath;
    157         } else {
    158             $this->contents .= $this->path;
  3. SYSTEMPATH/ThirdParty/Kint/Parser/SplFileInfoPlugin.php : 53   —  Kint\Zval\Representation\SplFileInfoRepresentation->__construct ()
    Code:
    46
    47     public function parse(&$var, Value &$o, int $trigger): void
    48     {
    49         if (!$var instanceof SplFileInfo || $var instanceof SplFileObject) {
    50             return;
    51         }
    52
    53         $r = new SplFileInfoRepresentation(clone $var);
    54         $o->addRepresentation($r, 0);
    55         $o->size = $r->getSize();
    56     }
    57 }
    58
  4. SYSTEMPATH/ThirdParty/Kint/Parser/Parser.php : 632   —  Kint\Parser\SplFileInfoPlugin->parse ()
    Code:
    625
    626         if (isset($this->plugins[$o->type][$trigger])) {
    627             $plugins = $this->plugins[$o->type][$trigger];
    628         }
    629
    630         foreach ($plugins as $plugin) {
    631             try {
    632                 $plugin->parse($var, $o, $trigger);
    633             } catch (Exception $e) {
    634                 \trigger_error(
    635                     'An exception ('.\get_class($e).') was thrown in '.$e->getFile().' on line '.$e->getLine().' while executing Kint Parser Plugin "'.\get_class($plugin).'". Error message: '.$e->getMessage(),
    636                     E_USER_WARNING
    637                 );
    638             }
    639
  5. SYSTEMPATH/ThirdParty/Kint/Parser/Parser.php : 427   —  Kint\Parser\Parser->applyPlugins ()
    Code:
    420         }
    421
    422         $this->object_hashes[$hash] = $object;
    423
    424         if ($this->depth_limit && $o->depth >= $this->depth_limit) {
    425             $object->hints[] = 'depth_limit';
    426
    427             $this->applyPlugins($var, $object, self::TRIGGER_DEPTH_LIMIT);
    428             unset($this->object_hashes[$hash]);
    429
    430             return $object;
    431         }
    432
    433         $reflector = new ReflectionObject($var);
    434
  6. SYSTEMPATH/ThirdParty/Kint/Parser/Parser.php : 138   —  Kint\Parser\Parser->parseObject ()
    Code:
    131                 return $this->parseArray($var, $o);
    132             case 'boolean':
    133             case 'double':
    134             case 'integer':
    135             case 'null':
    136                 return $this->parseGeneric($var, $o);
    137             case 'object':
    138                 return $this->parseObject($var, $o);
    139             case 'resource':
    140                 return $this->parseResource($var, $o);
    141             case 'string':
    142                 return $this->parseString($var, $o);
    143             case 'unknown type':
    144             case 'resource (closed)':
    145             default:
  7. SYSTEMPATH/ThirdParty/Kint/Parser/Parser.php : 383   —  Kint\Parser\Parser->parse ()
    Code:
    376             $stash = $val;
    377             $copy[$i] = $refmarker;
    378             if ($val === $refmarker) {
    379                 $child->reference = true;
    380                 $val = $stash;
    381             }
    382
    383             $rep->contents[] = $this->parse($val, $child);
    384             ++$i;
    385         }
    386
    387         $this->applyPlugins($var, $array, self::TRIGGER_SUCCESS);
    388         unset($var[$this->marker]);
    389
    390         return $array;
  8. SYSTEMPATH/ThirdParty/Kint/Parser/Parser.php : 131   —  Kint\Parser\Parser->parseArray ()
    Code:
    124
    125         if (!$this->applyPlugins($var, $o, self::TRIGGER_BEGIN)) {
    126             return $o;
    127         }
    128
    129         switch ($o->type) {
    130             case 'array':
    131                 return $this->parseArray($var, $o);
    132             case 'boolean':
    133             case 'double':
    134             case 'integer':
    135             case 'null':
    136                 return $this->parseGeneric($var, $o);
    137             case 'object':
    138                 return $this->parseObject($var, $o);
  9. SYSTEMPATH/ThirdParty/Kint/Parser/Parser.php : 565   —  Kint\Parser\Parser->parse ()
    Code:
    558                 $child->reference = true;
    559             }
    560             if ($val === $refmarker) {
    561                 $child->reference = true;
    562                 $val = $stash;
    563             }
    564
    565             $rep->contents[] = $this->parse($val, $child);
    566             ++$i;
    567         }
    568
    569         $object->addRepresentation($rep);
    570         $object->value = $rep;
    571         $this->applyPlugins($var, $object, self::TRIGGER_SUCCESS);
    572         unset($this->object_hashes[$hash]);
  10. SYSTEMPATH/ThirdParty/Kint/Parser/Parser.php : 138   —  Kint\Parser\Parser->parseObject ()
    Code:
    131                 return $this->parseArray($var, $o);
    132             case 'boolean':
    133             case 'double':
    134             case 'integer':
    135             case 'null':
    136                 return $this->parseGeneric($var, $o);
    137             case 'object':
    138                 return $this->parseObject($var, $o);
    139             case 'resource':
    140                 return $this->parseResource($var, $o);
    141             case 'string':
    142                 return $this->parseString($var, $o);
    143             case 'unknown type':
    144             case 'resource (closed)':
    145             default:
  11. SYSTEMPATH/ThirdParty/Kint/Parser/Parser.php : 565   —  Kint\Parser\Parser->parse ()
    Code:
    558                 $child->reference = true;
    559             }
    560             if ($val === $refmarker) {
    561                 $child->reference = true;
    562                 $val = $stash;
    563             }
    564
    565             $rep->contents[] = $this->parse($val, $child);
    566             ++$i;
    567         }
    568
    569         $object->addRepresentation($rep);
    570         $object->value = $rep;
    571         $this->applyPlugins($var, $object, self::TRIGGER_SUCCESS);
    572         unset($this->object_hashes[$hash]);
  12. SYSTEMPATH/ThirdParty/Kint/Parser/Parser.php : 138   —  Kint\Parser\Parser->parseObject ()
    Code:
    131                 return $this->parseArray($var, $o);
    132             case 'boolean':
    133             case 'double':
    134             case 'integer':
    135             case 'null':
    136                 return $this->parseGeneric($var, $o);
    137             case 'object':
    138                 return $this->parseObject($var, $o);
    139             case 'resource':
    140                 return $this->parseResource($var, $o);
    141             case 'string':
    142                 return $this->parseString($var, $o);
    143             case 'unknown type':
    144             case 'resource (closed)':
    145             default:
  13. SYSTEMPATH/ThirdParty/Kint/Parser/Parser.php : 565   —  Kint\Parser\Parser->parse ()
    Code:
    558                 $child->reference = true;
    559             }
    560             if ($val === $refmarker) {
    561                 $child->reference = true;
    562                 $val = $stash;
    563             }
    564
    565             $rep->contents[] = $this->parse($val, $child);
    566             ++$i;
    567         }
    568
    569         $object->addRepresentation($rep);
    570         $object->value = $rep;
    571         $this->applyPlugins($var, $object, self::TRIGGER_SUCCESS);
    572         unset($this->object_hashes[$hash]);
  14. SYSTEMPATH/ThirdParty/Kint/Parser/Parser.php : 138   —  Kint\Parser\Parser->parseObject ()
    Code:
    131                 return $this->parseArray($var, $o);
    132             case 'boolean':
    133             case 'double':
    134             case 'integer':
    135             case 'null':
    136                 return $this->parseGeneric($var, $o);
    137             case 'object':
    138                 return $this->parseObject($var, $o);
    139             case 'resource':
    140                 return $this->parseResource($var, $o);
    141             case 'string':
    142                 return $this->parseString($var, $o);
    143             case 'unknown type':
    144             case 'resource (closed)':
    145             default:
  15. SYSTEMPATH/ThirdParty/Kint/Parser/Parser.php : 383   —  Kint\Parser\Parser->parse ()
    Code:
    376             $stash = $val;
    377             $copy[$i] = $refmarker;
    378             if ($val === $refmarker) {
    379                 $child->reference = true;
    380                 $val = $stash;
    381             }
    382
    383             $rep->contents[] = $this->parse($val, $child);
    384             ++$i;
    385         }
    386
    387         $this->applyPlugins($var, $array, self::TRIGGER_SUCCESS);
    388         unset($var[$this->marker]);
    389
    390         return $array;
  16. SYSTEMPATH/ThirdParty/Kint/Parser/Parser.php : 131   —  Kint\Parser\Parser->parseArray ()
    Code:
    124
    125         if (!$this->applyPlugins($var, $o, self::TRIGGER_BEGIN)) {
    126             return $o;
    127         }
    128
    129         switch ($o->type) {
    130             case 'array':
    131                 return $this->parseArray($var, $o);
    132             case 'boolean':
    133             case 'double':
    134             case 'integer':
    135             case 'null':
    136                 return $this->parseGeneric($var, $o);
    137             case 'object':
    138                 return $this->parseObject($var, $o);
  17. SYSTEMPATH/ThirdParty/Kint/Parser/Parser.php : 565   —  Kint\Parser\Parser->parse ()
    Code:
    558                 $child->reference = true;
    559             }
    560             if ($val === $refmarker) {
    561                 $child->reference = true;
    562                 $val = $stash;
    563             }
    564
    565             $rep->contents[] = $this->parse($val, $child);
    566             ++$i;
    567         }
    568
    569         $object->addRepresentation($rep);
    570         $object->value = $rep;
    571         $this->applyPlugins($var, $object, self::TRIGGER_SUCCESS);
    572         unset($this->object_hashes[$hash]);
  18. SYSTEMPATH/ThirdParty/Kint/Parser/Parser.php : 138   —  Kint\Parser\Parser->parseObject ()
    Code:
    131                 return $this->parseArray($var, $o);
    132             case 'boolean':
    133             case 'double':
    134             case 'integer':
    135             case 'null':
    136                 return $this->parseGeneric($var, $o);
    137             case 'object':
    138                 return $this->parseObject($var, $o);
    139             case 'resource':
    140                 return $this->parseResource($var, $o);
    141             case 'string':
    142                 return $this->parseString($var, $o);
    143             case 'unknown type':
    144             case 'resource (closed)':
    145             default:
  19. SYSTEMPATH/ThirdParty/Kint/Kint.php : 285   —  Kint\Parser\Parser->parse ()
    Code:
    278      *
    279      * @param mixed &$var Data to dump
    280      * @param Value $base Base object
    281      */
    282     protected function dumpVar(&$var, Value $base): string
    283     {
    284         return $this->renderer->render(
    285             $this->parser->parse($var, $base)
    286         );
    287     }
    288
    289     /**
    290      * Gets all static settings at once.
    291      *
    292      * @return array Current static settings
  20. SYSTEMPATH/ThirdParty/Kint/Kint.php : 268   —  Kint\Kint->dumpVar ()
    Code:
    261             $output .= $this->renderer->renderNothing();
    262         }
    263
    264         foreach ($vars as $key => $arg) {
    265             if (!$base[$key] instanceof Value) {
    266                 throw new InvalidArgumentException('Kint::dumpAll requires all elements of the second argument to be Value instances');
    267             }
    268             $output .= $this->dumpVar($arg, $base[$key]);
    269         }
    270
    271         $output .= $this->renderer->postRender();
    272
    273         return $output;
    274     }
    275
  21. SYSTEMPATH/ThirdParty/Kint/Kint.php : 575   —  Kint\Kint->dumpAll ()
    Code:
    568             }
    569         }
    570
    571         $kintstance->setStatesFromStatics($statics);
    572         $kintstance->setStatesFromCallInfo($call_info);
    573
    574         $bases = static::getBasesFromParamInfo($call_info['params'] ?? [], \count($args));
    575         $output = $kintstance->dumpAll(\array_values($args), $bases);
    576
    577         if (static::$return || \in_array('@', $call_info['modifiers'], true)) {
    578             return $output;
    579         }
    580
    581         echo $output;
    582
  22. SYSTEMPATH/Debug/Toolbar.php : 110   —  Kint\Kint::dump ()
    Code:
    103                     } else {
    104                         $oldKintMode       = Kint::$mode_default;
    105                         $oldKintCalledFrom = Kint::$display_called_from;
    106
    107                         Kint::$mode_default        = Kint::MODE_RICH;
    108                         Kint::$display_called_from = false;
    109
    110                         $kint = @Kint::dump($value);
    111                         $kint = substr($kint, strpos($kint, '</style>') + 8);
    112
    113                         Kint::$mode_default        = $oldKintMode;
    114                         Kint::$display_called_from = $oldKintCalledFrom;
    115
    116                         $varData[esc($key)] = $kint;
    117                     }
  23. SYSTEMPATH/Debug/Toolbar.php : 370   —  CodeIgniter\Debug\Toolbar->run ()
    Code:
    363             // Disable the toolbar for downloads
    364             if ($response instanceof DownloadResponse) {
    365                 return;
    366             }
    367
    368             $toolbar = Services::toolbar(config(self::class));
    369             $stats   = $app->getPerformanceStats();
    370             $data    = $toolbar->run(
    371                 $stats['startTime'],
    372                 $stats['totalTime'],
    373                 $request,
    374                 $response
    375             );
    376
    377             helper('filesystem');
  24. SYSTEMPATH/Filters/DebugToolbar.php : 40   —  CodeIgniter\Debug\Toolbar->prepare ()
    Code:
    33      * If the debug flag is set (CI_DEBUG) then collect performance
    34      * and debug information and display it in a toolbar.
    35      *
    36      * @param array|null $arguments
    37      */
    38     public function after(RequestInterface $request, ResponseInterface $response, $arguments = null)
    39     {
    40         Services::toolbar()->prepare($request, $response);
    41     }
    42 }
    43
  25. SYSTEMPATH/Filters/Filters.php : 196   —  CodeIgniter\Filters\DebugToolbar->after ()
    Code:
    189                     continue;
    190                 }
    191
    192                 return $result;
    193             }
    194
    195             if ($position === 'after') {
    196                 $result = $class->after($this->request, $this->response, $this->argumentsClass[$className] ?? null);
    197
    198                 if ($result instanceof ResponseInterface) {
    199                     $this->response = $result;
    200
    201                     continue;
    202                 }
    203             }
  26. SYSTEMPATH/CodeIgniter.php : 519   —  CodeIgniter\Filters\Filters->run ()
    Code:
    512             $filters->setResponse($this->response);
    513
    514             // After filter debug toolbar requires 'total_execution'.
    515             $this->totalTime = $this->benchmark->getElapsedTime('total_execution');
    516
    517             // Run "after" filters
    518             $this->benchmark->start('after_filters');
    519             $response = $filters->run($uri, 'after');
    520             $this->benchmark->stop('after_filters');
    521
    522             if ($response instanceof ResponseInterface) {
    523                 $this->response = $response;
    524             }
    525         }
    526
  27. SYSTEMPATH/CodeIgniter.php : 368   —  CodeIgniter\CodeIgniter->handleRequest ()
    Code:
    361             $this->response->send();
    362             $this->callExit(EXIT_SUCCESS);
    363
    364             return;
    365         }
    366
    367         try {
    368             return $this->handleRequest($routes, $cacheConfig, $returnResponse);
    369         } catch (RedirectException $e) {
    370             $logger = Services::logger();
    371             $logger->info('REDIRECTED ROUTE at ' . $e->getMessage());
    372
    373             // If the route is a 'redirect' route, it throws
    374             // the exception with the $to as the message
    375             $this->response->redirect(base_url($e->getMessage()), 'auto', $e->getCode());
  28. FCPATH/index.php : 67   —  CodeIgniter\CodeIgniter->run ()
    Code:
    60  *---------------------------------------------------------------
    61  * LAUNCH THE APPLICATION
    62  *---------------------------------------------------------------
    63  * Now that everything is setup, it's time to actually fire
    64  * up the engines and make this app do its thang.
    65  */
    66
    67 $app->run();



RE: TypeError after POST - superior - 01-31-2023

date(): Argument #2 ($timestamp) must be of type ?int, bool given

The error tells you already what is going on.


RE: TypeError after POST - piieerre - 01-31-2023

Yes I understand the error.
The problem is that it comes from a Codeigniter library and I don't see why...


RE: TypeError after POST - kenjis - 01-31-2023

Can you show the minimum sample code to reproduce the error?


RE: TypeError after POST - piieerre - 02-01-2023

Hello
Here is a sample code. The problem only appears when I submit the form

Code:
public function edit($id_product)
{
helper('form');

$productModel = new \App\Models\ProductModel;
$product = $productModel->find((int)$id_product);

if(!$product):
return redirect()->to('/admin_kt/products');
endif;

if($this->request->getMethod() == 'post') {

$rules = [
'nom' => 'required',
'couv' => [
'rules' => 'is_image[couv]',
'label' => 'Image',
],
];

if($this->validate($rules)){
......

}
}

$data['product'] = $productModel->find((int)$id_product);

return view('/content/edit',$data);
}

While searching a bit, I realized that the problem came from the "is_image" validation rule.
Has anyone had this problem before? Is there a solution?

Thanks


RE: TypeError after POST - kenjis - 02-01-2023

Can you find the $value value that causes the error?
in SYSTEMPATH/Debug/Toolbar.php : 110  —  Kint\Kint::dump ()

It is probably an SplFileInfo object. An uploaded file?


RE: TypeError after POST - Franck DVI - 02-01-2023

I have exactly the same problem with the same configuration.
My CI version: 4.3.1
PHP version: 8.2.1
I unlocked like this:
184 >> if (null !== $this->mtime && is_int ($this->mtime)) { // my patch
but I don't know if there are other consequences
And, yes, there is a upload in the post


RE: TypeError after POST - piieerre - 02-01-2023

Some news

I just ran some tests and here are my results:

- the problem appears when I submit a form with a form rule with "is_image" and there is no file uploaded (desired behavior, file upload is optional)
- when CI_ENVIRONMENT = development and the toolbal is activated. When I deactivate the toolbar in the configs "public bool $collectVarData = true;", the problem no longer appears!


RE: TypeError after POST - Franck DVI - 02-03-2023

why my post has been deleted. ?


RE: TypeError after POST - php_rocs - 02-03-2023

@Franck DVI , I put your post back and approve d your most recent post. We're trying to keep the spam down.