evod Postado Maio 10, 2016 Denunciar Share Postado Maio 10, 2016 (editado) Olá a todos, Estou a desenvolver uma pequena página em PHP mas estou a ter algumas dificuldades. Eu pretendo que o utilizador só consiga aceder a determinado menu se o administrador der autorização. Para isso fiz o seguinte: Página de Novo Utilizador: <input type="radio" name="pagina-inicial[]" value="pode-ver"> <input type="radio" name="pagina-inicial[]" value="não-pode-ver"> <input type="radio" name="pagina-produtos[]" value="pode-editar"> <input type="radio" name="pagina-produtos[]" value="não-pode-editar"> Página de Edição de Utilizador (No inicio do código): <?php $query = sprintf ("SELECT * FROM acessos WHERE id_utilizador=$id"); $result = mysql_query($query, $db); while ($row = mysql_fetch_assoc($result)) { $id_utilizador = $row['id_utilizador']; $menu = $row['menu']; $acessos = $row['acessos']; } ?> Página de Edição de Utilizador (No Body): <input type="radio" name="pagina-inicial[]" value="pode-ver" <?php if($acessos == "pode-ver"){echo "checked=\"checked\"";} ?>> <input type="radio" name="pagina-inicial[]" value="não-pode-ver" <?php if($acessos == "não-pode-ver"){echo "checked=\"checked\"";} ?>> Mas não funciona. alguém me pode ajudar? PS: Todos os utilizadores estão na mesma tabela.. Obrigado Editado Maio 10, 2016 por evod Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 wash Postado Maio 10, 2016 Denunciar Share Postado Maio 10, 2016 Olá @evod! Não entendi. Mesmo assim seguem algumas sugestões: 1) O que não funciona? Os input[type=radio]? Em HTML use apenas a palavra checked, veja: 2) Ou o que não funciona é a restrição de acesso a apenas determinado menu? 3) Por quê você usa um array nos name dos input (pagina-inicial[] e pagina-produtos[]) se somente uma única opção poderá ser marcada? 4) O php.net recomenda não usar mais as extensões mysql_* veja: 5) Se puder, atualize seu php Imagem da 1) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 evod Postado Maio 11, 2016 Autor Denunciar Share Postado Maio 11, 2016 Caro Wash, Coloquei apenas um exemplo para tentar explicar melhor o que pretendo. Tenho 2 opções porque apesar de não estar visivel neste código elas estão lá :) O problema que tenho é o seguinte: Eu consigo fazer uma query na base de dados que encontra todos os valores nela guardados. Tentei fazer um echo dos valores e cada vez que ele passa pelo array escreve o conteudo que se encontra na tabela. O problema é que agora não consigo que ele compare esses valores e coloque o checked nos inputs corretos. Por exemplo, se nos inputs tiver "Gosto de Sopa: Sim / Não" e na Base de Dados tiver "gosto-de-sopa" queria que o radiobutton "Sim" ficasse logo selecionado. Esta página é uma página de edição de conteúdos pelo que todos os valores devem aparecer exatamente ao que recebem da Base de Dados para o utilizador poder editar só os campos pretendidos... Espero ter explicado melhor desta vez. Muito obrigado pelo apoio ! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 evod Postado Maio 11, 2016 Autor Denunciar Share Postado Maio 11, 2016 Wash, Verifiquei que no ultimo campo da tabela que a query verifica já funciona direito. Acho que descobri o que poderá ser: Eu tenho a BD assim: id_utilizador | menu | acessos 1 |pagina-inicial | pode-ver 1 | pagina-inicial| pode-editar 2 | pagina-inicial | não-pode-ver 2 | pagina-incial | não-pode-editar Então o array para em "pode-editar" se eu colocar no radiobutton um if para verificar se tambem pode-ver então ele não assume porque o array termina com a informacao "pode-editar". Será isso? Se sim, qual a melhor forma de corrigir o problema? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 evod Postado Maio 11, 2016 Autor Denunciar Share Postado Maio 11, 2016 Consegui através de alteração na query: acessos != '' Ou seja, desde que o campo não esteja vazio ele assume... Mas acredito que não seja a melhor forma... Se houver alguma sugestão agradeço :) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 wash Postado Maio 11, 2016 Denunciar Share Postado Maio 11, 2016 Olá evod! Que bom que já resolveu! Sugiro apenas que troque o campo de texto por um campo do tipo tinyint, que assim seu banco de dados ficara mais leve e mais rápido! Segue sugestão testada: Arquivo .sql -- remover banco de dados se ele existir DROP SCHEMA IF EXISTS evod; -- criar banco de dados CREATE SCHEMA evod; -- usar o banco de dados USE evod; -- -- utilizadores -- CREATE TABLE utilizadores ( id int(11) primary key auto_increment NOT NULL, utilizador varchar(60), `pagina-inicial` tinyint(1) DEFAULT , `pagina-produtos` tinyint(1) DEFAULT ) ENGINE=InnoDB; INSERT INTO utilizadores (utilizador, `pagina-inicial`, `pagina-produtos`) VALUES ('João Mariano', 1,1), ('Maria Fernanda', 1,), ('Pedro Rangel', ,), ('Cláudia Rabello', ,1); connect.php Arquivo de conexão com o banco de dados: <?php // definição de variáveis para conexão $host = 'localhost'; // endereço do banco $user = 'root'; // usuário $pass = ''; // senha $database = 'evod'; // nome do banco de dados // estabelecer conexão: $sqli = new mysqli($host, $user, $pass); // verificando se conectou de boas: if ($sqli->connect_error) { // se houver alguma falha, exibe mensagem: echo '<p class="error">Falha na conexão: ' . $sqli->connect_error . '</p>'; } // definir o padrão de caracteres if (!$sqli->set_charset('utf8')) { // se não conseguir definir o padrão de caracteres, exibe o padrão disponível echo "<p class='error'>Seu charset não é utf8, chefe!<br>$sqli->character_set_name()</p>"; } // selecionar/abrir o banco de dados para trabalhar if (!$sqli->select_db($database)) { // se o banco de dados não for encontrado echo "<p class='error'>Banco de dados não encontrado, chefe!</p>"; } Arquivo com o formulário, contendo os input[type=radio] sendo carregados de acordo com o que está no banco de dados: <?php // conecta com o mysql require 'sql/connect.php'; // trata id da url $id = isset($_GET['id']) ? $_GET['id'] : 1; $total_registros = 3; $next = $id + 1 > $total_registros ? 1 : $id + 1; //rotina para atualização: if (sizeof($_POST)) { echo '<p class="warning">A rotina para salvar não foi escrita, chefe!</p>'; } // defique query de busca do utilizador $query = 'SELECT * FROM utilizadores WHERE id = ' . $id; // executa a query $result = $sqli->query($query); // verifica se houve algum erro na execução da query if ($sqli->error) { echo '<p class="error">Falha ao executar busca, chefe!<br>' . $sqli->error . '</p>'; } elseif ($result->num_rows) { // se não houve falhas e existe algum resultado $dados = $result->fetch_all(MYSQLI_ASSOC)[]; } else { // se não há nenhum resultado: echo '<p class="warning">Nenhum registro de utilizadores, chefe!</p>'; } ?> <!doctype html> <html> <head> <meta charset='utf-8'> <title>title</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <body> <main> <h1><?= $dados['utilizador'] ?></h1> <form method="post"> Página Inicial:<br> <?php // define as opções $podeEditar = ['Não Pode Editar', 'Pode Editar']; // monta os radios para página inicial: foreach ($podeEditar as $key => $value) { $checked = $key == $dados['pagina-inicial'] ? ' checked' : null; echo "<input type='radio' name='pagina-inicial' id='inicial$key' $checked> <label for='inicial$key'>$value</label> "; } ?> <hr> Página Produtos:<br> <?php // define as opções $podeEditar = ['Não Pode Editar', 'Pode Editar']; // monta os radios para página inicial: foreach ($podeEditar as $key => $value) { $checked = $key == $dados['pagina-produtos'] ? ' checked' : null; echo "<input type='radio' name='pagina-produtos' id='produtos$key' $checked> <label for='produtos$key'>$value</label> "; } ?> <hr> <input type="submit" value='Salvar'> </form> <p> <a href="?id=<?= $next ?>">Próximo Utilizador</a> </p> </main> </body> </html> Obs.: Testado no php 5.5.19 e no 7.0.5 Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
evod
Olá a todos,
Estou a desenvolver uma pequena página em PHP mas estou a ter algumas dificuldades.
Eu pretendo que o utilizador só consiga aceder a determinado menu se o administrador der autorização. Para isso fiz o seguinte:
Página de Novo Utilizador:
Página de Edição de Utilizador (No inicio do código):
Página de Edição de Utilizador (No Body):
Mas não funciona. alguém me pode ajudar?
PS: Todos os utilizadores estão na mesma tabela..
Obrigado
Editado por evodLink para o comentário
Compartilhar em outros sites
5 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.