Ir para conteúdo

POWERED BY:

Arquivado

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

aprendizdephp

função update usando um botão

Recommended Posts

Oi.

Eu estou desenvolvendo um mini-sisteminha de controle de acesso dos usuarios em php.

O usuario se cadastrando, é armazenado no bando de dados mysql os seguintes valores:

 

usuario_id

nome

sobrenome

email

usuario

senha

nivel_usuario

 

No momento do cadastro, é inserido na tabela 'usuarios', na coluna "nivel_usuario" o valor "0", significando que o acesso do usuario é restrito.

 

Criei um arquivo chamado area-restrita, onde é exibido todos os usuarios cadastrado em uma tabela, contendo as informações de ID, Nome, Email, e Nivel de Acesso.

A tabela está assim:

 

ID | Nome do Usuario | Email do Usuario | Nivel de Acesso

1 | Joao | joao@abc.com.br | 1

2 | Maria | maria@abc.com.br | 0

 

 

Eu preciso que ao invés de ser exibido o numero 1 ou 0, fosse exibido um botão, que quando o Nivel de Acesso, for igual a 0 ele se chame "Liberar" e altere o valor no banco de dados de 0 para 1, e que quando o Nivel de Acesso for igual a 1 ele se chame "Bloquear" e altere o valor de 1 para 0.

 

Eu não entendo como eu posso fazer esse sistema de update no banco de dados, pois ao meu ver, quando eu clicar em Liberar ou Bloquear, ele deverá atualizar a pagina "area-restrita" e já estar com o update realizado,

 

Segue o código que estou usando na pagina area-restrita:

 

area-restrita.php

<?php

session_start(); // Inicia a session
include "functions.php"; // arquivo de funções.
include "config.php"; // arquivo de conexao com o bd.
session_checker(); // chama a função que verifica se a session iniciada da acesso à página.
 
echo "<head>
  <title>Painel Administrativo</title>
 </head>
<body>";
echo "Bem vindo <strong>". $_SESSION['nome'] ."</strong>!<br />
     Voce esta acessando a area de administracao de usuarios!
     <br /><br />";
?>

<?php

$res = mysql_query("SELECT * FROM usuarios") or die(mysql_error()); /*Executa o comando SQL, no caso para pegar todos os usuarios do sistema e retorna o valor da consulta em uma variavel ($res)  */
?>
<h1>Usuarios Cadastrados</h1>
<table width="600" border="2" cellspacing="0" cellpadding="1"><tr><td bgcolor="#B3E97C">ID</td><td bgcolor="#B3E97C">Nome do Usuario</td><td bgcolor="#B3E97C">Email do Usuario</td><td bgcolor="#B3E97C">Nivel de Acesso</td></tr>
<?php

/*Enquanto houver dados na tabela para serem mostrados será executado tudo que esta dentro do while */

while($escrever = mysql_fetch_array($res)){

/*Escreve cada linha da tabela*/
echo "<tr><td>" . $escrever['usuario_id'] . "</td><td>" . $escrever['nome'] . "</td><td>" . $escrever['email'] . "</td><td>" . $escrever['nivel_usuario'] . "</td></tr>";

}/*Fim do while*/

echo "</table><br /><br />"; /*fecha a tabela apos termino de impressão das linhas*/

echo "<a href=\"logout.php\">Sair</a>";
 
?>

Como podem ver é bem simples.

 

Eu ficarei muito agradecido se puderem me ajudar com essa implementação do botao "liberar" e "bloquear" no meu mini-sisteminha.

 

Se tiverem qualquer duvida referente ao código ou a lógica de funcionamento, me pergunte.

 

Abraços;

Compartilhar este post


Link para o post
Compartilhar em outros sites

primeira coisa é que o sobrenome na sua tabela é praticamente inutil e você poderia se livrar dela.

 

segundo seria algo mais ou menos assim

 

 

 

if(isset($_GET['acao']) && !empty($_GET['acao'])){

if($_GET['acao'] == 'liberar'){

$sql = "UPDATE tabela SET nivel_usuario = 1 WHERE cod_usuario = $_GET['id']";
}else if($_GET['acao'] == 'bloquear'){

$sql = "UPDATE tabela SET nivel_usuario = 0 WHERE cod_usuario = $_GET['id']";
}
}
while($escrever = mysql_fetch_array($res)){
if($escrever['nivel_usuario'] == 1){
$btn = "<a href='pagina?acao=liberar&id=$escrever['usuario_id']'>Liberar</a>";
}else{
$btn = "<a href='pagina?acao=bloquear&id=$escrever['usuario_id']>Bloquear</a>";
}
 /*Escreve cada linha da tabela*/ echo "<tr><td>" . $escrever['usuario_id'] . "</td><td>" . $escrever['nome'] . "</td><td>" . $escrever['email'] . "</td><td>" . $btn . "</td></tr>"; }/*Fim do while*/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi, eu adicionei o código que voce me passou e fiz algumas adaptações, mas quando eu executo ele, eu recebo este erro:

 

Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /admin/area_restrita.php on line 31

 

<?php

session_start(); // Inicia a session
include "functions.php"; // arquivo de funções.
include "config.php"; // arquivo de conexao com o bd.
session_checker(); // chama a função que verifica se a session iniciada da acesso à página.
 
echo "<head>
  <title>Painel Administrativo</title>
 </head>
<body>";
echo "Bem vindo <strong>". $_SESSION['nome'] ."</strong>!<br />
     Voce esta acessando a area de administracao de usuarios!
     <br /><br />";
?>

<?php

$res = mysql_query("SELECT * FROM usuarios") or die(mysql_error()); /*Executa o comando SQL, no caso para pegar todos os usuarios do sistema e retorna o valor da consulta em uma variavel ($res)  */
?>
<h1>Usuarios Cadastrados</h1>
<table width="600" border="2" cellspacing="0" cellpadding="1"><tr><td bgcolor="#B3E97C">ID</td><td bgcolor="#B3E97C">Nome do Usuario</td><td bgcolor="#B3E97C">Email do Usuario</td><td bgcolor="#B3E97C">Nivel do Usuario</td></tr>
<?php

/*Enquanto houver dados na tabela para serem mostrados será executado tudo que esta dentro do while */

if(isset($_GET['acao']) && !empty($_GET['acao'])){

if($_GET['acao'] == 'liberar'){

$sql = "UPDATE usuarios SET nivel_usuario = 1 WHERE usuario_id = $_GET['usuario_id']";
}else if($_GET['acao'] == 'bloquear'){

$sql = "UPDATE usuarios SET nivel_usuario = 0 WHERE usuario_id = $_GET['usuario_id']";
}
}
while($escrever = mysql_fetch_array($res)){
if($escrever['nivel_usuario'] == 1){
$btn = "<a href='pagina?acao=liberar&id=$escrever['usuario_id']'>Liberar</a>";
}else{
$btn = "<a href='pagina?acao=bloquear&id=$escrever['usuario_id']>Bloquear</a>";
}
 /*Escreve cada linha da tabela*/ echo "<tr><td>" . $escrever['usuario_id'] . "</td><td>" . $escrever['nome'] . "</td><td>" . $escrever['email'] . "</td><td>" . $btn . "</td></tr>"; }/*Fim do while*/

echo "</table><br /><br />"; /*fecha a tabela apos termino de impressão das linhas*/

echo "<a href=\"logout.php\">Sair</a>";
 
?>

Eu coloquei esse código no dreamweaver e ele me retornou 4 erros, sendo eles nas linhas 31, 34, 39 e 41.

Olhando para o código eu nao consegui identificar onde estão os erros.

Poderia me ajudar?

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

quando seu array estiver entre aspas duplas, para acessar a chave remova as aspas simples ou concatene usando o (.)

 

troque:

 

$sql = "UPDATE usuarios SET nivel_usuario = 1 WHERE usuario_id = $_GET['usuario_id']";

 

 

 

para:

 

$sql = "UPDATE usuarios SET nivel_usuario = 1 WHERE usuario_id = $_GET[usuario_id]";

 

ou, concatenando

 

$sql = "UPDATE usuarios SET nivel_usuario = 1 WHERE usuario_id =".  $_GET['usuario_id'];

Compartilhar este post


Link para o post
Compartilhar em outros sites

Os erros nas linhas 31 e 34 foi solucionado concatenando como o colega shini explicou, mas os erros nas linhas 39 e 41 eu ainda nao consegui solucionar.

Eu criei a variavel $btn antes do while mas continua o erro...

Eu criei assim a variavel:

 

$btn = "";

 

Nao sei se é assim que se cria uma variavel vazia.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando eu clico em "liberar" por exemplo, a url muda para "admin/area_restrita.php?acao=liberar&id=2" mas não faz o update no banco de dados, continua aparecendo o botao "liberar", e ollhando na tabela usuarios no bd, permanece o valor 0, nao é atualizado para 1... nao sei se tem algo a ver isso, mas a coluna "nivel_usuario" é do tipo enum('0', '1').

Compartilhar este post


Link para o post
Compartilhar em outros sites

amigo desculpa mas eu não fiz esse code pra você encaixar ai, isso é o modo que deve seguir e dai você pode fazer suas mudanças.

 

se você não consegui solucionar abra outro post com o código, o erro onde e em que linha esta o erro para te auxiliar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu percebi que no code que voce postou eu tinha que fazer algumas pequenas alterações, eu fiz, e ao meu ver nao há algo de errado com o código, mas ele nao aplica o update no banco de dados..

 

O código ficou assim:

 

<?php

session_start(); // Inicia a session
include "functions.php"; // arquivo de funções.
include "config.php"; // arquivo de conexao com o bd.
session_checker(); // chama a função que verifica se a session iniciada da acesso à página.
 
echo "<head>
  <title>Painel Administrativo</title>
 </head>
<body>";
echo "Bem vindo <strong>". $_SESSION['nome'] ."</strong>!<br />
     Voce esta acessando a area de administracao de usuarios!
     <br /><br />";
?>

<?php

$res = mysql_query("SELECT * FROM usuarios") or die(mysql_error()); /*Executa o comando SQL, no caso para pegar todos os usuarios do sistema e retorna o valor da consulta em uma variavel ($res)  */
?>
<h1>Usuarios Cadastrados</h1>
<table width="600" border="2" cellspacing="0" cellpadding="1"><tr><td bgcolor="#B3E97C">ID</td><td bgcolor="#B3E97C">Nome do Usuario</td><td bgcolor="#B3E97C">Email do Usuario</td><td bgcolor="#B3E97C">Nivel do Usuario</td></tr>
<?php

/*Enquanto houver dados na tabela para serem mostrados será executado tudo que esta dentro do while */

if(isset($_GET['acao']) && !empty($_GET['acao'])){

if($_GET['acao'] == 'liberar'){

$sql = "UPDATE usuarios SET nivel_usuario ='1' WHERE usuario_id =".  $_GET['id'];
}else if($_GET['acao'] == 'bloquear'){

$sql = "UPDATE usuarios SET nivel_usuario ='0' WHERE usuario_id =". $_GET['id'];
}
}
while($escrever = mysql_fetch_array($res)){
if($escrever['nivel_usuario'] == 1){
$btn = "<a href='area_restrita.php?acao=bloquear&id=".$escrever['usuario_id']."'>Bloquear Acesso</a>";
}else{
$btn = "<a href='area_restrita.php?acao=liberar&id=".$escrever['usuario_id']."'>Liberar Acesso</a>";
}
 /*Escreve cada linha da tabela*/ echo "<tr><td>" . $escrever['usuario_id'] . "</td><td>" . $escrever['nome'] . "</td><td>" . $escrever['email'] . "</td><td>" . $btn . "</td></tr>"; }/*Fim do while*/

echo "</table><br /><br />"; /*fecha a tabela apos termino de impressão das linhas*/

echo "<a href=\"logout.php\">Sair</a>";
 
?>

Voce ou outro colega, poderiam me dizer o que há de errado nesse código que eu acabei de postar, para que assim eu possa alterar-lo?

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Verdade colega, agora consegui fazer o update, mas é estranho que eu tenho que clicar 2 vezes no botao, no primeiro clique apenas muda a url e no segundo clique é que de fato realiza o update.

Só preciso agora é entender o motivo de serem dois cliques ao inves de 1...

 

Abraços e obrigado.

 

----EDIT

 

Descobri o motivo dos dois cliques. quando eu clico 1 vez é executada a função do update mas a pagina não é atualizada, mas no banco de dados já está o update feito, mas eu preciso atualizar a pagina ou clicar no botao novamente para que o "liberar" seja trocado por "bloquear" na tabelinha onde é exibido todos os usuarios cadastrados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

quando seu array estiver entre aspas duplas, para acessar a chave remova as aspas simples ou concatene usando o (.)

 

troque:

 

 

$sql = "UPDATE usuarios SET nivel_usuario = 1 WHERE usuario_id = $_GET['usuario_id']";

 

 

para:

$sql = "UPDATE usuarios SET nivel_usuario = 1 WHERE usuario_id = $_GET[usuario_id]";

ou, concatenando

$sql = "UPDATE usuarios SET nivel_usuario = 1 WHERE usuario_id =".  $_GET['usuario_id'];

 

 

 

 

 

 

 

 

Também dá pra fazer assim: [inline]$sql = "update usuarios set nivel_usuario = 1 where usuario_id = {$_GET['usuario_id']};";[/inline]

 

Eu percebi que no code que voce postou eu tinha que fazer algumas pequenas alterações, eu fiz, e ao meu ver nao há algo de errado com o código, mas ele nao aplica o update no banco de dados..

 

O código ficou assim:

 

 

<?php

session_start(); // Inicia a session
include "functions.php"; // arquivo de funções.
include "config.php"; // arquivo de conexao com o bd.
session_checker(); // chama a função que verifica se a session iniciada da acesso à página.
 
echo "<head>
  <title>Painel Administrativo</title>
 </head>
<body>";
echo "Bem vindo <strong>". $_SESSION['nome'] ."</strong>!<br />
     Voce esta acessando a area de administracao de usuarios!
     <br /><br />";
?>

<?php

$res = mysql_query("SELECT * FROM usuarios") or die(mysql_error()); /*Executa o comando SQL, no caso para pegar todos os usuarios do sistema e retorna o valor da consulta em uma variavel ($res)  */
?>
<h1>Usuarios Cadastrados</h1>
<table width="600" border="2" cellspacing="0" cellpadding="1"><tr><td bgcolor="#B3E97C">ID</td><td bgcolor="#B3E97C">Nome do Usuario</td><td bgcolor="#B3E97C">Email do Usuario</td><td bgcolor="#B3E97C">Nivel do Usuario</td></tr>
<?php

/*Enquanto houver dados na tabela para serem mostrados será executado tudo que esta dentro do while */

if(isset($_GET['acao']) && !empty($_GET['acao'])){

if($_GET['acao'] == 'liberar'){

$sql = "UPDATE usuarios SET nivel_usuario ='1' WHERE usuario_id =".  $_GET['id'];
}else if($_GET['acao'] == 'bloquear'){

$sql = "UPDATE usuarios SET nivel_usuario ='0' WHERE usuario_id =". $_GET['id'];
}
}
while($escrever = mysql_fetch_array($res)){
if($escrever['nivel_usuario'] == 1){
$btn = "<a href='area_restrita.php?acao=bloquear&id=".$escrever['usuario_id']."'>Bloquear Acesso</a>";
}else{
$btn = "<a href='area_restrita.php?acao=liberar&id=".$escrever['usuario_id']."'>Liberar Acesso</a>";
}
 /*Escreve cada linha da tabela*/ echo "<tr><td>" . $escrever['usuario_id'] . "</td><td>" . $escrever['nome'] . "</td><td>" . $escrever['email'] . "</td><td>" . $btn . "</td></tr>"; }/*Fim do while*/

echo "</table><br /><br />"; /*fecha a tabela apos termino de impressão das linhas*/

echo "<a href=\"logout.php\">Sair</a>";
 
?>
Voce ou outro colega, poderiam me dizer o que há de errado nesse código que eu acabei de postar, para que assim eu possa alterar-lo?

 

Abraços.

 

 

Faça a consulta dos usuários depois da atualização. Mova a linha 19 para depois da linha 36.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora ficou funcionando perfeitamento!

 

Muito obrigado a todos, principalmente aos colegas Vinicius Rangel, Shini e Evandro Oliveira, sem a ajuda de voces eu nao teria aprendido tudo isso que aprendi.

 

Aqui está o código funcionando:

 

<?php

session_start(); // Inicia a session
include "functions.php"; // arquivo de funções.
include "config.php"; // arquivo de conexao com o bd.
session_checker(); // chama a função que verifica se a session iniciada da acesso à página.
 
echo "<head>
  <title>Painel Administrativo</title>
 </head>
<body>";
echo "Bem vindo <strong>". $_SESSION['nome'] ."</strong>!<br />
     Voce esta acessando a area de administracao de usuarios!
     <br /><br />";
?>


<h1>Usuarios Cadastrados</h1>
<table width="600" border="2" cellspacing="0" cellpadding="1"><tr><td bgcolor="#B3E97C">ID</td><td bgcolor="#B3E97C">Nome do Usuario</td><td bgcolor="#B3E97C">Email do Usuario</td><td bgcolor="#B3E97C">Nivel do Usuario</td></tr>
<?php

/*Enquanto houver dados na tabela para serem mostrados será executado tudo que esta dentro do while */

if(isset($_GET['acao']) && !empty($_GET['acao'])){

if($_GET['acao'] == 'liberar'){

$sql = mysql_query("UPDATE usuarios SET nivel_usuario ='1' WHERE usuario_id =".  $_GET['id'])or die(mysql_error());
}else if($_GET['acao'] == 'bloquear'){

$sql = mysql_query("UPDATE usuarios SET nivel_usuario ='0' WHERE usuario_id =". $_GET['id'])or die(mysql_error());
}
}

$res = mysql_query("SELECT * FROM usuarios") or die(mysql_error()); /*Executa o comando SQL, no caso para pegar todos os usuarios do sistema e retorna o valor da consulta em uma variavel ($res)  */

while($escrever = mysql_fetch_array($res)){
if($escrever['nivel_usuario'] == 1){
$btn = "<a href='area_restrita.php?acao=bloquear&id=".$escrever['usuario_id']."'>Bloquear Acesso</a>";
}else{
$btn = "<a href='area_restrita.php?acao=liberar&id=".$escrever['usuario_id']."'>Liberar Acesso</a>";
}
 /*Escreve cada linha da tabela*/ echo "<tr><td>" . $escrever['usuario_id'] . "</td><td>" . $escrever['nome'] . "</td><td>" . $escrever['email'] . "</td><td>" . $btn . "</td></tr>"; }/*Fim do while*/

echo "</table><br /><br />"; /*fecha a tabela apos termino de impressão das linhas*/

echo "<a href=\"logout.php\">Sair</a>";
 
?>

Muito Obrigado mesmo!

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.