当前位置: 首页 > 知识库问答 >
问题:

如何通过使用数据库中已经默认设置的值来防止“未定义的索引”?[重复]

鲁鸿朗
2023-03-14

我正在为我的网站工作一个管理面板,它将更改网站设置。除了提交一些值时我收到的PHP警告数之外,所有事情都按照预期的方式运行。我得到错误<code>未定义索引</code>。我知道您可以使用isset(),但在我的情况下,这将非常混乱。如果没有设置值,我如何将数据库中的值用作默认值?

我的代码:

<?php
    
 if(!empty($_POST)) {
    $_POST['cms_and_posting'] = (bool) $_POST['cms_and_posting'];
    $_POST['google_verify'] = (bool) $_POST['google_verify'];
 }

?>

我听说过PHP中的“零合并操作符”,但是我对如何在我的代码中使用它有点困惑。

共有2个答案

左丘嘉木
2023-03-14

您有来自数据库的一系列设置,所以我认为您有类似于

$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 循环,使用过滤器函数适当地验证每个条目:

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':
        ...
谷奕
2023-03-14

您可以使用空合并运算符。

 <?php
    
  if(!empty($_POST)) {
    $_POST['cms_and_posting'] = $_POST['cms_and_posting'] ?? $youdbvalue1;
    $_POST['google_verify'] =   $_POST['google_verify'] ?? $youdbvalue2;
  }

?>
 类似资料:
  • 问题内容: 我有一个表,用于存储有关某些事件重复发生的值,例如,与发生在星期一,星期三和星期五的事件,以及与发生在星期一和星期三的事件。所以我的桌子是这样的: 我的问题是有时(并非总是)我的脚本在数据库中插入重复的值,因此我的表的事件1和2的重复发生率是两倍,如下面的表所示: 如果我在列中添加约束,则事件1仅具有星期一值,但我希望该值具有其余值,例如星期三和星期五。如何添加约束来解决此问题? 问题

  • 我在表中为某些列设置了默认值。例如,create_time我已经设置了CURRENT_TIMESTAMP。当我通过JPA插入一个对象时,我没有得到该列的默认值。是否有任何命令可以执行此操作?

  • 我在StartDate-EndDate设置中有两个日期选择器,并且需要endDate选择器的日历在选定的startDate月份打开。 我已经尝试将默认日期设置为如下所示(日历打开的日期) 任何想法都很欣赏。

  • 这是我的数据 我想一个接一个地标记数据帧。例如,对于index=3,目标是坏 基本上,我用我的专业知识一个接一个地拉出来 顺致敬意,

  • 问题内容: 假设我有一个锚标记,例如 如何防止浏览器导航到 AngularJS中的 #? 问题答案: 更新 :此后,我改变了主意。经过更多的开发和花时间进行此工作之后,我相信针对此问题的更好解决方案是执行以下操作: 然后更新您的规则,使其具有附加规则: 它更加简单,并提供完全相同的功能,并且效率更高。希望对将来寻找该解决方案的其他人有所帮助。 以下是我以前的解决方案,仅出于遗留目的而留在这里: 如

  • 在我的quarkus应用程序中有两个命名的数据源,我们称之为A和B: Quarkus.datasource.a.db-kind=Oracle Quarkus.datasource.b.db-kind=Oracle 因此,每次应用程序启动时,我都会收到这样的通知: 警告:无法确定默认数据源的数据库类型