Ir para conteúdo
Fórum Script Brasil
  • 0

Dados de BD para RadioButton


evod

Pergunta

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 por evod
Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

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:

mysql_.jpg

5) Se puder, atualize seu php

 

 

 

Imagem da  1)

WPyQXTp.png

Link para o comentário
Compartilhar em outros sites

  • 0

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 !

Link para o comentário
Compartilhar em outros sites

  • 0

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? 

 

Link para o comentário
Compartilhar em outros sites

  • 0

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

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...