Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Tsubaru

[Resolvido] Como pegar valores de um list

Recommended Posts

É 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.