ООП PhP Проблема пустых свойств класса, когда они не пусты, когда они вставляются в базу данных.PostgreSQL - PullRequest
1 голос
/ 19 сентября 2019

Позвольте мне объяснить мою проблему.Я управляю приложением, которое позволяет назначать роли пользователям и предоставлять им доступ к различным схемам с помощью базы данных PostgreSQL.

Каждый пользователь - это объект «новый пользователь», созданный моим User.class.php с этими свойствами:

class User{
    private $_idUser;
    private $_login;
    private $_password;
    private $_roles;
    private $_schemas;

    // Getter / Setter

    /**
     * Get the value of _roles
     */ 
    public function getRoles()
    {
        return $this->_roles;
    }

     /**
     * Get the value of _schemas
     */ 
    public function getSchemas()
    {
        return $this->_schemas;
    }
}

Все работает, я могу изменить пользователя или создать его, предоставить ему доступ к одной или нескольким схемам, назначить ему одну или несколько ролей.Роли и схемы могут быть выбраны в флажках.Как вы видите:

Например, флажок схем:

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

Вот как обновить или добавить пользователя в базу данных, создав нового пользователя:

    case "addUsers":
        {
            $p = new User(["idUser" => $_POST["id"], "login" => $_POST["pseudo"], "password" => $_POST["password"], "roles" => isset($_POST["roles"]) ? $_POST["roles"] : null, "schemas" => isset($_POST["schemas"]) ? $_POST["schemas"] : null]);
            UserManager::add($p);
            break;
        }
    case "updUsers":
        {
            $p = new User(["idUser" => $_POST["id"], "login" => $_POST["pseudo"], "password" => $_POST["password"], "roles" => isset($_POST["roles"]) ? $_POST["roles"] : null, "schemas" => isset($_POST["schemas"]) ? $_POST["schemas"] : null]);
            UserManager::update($p);
            break;
        }

Когда я добавляю нового пользователя:

object(User)[1]
  private '_idUser' => string '' (length=0)
  private '_login' => string 'azdazdzad' (length=9)
  private '_password' => string 'aadzAZAZD846@@' (length=14)
  private '_roles' => 
    array (size=1)
      0 => string 'role2' (length=5)
  private '_schemas' => 
    array (size=1)
      0 => string 'schematest2' (length=11)

Это означает, что при добавлении или обновлении пользователя: роли и схемы не пусты, потому что изменения выполняются в базе данных.Тем не менее, я хотел бы видеть детали каждого пользователя, поэтому я сделал это:

$list = UserManager::getList();
var_dump($list);
foreach ($list as $elt) {
    echo '<tr>';
    echo '<td><a href="#edit'.$elt->getIdUser().'">Details</a></td>';

    echo '<div class="lightbox" id="edit'.$elt->getIdUser().'">';
    echo '<figure>';
    echo '<a href="#" class="closemsg"></a>';
    echo '<figcaption><h4>'.$elt->getLogin().'</h4>';
    $roles=$elt->getRoles();
    var_dump($roles); // <-------------NULL
    if(isset($roles) && !empty($roles)){
        echo '<p>Membership of roles :</p>';
        echo '<ul>';
        foreach ($roles as $role) {
            echo '<li>'.$role.'</li>';
        }
        echo '</ul>';
    }
    $schemas=$elt->getSchemas();
    var_dump($schemas); // <-------------NULL
    if(isset($schemas) && !empty($schemas)){
        echo '<p>Grantee of schemas :</p>';
        echo '<ul>';
        foreach ($schemas as $schema) {
            echo '<li>'.$schema.'</li>';
        }
        echo '</ul>';
    }
    echo '</figcaption>';
    echo '</figure>';
    echo '</div>';

    echo '</tr>';
}

и когда я нажимаю «Детали», ничего не появляется для ролей и схем.ПОЧЕМУ ???Вот, например, пользователь, когда мы делаем var_dump ($ list);:

object(User)[10]
      private '_idUser' => string '24734' (length=5)
      private '_login' => string 'user10' (length=6)
      private '_password' => string '********' (length=8)
      private '_roles' => null
      private '_schemas' => null

Кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 23 сентября 2019

Ну, благодаря @Tox, моя проблема была UserManager::getList()

Позвольте мне показать вам,

Что у меня было раньше:

$q = pg_query("SELECT
    u.usesysid as idUtilisateur,
    u.usename as login,
    u.passwd as motDePasse,
    FROM pg_catalog.pg_roles r JOIN pg_catalog.pg_user u on(r.rolname=u.usename)
    WHERE usename !~ 'postgres' ORDER BY 1;");

Что яесть сейчас:

$q = pg_query("SELECT
    u.usesysid as idUtilisateur,
    u.usename as login,
    u.passwd as motDePasse,
    ARRAY(SELECT b.rolname FROM pg_catalog.pg_auth_members m JOIN pg_catalog.pg_roles b ON (m.roleid = b.oid) WHERE m.member = r.oid) as groupes,
    ARRAY(SELECT nspname FROM pg_namespace pn WHERE pg_catalog.has_schema_privilege(r.rolname, nspname, 'USAGE')= true AND nspname <> 'information_schema' AND nspname !~~ 'pg_%') as schemas
    FROM pg_catalog.pg_roles r JOIN pg_catalog.pg_user u on(r.rolname=u.usename)
    WHERE usename !~ 'postgres' ORDER BY 1;");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...