' . $elt--6ren">
gpt4 book ai didi

PHP ARRAY, 2 foreach, input name =""问题

转载 作者:行者123 更新时间:2023-11-29 14:26:00 24 4
gpt4 key购买 nike

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

无论如何,如您所见,我明白了:

<div id="list-schemas">
<?php
foreach ($schemas as $elt) {
echo '<input type="checkbox" name="schemas[]" value="' . $elt->getSchema() . '"/>' . $elt->getSchema() . '<br />';
}
?>
</div>

然后,我还需要添加一些具有权限的复选框,我这样做了:

<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 中的函数更新:

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”...

我真的卡住了,我真的不知道该怎么做......

最佳答案

只需将您的输入修改为

<input type="checkbox" name="privileges[schema1][]" value="REVOKE"/> REVOKE ? <br />

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

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

foreach ($_POST['privileges'] as $schema => $privileges) {
foreach ($privileges as $privilege) {
// you know what privilege is for what schema
}
}

关于PHP ARRAY, 2 foreach, input name =""问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57873282/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com