Tsubaru 1 Denunciar post Postado Abril 2, 2008 É o seguinte, na hora de cadastrar o usuário, preciso dizer quais sistemas ele pode ter acesso. O número dos sistemas pode mudar, já que o admin pode cadastrar novos sistemas, por isso não adianta jogar um list com valores definidos, pois se hoje existem 4 sistemas, amanhã podem existir 20. Preciso listar os sistemas cadastrados no banco e exibir para que o admin posso selecionar quantos quiser. O problemar é dar um nome individual para cada campo e depois resgatar só os que foram selecionados, via POST. Como eu faço isso? Compartilhar este post Link para o post Compartilhar em outros sites
JackDenio 0 Denunciar post Postado Abril 2, 2008 Você pode colocar eles com check box e depois usar um foreach pra resgatar os valores .. Compartilhar este post Link para o post Compartilhar em outros sites
Marsiggia 0 Denunciar post Postado Abril 2, 2008 para adicionar no list você sabe né!? criar uma tabela no banco com os sistemas e tals.. ai você faz: select id_sistema, nome_sistema from sistemas; você executa a query e o resultset você adiciona no list sendo que para cada item do list será assim: <option value="$id(que veio do banco)" >$nome(que veio do banco) </option> o list box retorna um array com os values do itens selecionados, então basta você receber esse array e adicionar no banco, relacionando com o usuário... bom não sei se ficou claro, qualquer coisa pode perguntar! =] abraço Compartilhar este post Link para o post Compartilhar em outros sites
Tsubaru 1 Denunciar post Postado Abril 2, 2008 para adicionar no list você sabe né!? criar uma tabela no banco com os sistemas e tals.. ai você faz: select id_sistema, nome_sistema from sistemas; você executa a query e o resultset você adiciona no list sendo que para cada item do list será assim: <option value="$id(que veio do banco)" >$nome(que veio do banco) </option> o list box retorna um array com os values do itens selecionados, então basta você receber esse array e adicionar no banco, relacionando com o usuário... bom não sei se ficou claro, qualquer coisa pode perguntar! =] abraço Mas na hora de receber via POST, ele recebe esse array? Tipo, vamos dizer que o nome do list seja sistema, $_POST['sistema'] recebe o array com todos os itens selecionados? Montar o list para o usuário eu sei fazer, o problema é na hora de receber pra tratar e salvar no banco. Vou testar isso aí. Valeu pelas dicas, os dois. Compartilhar este post Link para o post Compartilhar em outros sites
Marsiggia 0 Denunciar post Postado Abril 2, 2008 é ele retorna o array com o que foi selecionado(value de cada item) beleza, depois de testar posta os resultados aqui! abraço Compartilhar este post Link para o post Compartilhar em outros sites
Tsubaru 1 Denunciar post Postado Abril 2, 2008 Não tô conseguindo não. <select name="sistema" id="sistema" size="5" multiple="multiple"> <?php $ls = listaSistema(); for($j = 0; $j < $ls['0']['total']; $j++) { $s = sistemaDados($ls[$j]['cod_sistema']); ?> <option value="<?php print $ls[$j]['cod_sistema']; ?>"><?php print $s['nome_sistema']; ?></option> <?php } ?> </select> Na hora de receber via POST, ele só guarda o último valor selecionado, não todos. Se eu selecionar 3, ele só guarda o último. :mellow: Compartilhar este post Link para o post Compartilhar em outros sites
Marsiggia 0 Denunciar post Postado Abril 2, 2008 como que você está recebendo o post!? Compartilhar este post Link para o post Compartilhar em outros sites
Tsubaru 1 Denunciar post Postado Abril 2, 2008 RESOLVIDO Acho que eu tinha feito algo errado mesmo. :P Agora tá funcionando. <?php $ls = listaSistema(); for($j = 0; $j < $ls['0']['total']; $j++) { $s = sistemaDados($ls[$j]['cod_sistema']); ?> <input type="checkbox" name="sis[]" value="<?php print $s['cod_sistema']; ?>" /> <?php print $s['nome_sistema']."<br />"; } ?> foreach($_POST['sis'] as $s) { $insert2 = "INSERT INTO tb_acesso (cod_sistema, cod_usuario) VALUES ('$s', '$c')"; $add_acesso = pg_query($insert2); } Acho que era falta [] no nome do campo. :blink: Valeu pela ajuda, Marsiggia. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Eu até tentei buscar aqui no fórum, mas sempre dá proxy error na busca, acabei buscando no google e encontrei um exemplo aqui mesmo. http://forum.imasters.com.br/public/style_emoticons/default/blush.gif http://forum.imasters.com.br/lofiversi...hp/t125036.html Compartilhar este post Link para o post Compartilhar em outros sites
Rasp 3 Denunciar post Postado Abril 3, 2008 Fala galera, beleza? Seguinte estou também montando a parte de permissões de um system que estou fazendo, só que estou com algumas dúvidas Meu sistema e dividido em modulos: Gerenciar Usuarios > Listar Usuarios > Novo Usuario Gerenciar Site > Home > Empresa > Fale conosco Ai tudo bem, montei uma tabela no meu bd que armazena o id e o nome do modulo que seria gerenciar usuarios e etc, e dentro da tabela do usuario ficar armazenado o id da tabela modulo que ele pode acessar, oq acontece é o seguinte: Queria saber como fazer um seletc na minha pagina de permissao pra alem de printar os dados do usuario, printar tb os dados selecionado no campo do id do modulo, dentro da tabela usuarios. Quando selecionar oq quero que é listado em checkbox os modulos somente gravar esses modulos no campo dentro da tabela do usuario, pq um user do sistema pode ter acesso a mais de um modulo e o principal problema, quando o usuario limitado logar os modulos que nao sao permitidos para ele nao fosse exibidos, tipo que retirasse. Espero que consigam me ajudar. Abração ;D Opa desculpa por ter "reaberto" esse topico de novo :X mais é que estou ficando louco já mesmo ;d []'s Compartilhar este post Link para o post Compartilhar em outros sites
Marsiggia 0 Denunciar post Postado Abril 3, 2008 De nada Tsubaro, qualquer coisa estamos ai! =] Rasp: bom pra printar as informações do módulo, primeiro você precisa fazer um select para recuperar as informações dos módulos que aquele usuário pode acessar então faça mais ou menos o seguinte: "SELECT u.NOME, u.LOGIN, p.MODULO FROM usuario as u, permissao as p WHERE u.ID_PERMISSAO = p.ID AND u.NOME LIKE '" . $_POST['<id do campo do nome>'] . "' com esse select você trará os dados do usuário e dos módulos que aquele determinado usuário pode acessar! bom darei a você resp o mesmo conselho que dei a outro usuário, essas permissões você deveria atrelar a grupos por exemplo: administradores -> podem acessar todos os módulos cliente -> pode acessar somente módulos do cliente usuário comum -> pode acessar os módulos do cliente e alguns específicos como você mesmo disse que um usuário pode ter acesso a mais de um módulo, presumindo que você poderá adicionar um módulo no futuro, você terá que alterar a permissão de cada um, um a um, agora se estiver em grupos, você adiciona o novo módulo no grupo e automaticamente já adicionou para todos os usuários daquele grupo! e sugiro também que leia este tópico desde o começo, pois na minha opinião o melhor jeito de cadastrar permissões é do jeito que o Tsubaro fez! quanto ao exibir somente os módulos que cada usuário pode acessar: é só criar um vetor que guardará os ids e o caminho físico(exemplo: "c:\apache\htdocs\sistema\mod_cadastro") dos módulos que aquele usuário pode acessar ai você monta dinâmicamente o menu de acordo com as permissões de cada usuário. qualquer dúvida só perguntar abraço zuou a internet aqui do trabalho, não sei porque postou 3 vezes a mesma mensagem! Moderador, por favor apague 2 das mensagens replicadas! Compartilhar este post Link para o post Compartilhar em outros sites
Tsubaru 1 Denunciar post Postado Abril 3, 2008 Parece que o proxy error te pegou, Marsiggia. :P Meus problema ainda não acabaram. http://forum.imasters.com.br/public/style_emoticons/default/cry.gif A solução ali funciona, mas tem um problema no código abaixo. foreach($_POST['sis'] as $s) { $insert2 = "INSERT INTO tb_acesso (cod_sistema, cod_usuario) VALUES ('$s', '$c')"; $add_acesso = pg_query($insert2); } A variável c é devolvida de uma função que faz um select na tabela usuario, e retorna o último valor coluna cod_usuario, que é auto-increment. Porém, se eu tenho 3 usuários cadastrados, c seria 3, é só incrementar 1 e pronto, 4, o suposto valor do código do próximo usuário a ser cadastrado, mas se eu deleto um usuário, o continua do valor que deletei. Ou seja, tenho 3 usuários, mas deletei 2, o próximo será criado como 4, não como 2, já que só tinha sobrado 1. RESUMO Preciso identificar o código da coluna auto-incrementável do dado que acabei de inserir. Tem como descobrir o próximo valor que o banco dará pra essa coluna? Compartilhar este post Link para o post Compartilhar em outros sites
Marsiggia 0 Denunciar post Postado Abril 3, 2008 Como o campo ID é auto-incremment, eu acredito que não é possível decrementar o id até o id que foi removido. existem 2 opções para pegar o id do usuário: 1º se o seu banco dados for o MySql (não sei se o que vou dizer existe em outros bancos) existe uma função do próprio banco de dados que chama LastInsertId que retorna o último id inserido no banco você deve estar fazendo 2 inserts, 1 que vai inserir o novo usuário e outro que vai inserir as permissões então você pode fazer insert para cadastrar o novo usuário e usar esta função logo após você inserir o usuário ai joga o retorno em uma variável e faz o segundo insert! ou 2º você pode criar uma função que buscará o id do usuário que você acabou de inserir: select id from tb_usuario where nome = $_POST['nome'] abraço, espero ter ajudado Compartilhar este post Link para o post Compartilhar em outros sites
Rasp 3 Denunciar post Postado Abril 3, 2008 Marsiggia, Vou colocar minha estrutura do bd e o script da pagina de permissão que pega apartir do id do usuario que é selecionado na pagina listar usuarios: Gostaria que você se pudesse me desse um help em como melhorar a estrutura do bd e os scripts, e espero não estar abusando. Segue o cod: BD Tabela Usuarios: `id_cliente` smallint(5) unsigned NOT NULL auto_increment, `login` varchar(30) NOT NULL, `senha` char(40) NOT NULL, `razao` varchar(45) NOT NULL, `email` varchar(64) NOT NULL, `telefone` varchar(11) NOT NULL, `endereco` varchar(30) NOT NULL, `numero` smallint(6) unsigned NOT NULL, `complemento` varchar(30) NOT NULL, `cep` char(8) NOT NULL, `bairro` varchar(20) NOT NULL, `cidade` varchar(45) NOT NULL, `fk_estado` smallint(5) unsigned NOT NULL, `fk_modulo` smallint(5) unsigned NOT NULL, `chave` char(40) NOT NULL, PRIMARY KEY (`id_cliente`), UNIQUE KEY `login` (`login`) Tabela Modulos: `id_modulo` smallint(5) unsigned NOT NULL auto_increment, `modulo` varchar(30) NOT NULL, PRIMARY KEY (`id_modulo`), UNIQUE KEY `modulo` (`modulo`) usuario_permissao.php <?php if(file_exists("init.php")) { require "init.php"; } else { echo "Arquivo init.php não encontrado"; exit; } if(!function_exists("Abre_Conexao")) { echo "O arquivo init.php foi alterado, não existe a função Abre_Conexao"; exit; } $id = $_GET["id"]; Abre_Conexao(); $re = mysql_query("select count(*) as total from usuarios where id_usuario = $id"); $total = mysql_result($re, 0, "total"); if($total == 1) { $re = mysql_query("select * from usuarios, estados, modulos where estados.id_estado = usuarios.fk_estado and modulos.id_modulo = usuarios.fk_modulo and usuarios.id_usuario = $id"); $dados = mysql_fetch_array($re); } ?> <?php include("header.php"); ?> <div id="barrainfo"> <h4 class="infosecao">Permissão do Usuário</h4> <h4 class="infomigalha">Gerenciar Usuários » Permissão do Usuário</h4> </div> <h4 class="infoforms">Dados do Usuário</h4> <ul style="width: auto; height: auto; float: left; clear: both; display: inline-block;"> <li>Login: <?php echo "$dados[login]"; ?></li> <li>Nome: <?php echo "$dados[nome]"; ?></li> <li>Email: <?php echo "$dados[email]"; ?></li> <li>Telefone: <?php echo "$dados[telefone]"; ?></li> <li>Endereço: <?php echo "$dados[endereco]"; ?>, <?php echo "$dados[numero]"; ?> - <?php echo "$dados[complemento]"; ?></li> <li>CEP: <?php echo "$dados[cep]"; ?></li> <li>Bairro: <?php echo "$dados[bairro]"; ?></li> <li>Cidade: <?php echo "$dados[cidade]"; ?></li> <li>Estado: <?php echo "$dados[estado]"; ?></li> </ul> <h4 class="infoforms">Módulos Administrativos</h4> <form method="post" name="formpermissao" id="" action="usuario_permissoes_salvar.php" style="float: left; clear: both;"> <table cellpadding="0" cellspacing="0"> <tr> <td><input type="checkbox" name="tudo" id="tudo" value="checkbox" onclick="selecionartudo(this.checked);" />Selecionar Todos<br><br><br></td> </tr> <?php while($l = mysql_fetch_array($re)) { $id = $l["id_modulo"]; $modulo = $l["modulo"]; echo "<tr> <td><input type=\"checkbox\" name=\"1\" id=\"seila\" value=\"$id\" />$modulo</td> </tr>\n"; } @mysql_close(); ?> </table> <input type="button" name="btn_formpadrao" id="btn_formpadrao" class="btntexto" value="Salvar" /> </form> Nesse arquivo, tentei fazer com que ele fizesse consulta em 3 tabelas que são usuarios, estados e modulos, que no arquivos em cima dos dados da permissao ele lista os dados completos do user, mais a parte de modulos não lista ;D Compartilhar este post Link para o post Compartilhar em outros sites
Marsiggia 0 Denunciar post Postado Abril 3, 2008 Rasp pelo que entendi do código, você está fazendo uma consulta no banco e trazendo os módulos e os estados relacionados a um determinado usuário.. o que eu faria é o seguinte, se eu faria o mesmo select que você fez e faria um outro select para trazer todos os módulos cadastrados e com o resultado do segundo select eu montaria a estrutura dos check box que nem você. Como os módulos que estão relacionados com o usuário(módulos que o usuário já possue permissão) eu faria isso: <?php $select = mysql_query("SELECT m.id_modulo FROM modulos as m, usuarios as u WHERE m.id_modulo = u.fk_modulo "); $i=0; foreach($select as $row) { $arrTMP[$i]= $row; $i++ } $i=0 $mod = mysql_query("SELECT * FROM modulos"); while($l = mysql_fetch_array($mod)) { $id = $l["id_modulo"]; $modulo = $l["modulo"]; if($arrTMP[$i] == $id) { echo "<tr> <td><input type=\"checkbox\" selected=\"selected\" name=\"=$id\" id=\"$id\" value=\"$id\" />$modulo</td> </tr>\n"; } else { echo "<tr> <td><input type=\"checkbox\" name=\"=$id\" id=\"$id\" value=\"$id\" />$modulo</td> </tr>\n"; } $i++; } @mysql_close(); ?> utilizando o código acima, você mostrará na tela, checkboxes para todos os módulos e os módulos relacionados ao usuário estarão selecionados. da uma testada veja o resultado! abraço Compartilhar este post Link para o post Compartilhar em outros sites
Rasp 3 Denunciar post Postado Abril 3, 2008 Marsiggia, Fiz e esta retornando os modulos, porém está apresentando este erro e não consegui corrigir http://forum.imasters.com.br/public/style_emoticons/default/assobiando.gif a msg é essa: Warning: Invalid argument supplied for foreach() in C:\Arquivos de programas\Apache Software Foundation\Apache2.2\htdocs\sites\logmania.net\admin\clientes_query_string\usuario_permissoes.php on line 54 Notice: Undefined variable: arrTMP in C:\Arquivos de programas\Apache Software Foundation\Apache2.2\htdocs\sites\logmania.net\admin\clientes_query_string\usuario_permissoes.php on line 65 Notice: Undefined variable: arrTMP in C:\Arquivos de programas\Apache Software Foundation\Apache2.2\htdocs\sites\logmania.net\admin\clientes_query_string\usuario_permissoes.php on line 65 Notice: Undefined variable: arrTMP in C:\Arquivos de programas\Apache Software Foundation\Apache2.2\htdocs\sites\logmania.net\admin\clientes_query_string\usuario_permissoes.php on line 65 Notice: Undefined variable: arrTMP in C:\Arquivos de programas\Apache Software Foundation\Apache2.2\htdocs\sites\logmania.net\admin\clientes_query_string\usuario_permissoes.php on line 65 Notice: Undefined variable: arrTMP in C:\Arquivos de programas\Apache Software Foundation\Apache2.2\htdocs\sites\logmania.net\admin\clientes_query_string\usuario_permissoes.php on line 65 Notice: Undefined variable: arrTMP in C:\Arquivos de programas\Apache Software Foundation\Apache2.2\htdocs\sites\logmania.net\admin\clientes_query_string\usuario_permissoes.php on line 65 Acho que é algo relacionado a parte da variavel $row certo? eu acho! desde já obrigado pela ajuda que tem me dado ;D Compartilhar este post Link para o post Compartilhar em outros sites
Marsiggia 0 Denunciar post Postado Abril 4, 2008 Rasp tenta fazer esta correção: <?php $select = mysql_query("SELECT m.id_modulo FROM modulos as m, usuarios as u WHERE m.id_modulo = u.fk_modulo "); $i=0; $arrTMP = array();//aqui está a correção foreach($select as $row) { $arrTMP[$i]= $row; $i++ } $i=0 $mod = mysql_query("SELECT * FROM modulos"); while($l = mysql_fetch_array($mod)) { $id = $l["id_modulo"]; $modulo = $l["modulo"]; if($arrTMP[$i] == $id) { echo "<tr> <td><input type=\"checkbox\" selected=\"selected\" name=\"=$id\" id=\"$id\" value=\"$id\" />$modulo</td> </tr>\n"; } else { echo "<tr> <td><input type=\"checkbox\" name=\"=$id\" id=\"$id\" value=\"$id\" />$modulo</td> </tr>\n"; } $i++; } @mysql_close(); ?> depois me fala o que deu! abraço Compartilhar este post Link para o post Compartilhar em outros sites
Rasp 3 Denunciar post Postado Abril 4, 2008 Marsiggia, Continuou dando o erro: Warning: Invalid argument supplied for foreach() in C:\Arquivos de programas\Apache Software Foundation\Apache2.2\htdocs\clientes_query_string\usuario_permissoes.php on line 56 Notice: Undefined offset: 0 in C:\Arquivos de programas\Apache Software Foundation\Apache2.2\htdocs\clientes_query_string\usuario_permissoes.php on line 67 Notice: Undefined offset: 1 in C:\Arquivos de programas\Apache Software Foundation\Apache2.2\htdocs\clientes_query_string\usuario_permissoes.php on line 67 Notice: Undefined offset: 2 in C:\Arquivos de programas\Apache Software Foundation\Apache2.2\htdocs\clientes_query_string\usuario_permissoes.php on line 67 Notice: Undefined offset: 3 in C:\Arquivos de programas\Apache Software Foundation\Apache2.2\htdocs\clientes_query_string\usuario_permissoes.php on line 67 Notice: Undefined offset: 4 in C:\Arquivos de programas\Apache Software Foundation\Apache2.2\htdocs\clientes_query_string\usuario_permissoes.php on line 67 Notice: Undefined offset: 5 in C:\Arquivos de programas\Apache Software Foundation\Apache2.2\htdocs\clientes_query_string\usuario_permissoes.php on line 67 O cod está assim: <?php $select = mysql_query("select m.id_modulo from modulos as m, usuarios as u where m.id_modulo = u.fk_modulo"); $i=0; $arrTMP = array(); foreach($select as $row) { $arrTMP[$i]= $row; $i++; } $i=0; // Aqui estava faltando ponto e virgula (;) $mod = mysql_query("SELECT * FROM modulos"); while($l = mysql_fetch_array($mod)) { $id = $l["id_modulo"]; $modulo = $l["modulo"]; if($arrTMP[$i] == $id) { echo "<tr> <td><input type=\"checkbox\" selected=\"selected\" name=\"$id\" id=\"$id\" value=\"$id\" />$modulo</td> </tr>\n"; } else { echo "<tr> <td><input type=\"checkbox\" name=\"$id\" id=\"$id\" value=\"$id\" />$modulo</td> </tr>\n"; } $i++; } @mysql_close(); ?> Eu tive que colocar uma virgula pois estava dando objeto inesperado Abraços []'s Compartilhar este post Link para o post Compartilhar em outros sites
Marsiggia 0 Denunciar post Postado Abril 4, 2008 deu certo? ou depois que colocar o ponto e vígula continua a dar problema!? Compartilhar este post Link para o post Compartilhar em outros sites
Rasp 3 Denunciar post Postado Abril 4, 2008 deu certo? ou depois que colocar o ponto e vígula continua a dar problema!? Continua dando problema esse erro que eu coloquei ai em cima =/ Compartilhar este post Link para o post Compartilhar em outros sites
Marsiggia 0 Denunciar post Postado Abril 7, 2008 Rasp, tenta com esse código abaixo! <?php $select = mysql_query("select m.id_modulo from modulos as m, usuarios as u where m.id_modulo = u.fk_modulo"); $i=0; $arrTMP = array(); foreach(mysql_fetch_row($select) as $row) { $arrTMP[$i]= $row; $i++; } $i=0; // Aqui estava faltando ponto e virgula (;) $mod = mysql_query("SELECT * FROM modulos"); while($l = mysql_fetch_array($mod)) { $id = $l["id_modulo"]; $modulo = $l["modulo"]; if($arrTMP[$i] == $id) { echo "<tr> <td><input type=\"checkbox\" selected=\"selected\" name=\"$id\" id=\"$id\" value=\"$id\" />$modulo</td> </tr>\n"; } else { echo "<tr> <td><input type=\"checkbox\" name=\"$id\" id=\"$id\" value=\"$id\" />$modulo</td> </tr>\n"; } $i++; } @mysql_close(); ?> acho que agora vai! abraço Compartilhar este post Link para o post Compartilhar em outros sites