如何通过默认使用已在数据库中设置的值来防止“未定义索引”? [复制]
Posted
技术标签:
【中文标题】如何通过默认使用已在数据库中设置的值来防止“未定义索引”? [复制]【英文标题】:How do I prevent `undefined index` by using values already set in a database by default? [duplicate] 【发布时间】:2021-01-14 06:46:23 【问题描述】:我正在为我的网站创建一个管理面板,该面板将更改网站设置。除了提交一些值时我收到的 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”的东西,但我对如何在我的代码中使用它感到有些困惑。
【问题讨论】:
听说过“null coalescing operator”吗? @mickmackusa 我没有,请给我更多信息。 @mickmackusa 你能否根据我上面的代码给我一个例子? 我觉得你的问题不清楚。我在我的手机上。 (因为现在是凌晨 3 点,我要回去睡觉了)我不知道你提到的数字是哪几行。请阅读如何发布minimal reproducible example。 您可以使用默认值预先填充 html 表单。但如果该字段可以是可选的,则需要使用 isset()。就是这样。 【参考方案1】:您可以使用空合并运算符。
<?php
if(!empty($_POST))
$_POST['cms_and_posting'] = $_POST['cms_and_posting'] ?? $youdbvalue1;
$_POST['google_verify'] = $_POST['google_verify'] ?? $youdbvalue2;
?>
【讨论】:
在这种情况下为什么不能使用 (bool)? @lucas 当一个页面可以通过引用预先存在的页面来解决时,请投票关闭而不是回答。这样 Stack Overflow 就不需要存储多余的页面了。【参考方案2】:你有一系列来自数据库的设置,所以我认为你有类似的东西
$options['cms_and_posting'] = 1;
然后你可以使用foreach()
:
foreach (array_keys($options) as $key)
if (array_key_exists($key, $_POST))
$options[$key] = $_POST[$key];
请注意,在这里,您无法检查值是什么。通常你的配置表会是这样的
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':
...
【讨论】:
请帮我解决这个问题。 ***.com/questions/64081641/…以上是关于如何通过默认使用已在数据库中设置的值来防止“未定义索引”? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何以编程方式连接到已在 Android 手机中设置的 ***