首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PHP数组,2个foreach,输入name=“”问题

PHP数组,2个foreach,输入name=“”问题
EN

Stack Overflow用户
提问于 2019-09-10 22:46:41
回答 1查看 84关注 0票数 0

好吧,那么,我有一个大问题。让我来解释一下。

我需要列出一些输入中的所有模式(复选框),然后我们可以选择我们想要操作的模式,以便为特定用户提供特权。

不管怎样,我得到了这个,正如你所看到的:

代码语言:javascript
运行
复制
<div id="list-schemas">
    <?php
        foreach ($schemas as $elt) {
        echo '<input type="checkbox" name="schemas[]" value="' . $elt->getSchema() . '"/>' . $elt->getSchema() . '<br />';
        }
    ?>
</div>

然后,我还需要设置一些带有权限的复选框,我这样做了:

代码语言:javascript
运行
复制
<div id="div-privileges">
    <?php
        foreach ($schemas as $elt) {
            echo '<div class="list">';
            echo '<label for="list">' . $elt->getSchema() . ' :</label><br />';
            echo '<input type="checkbox" name="privileges[]" value="REVOKE"/> REVOKE ? <br />';
            echo '<input type="checkbox" name="privileges[]" value="ALL"/> ALL PRIVILEGES ? <br />';
            echo '<hr>';
            echo '<input type="checkbox" name="privileges[]" value="SELECT"/> SELECT ? <br />';
            echo '<input type="checkbox" name="privileges[]" value="INSERT"/> INSERT ? <br />';
            echo '<input type="checkbox" name="privileges[]" value="UPDATE"/> UPDATE ?  <br />';
            echo '<input type="checkbox" name="privileges[]" value="DELETE"/> DELETE ?  <br />';
            echo '<hr>';
            echo '<input type="checkbox" name="privileges[]" value="CREATE"/>CREATE ?  <br />';
            echo '</div>';
        }
    ?>
</div>

这就是说,这是我在UserManager.class.php中的函数更新:

代码语言:javascript
运行
复制
public static function update(User $newPerso){

    $db = DbConnect::getDb();
    $newLogin= pg_escape_string($newPerso->getLogin());
    $schemas=$newPerso->getSchemas();
    $privileges=$newPerso->getPrivileges();

    if (isset($schemas)){

        foreach($schemas as $schema){

            if (isset($privileges)){

                foreach($privileges as $privilege){

                    if($privilege=="REVOKE"){
                        pg_query("{$privilege} ALL ON ALL TABLES IN SCHEMA {$schema} FROM {$newLogin};");
                    }

                    else if($privilege=="CREATE"){
                        pg_query("GRANT {$privilege} ON SCHEMA {$schema} TO {$newLogin};");
                    }

                    else if($privilege=="ALL" || $privilege=="INSERT" || $privilege=="SELECT" || $privilege=="UPDATE" || $privilege=="DELETE"){
                        pg_query("GRANT {$privilege} ON ALL TABLES IN SCHEMA {$schema} TO {$newLogin};");
                    }
                }
            }
        }
    }
}

事实是,它是有效的,但是,

当我选择示例2模式时(假设为'schema1‘和'schema2'),&当我为'schema1’选择'SELECT‘而为'schema2’选择'INSERT‘时,

结果:用户将在'schema1‘和’schema2‘中使用'SELECT’+ 'INSERT‘...

我真的被困住了,我真的不知道该怎么办……

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-10 22:51:36

只需将输入修改为

代码语言:javascript
运行
复制
<input type="checkbox" name="privileges[schema1][]" value="REVOKE"/> REVOKE ? <br />

看到这个[schema1]了吗?它将为您提供$_POST数组中的另一个级别。

因此你可以像这样迭代它:

代码语言:javascript
运行
复制
foreach ($_POST['privileges'] as $schema => $privileges) {
    foreach ($privileges as $privilege) {
        // you know what privilege is for what schema
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57873282

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档