如何通过使用默认情况下已在数据库中设置的值来防止“未定义的索引”?
How do I prevent `undefined index` by using values already set in a database by default?
我正在为我的网站开发一个管理面板,它将更改网站设置。一切都按照预期的方式工作,除了我在提交一些值时收到的 PHP 警告的数量。我收到错误 undefined index
。我知道您可以使用 isset()
,但在我的情况下,那会非常混乱。如果未设置我的值,我将如何使用数据库中的值作为默认值?
我的代码:
<?php
if(!empty($_POST)) {
$_POST['cms_and_posting'] = (bool) $_POST['cms_and_posting'];
$_POST['google_verify'] = (bool) $_POST['google_verify'];
}
?>
我听说过 PHP 中的“null-coalescing-operator”,但我对如何在我的代码中使用它感到有点困惑。
你有一系列来自数据库的设置,所以我想你有类似的东西
$options['cms_and_posting'] = 1;
然后您可以使用 foreach()
:
foreach (array_keys($options) as $key) {
if (array_key_exists($key, $_POST)) {
$options[$key] = $_POST[$key];
}
}
请注意,在这里,您没有检查值是什么。通常你的配置 table 会像
varname varvalue vartype varregex varcomment
cms_and_posting 1 bool ^[01]$ Option
google_verify 1 bool ^[01]$ Option
user_email lserni@gmail.com email NULL Admin Email
pagesize 50 int ^\d+$ Rows per page
...
你仍然会 运行 一个 foreach
循环,使用 filter functions 适当地验证每个条目:
switch($option['vartype']) {
case 'bool':
if (in_array($value, [ '1', 'Y', 'y', 'YES', 'ON', 1 ], true)) {
$value = true;
} else if (in_array($value, [ '0', 'N', 'n', 'NO', 'OFF', 0 ], true)) {
$value = false;
} else {
throw new \Exception("{$value} is not a valid boolean");
}
break;
case 'email':
...
您可以使用空合并运算符。
<?php
if(!empty($_POST)) {
$_POST['cms_and_posting'] = $_POST['cms_and_posting'] ?? $youdbvalue1;
$_POST['google_verify'] = $_POST['google_verify'] ?? $youdbvalue2;
}
?>
我正在为我的网站开发一个管理面板,它将更改网站设置。一切都按照预期的方式工作,除了我在提交一些值时收到的 PHP 警告的数量。我收到错误 undefined index
。我知道您可以使用 isset()
,但在我的情况下,那会非常混乱。如果未设置我的值,我将如何使用数据库中的值作为默认值?
我的代码:
<?php
if(!empty($_POST)) {
$_POST['cms_and_posting'] = (bool) $_POST['cms_and_posting'];
$_POST['google_verify'] = (bool) $_POST['google_verify'];
}
?>
我听说过 PHP 中的“null-coalescing-operator”,但我对如何在我的代码中使用它感到有点困惑。
你有一系列来自数据库的设置,所以我想你有类似的东西
$options['cms_and_posting'] = 1;
然后您可以使用 foreach()
:
foreach (array_keys($options) as $key) {
if (array_key_exists($key, $_POST)) {
$options[$key] = $_POST[$key];
}
}
请注意,在这里,您没有检查值是什么。通常你的配置 table 会像
varname varvalue vartype varregex varcomment
cms_and_posting 1 bool ^[01]$ Option
google_verify 1 bool ^[01]$ Option
user_email lserni@gmail.com email NULL Admin Email
pagesize 50 int ^\d+$ Rows per page
...
你仍然会 运行 一个 foreach
循环,使用 filter functions 适当地验证每个条目:
switch($option['vartype']) {
case 'bool':
if (in_array($value, [ '1', 'Y', 'y', 'YES', 'ON', 1 ], true)) {
$value = true;
} else if (in_array($value, [ '0', 'N', 'n', 'NO', 'OFF', 0 ], true)) {
$value = false;
} else {
throw new \Exception("{$value} is not a valid boolean");
}
break;
case 'email':
...
您可以使用空合并运算符。
<?php
if(!empty($_POST)) {
$_POST['cms_and_posting'] = $_POST['cms_and_posting'] ?? $youdbvalue1;
$_POST['google_verify'] = $_POST['google_verify'] ?? $youdbvalue2;
}
?>