Jump to content
Fórum Script Brasil
  • 0

Dados de BD para RadioButton


evod
 Share

Question

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

Edited by evod
Link to comment
Share on other sites

5 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other sites

  • 0

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 :)  

Link to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share



  • Forum Statistics

    • Total Topics
      149.9k
    • Total Posts
      646.8k
×
×
  • Create New...