Mini Curso PHP
- 17/01/2009
Mini Curso de PHP – Sistema de notícias (Atualizar usuário) – Aula 14
Olá pessoal!! Hoje vamos fazer mais uma aula de nosso mini-curso. Para concluirmos as etapas básicas com Mysql, falta apenas saber como atualizar os dados do banco de dados.
Estas etapas básicas são chamadas de CRUD, veja este link da Wiki para mais detalhes: http://pt.wikipedia.org/wiki/CRUD
Você já aprendeu que para inserir dados no banco usa-se o comando INSERT;
Você já aprendeu que para selecionar dados do banco usa-se o comando SELECT;
Você já aprendeu que para apagar dados do banco usa-se o comando DELETE;
Falta apenas o UPDATE.
O comando UPDATE serve para atualizar dados do banco de dados. Veja abaixo a sintaxe do comando:
-
UPDATE nome_da_tabela SET campo1 = valor, campo2 = valor, campo10 = valor
Mas, executando o comando acima, TODOS os registros desta tabela serão afetados. Para que o UPDATE seja em um(alguns) registro(s) específico, utilizaremos a cláusula WHERE e definiremos um critério(geralmente utilizamos o campo ID). Veja abaixo como ficará o comando:
-
UPDATE nome_da_tabela SET campo1 = valor, campo2 = valor WHERE campo_criterio = valor_criterio
Para ver a documentação completa deste comando SQL: http://dev.mysql.com/doc/refman/5.0/en/update.html
Então vamos fazer a edição dos dados dos usuários do nosso sistema. Vamos fazer da seguinte forma:
l Na listagem dos usuários(usuarios_lista.php) vamos criar um link para um formulário(usuarios_edita_formulario.php) passando o ID do usuário via GET, este arquivo carregará os dados do usuário em um formulário;
l Precisaremos criar um arquivo que será responsável por executar o comando UPDATE no usuário correto.
O link na listagem vai ser muito parecido com o link que criamos para fazer o DELETE. Veja abaixo como ficou o arquivo usuarios_lista.php:
-
<?
-
# ===— Inclui o arquivo que faz a conexão com o banco de dados
-
require(‘banco.php’);
-
?>
-
<h1>Lista dos usuários do sistema</h1>
-
<?
-
# ===— Monto o comando SQL que faz a busca dos usuários
-
$sql = ‘SELECT id, nome, email FROM usuarios’;
-
-
# ===— Executando o SQL
-
-
# ===— Recupero o total de registros encontrados
-
-
# ===— Imprimo o total de registros
-
echo "Total de usuário cadastrados no sistema: $total_de_usuarios <BR><BR>";
-
-
# ===— WHILE enquanto o comando for verdadeiro, ou seja, enquanto existir registros a serem exibidos.
-
-
# ===— Declaro as variáveis com os dados que estavam gravados no banco de dados
-
$nome = $linha[‘nome’];
-
$email = $linha[‘email’];
-
$id = $linha[‘id’];
-
-
# ===— Imprimo o nome e e-mail
-
echo "<b>$nome</b> (<a href=’mailto:$email’>$email</a>) – [ <a href='usuario_delete.php?id=".$id."'>Apagar</a> - <a href='usuario_edita_formulario.php?id=".$id."'>Editar</a> ]<BR>";
-
-
}
-
?>
Apenas a linha 28 teve alteração.
Teste em seu navegador e verifique se o link esta funcionando corretamente. Veja abaixo uma imagem da minha tela:
Agora precisamos fazer o arquivo que exibirá os dados do usuário em um formulário. Vamos duplicar o arquivo ‘usuario_formulario.php’ e renomear a cópia para ‘usuario_edita_formulario.php’. Pois assim não precisamos fazer o formulário novamente
Veja abaixo como vai ficar o usuario_edita_formulario.php, abaixo explicarei o código:
-
<?
-
# ===— Inclui o arquivo que faz a conexão com o banco de dados
-
require(‘banco.php’);
-
-
# ===— Recebemos o ID do usuário para poder selecionar os dados do banco de dados
-
$id = $_GET[‘id’];
-
-
-
$sql = "SELECT * FROM usuarios WHERE id = $id";
-
-
} else {
-
echo "Usuário não encontrado!<BR><BR><a href=’usuario_lista.php’>Voltar</a>";
-
}
-
-
?>
-
<h1>Edição de usuários</h1>
-
-
<form name="form1" action="usuario_edita.php" method="POST">
-
<input type="hidden" name="id" value="<?=$dados['id']?>">
-
Nome: <input type="text" name="nome" id="nome" maxlength="50" value="<?=$dados['nome']?>" /><BR>
-
E-mail: <input type="text" name="email" id="email" maxlength="50" value="<?=$dados['email']?>" /><BR>
-
Usuário: <input type="text" name="usuario" id="usuario" maxlength="12" value="<?=$dados['usuario']?>" /><BR>
-
Senha: <input type="text" name="senha" id="senha" maxlength="12" value="<?=$dados['senha']?>" /><BR>
-
<BR>
-
<input type="submit" value="Enviar" />
-
</form>
-
<?
-
} else {
-
# ===— Reclama que o ID esta incorreto
-
echo "Informe um ID válido!<BR><BR><a href=’usuario_lista.php’>Voltar</a>";
-
}
-
?>
Linha 3: Chamamos o arquivo que faz a conexão com o banco de dados
Linha 6: Recebemos o ID que foi passado via GET.
Linha 8: Verificamos se o parâmetro passado(ID) é válido, ou seja, se ele for numérico significa que possivelmente é um ID.
Linha 10/11: Selecionamos os dados do usuário, repare que não especificamos os campos que serão recuperados… utilizamos o coringa * para trazer TODOS os campos.
Linha 13: Verificamos se a variável $sql não esta vazia.
Linha 14: Caso ela não esteja vazia, transformamos ela em um array() com os dados do usuário.
Linha 16: Caso ela esteja vazia, informamos o erro;
Linha 17: Matamos o script, para ele não exibir o formulário em branco.
Linha23: Iremos definir o ‘action’ sendo o arquivo ‘usuario_edita.php’, pois ele será responsável por fazer o UPDATE.
Linha 24: Criamos um campo do tipo HIDDEM(oculto) com o ID do usuário. Pois precisamos passá-lo para o arquivo fazer o UPDATE corretamente.
Linha 25/26/27/28: Incluímos o atributo ‘value’ em todos os campos, eles recebem o valor correspondente retornado do banco de dados. Resumindo: Faz com que o formulário carregue com os dados do usuário.
*OBS 1: O Comando PHP <?=?> é um atalho para <? echo ?>
*OBS 2: Lembre de mudar o campo senha do tipo password para text.
Linha 35: Exibe erro caso o ID não seja numérico.
Agora já da pra testar!!! Clique em ‘Editar’ de algum usuário e veja se o sistema vai se comportar corretamente. Veja uma imagem do meu computador:
Perfeito, agora falta fazer o arquivo ‘usuario_edita.php’. Ele precisa ser assim:
· Receber os dados do formulário;
· Executar o UPDATE;
· Mostrar mensagem de sucesso ou erro;
Então veja abaixo como ficou o arquivo:
-
<?
-
# ===— Inclui o arquivo que faz a conexão com o banco de dados
-
require(‘banco.php’);
-
-
# ===— Verificamos se a pessoa preencheu todos os campos
-
-
# ===—- Recupero os dados do formulário
-
$id = $_POST[‘id’];
-
$nome = $_POST[‘nome’];
-
$email = $_POST[‘email’];
-
$usuario = $_POST[‘usuario’];
-
$senha = $_POST[‘senha’];
-
-
# ===— Monto o comando SQL que faz o UPDATE no banco de dados
-
$sql = "UPDATE usuarios SET nome = ‘$nome’, email = ‘$email’, usuario = ‘$usuario’, senha = ‘$senha’ WHERE id = $id";
-
-
# ===— Executando o SQL
-
-
# ====— Vejo se o comando foi executado com sucesso
-
if($sql){
-
echo ‘Usuário editado com sucesso. <BR><BR><a href="usuario_lista.php">Clique aqui</a> para ver a lista de usuários cadastrados.’;
-
} else {
-
}
-
-
-
} else {
-
echo ‘Por favor preencha todos os campos. <BR><BR>Clique <a href="usuario_formulario.php">aqui</a> para voltar.’;
-
}
-
?>
Vou comentar apenas as linhas mais importantes:
Linha 6: Testamos se todos os dados foram digitados;
Linha 16: Monto o SQL conforme o comando que aprendemos no inicio da aula. Lembrando de definir uma clausula no WHERE, caso não tivesse definido, os dados digitados no formulário seriam aplicados para TODOS os usuários do sistema.
Como eu sempre falo, estamos fazendo um MINI-CURSO. Claro que poderíamos implementar este sistema de diferentes maneiras(até mais corretas), mas a idéia deste curso é você ter uma introdução ao PHP. Se tiver dúvidas ou sugestões por favor é só postar.
Um grande abraço.


(5 votos, média: 4.60 de 5)


14 Comentários to “Mini Curso de PHP – Sistema de notícias (Atualizar usuário) – Aula 14”
Olá Marcelo, estou verificando o código para atualização de usuários e no arquivo usuario_edita_formulario.php na definição da variável ‘id’ pela global GET estranhamente está retornando um erro de sintaxe. Mais exatamente, estou usando o seu código customizado, para treinar. Será que comi mosca em alguma aula anterior?.
Meu código está assim:
<?
//Inclui o arquivo que faz a conexão com o banco de dados
require(‘banco.php’);
//Recebemos o ID do usuário para poder selecionar os dados do banco de dados
$id = $_GET['id'];
//if(is_numeric($id)){
$sql = “SELECT * FROM noticias WHERE id = $id”;
$sql = mysql_query($sql);
if(!empty($sql)){
$dados = mysql_fetch_array($sql);
} else {
echo “Notícia não encontrada!Voltar“;
die();
}
}
?>
Edição de usuários
<input type=”hidden” name=”id” value=”">
Nome: <input type=”text” name=”nome” id=”nome” maxlength=”50″ value=”" />
Sobrenome: <input type=”text” name=”sobrenome” id=”sobrenome” maxlength=”50″ value=”" />
Cidade: <input type=”text” name=”cidade” id=”cidade” maxlength=”50″ value=”" />
Estado: <input type=”text” name=”estado” id=”estado” maxlength=”12″ value=”" />
E-mail: <input type=”text” name=”email” id=”email” maxlength=”12″ value=”" />
Título: <input type=”text” name=”titulo” id=”titulo” maxlength=”50″ value=”" />
Subtítulo: <input type=”text” name=”subtitulo” id=”subtitulo” maxlength=”50″ value=”" />
Texto: <input type=”textarea” name=”texto” id=”texto” maxlength=”50″ value=”" />
<?
} else {
//Reclama que o ID esta incorreto
echo “Informe um ID válido!Voltar“;
}
?>
Por Patrick (1 comments) em 18/01/2009
Vlw, kra.
Vou ver se assim, como vc, eu consiga postar sempre.
Abraços,
Por Michael Mafort (7 comments) em 18/01/2009
É isso ai kra… se precisar de ajuda é só falar!!
Você tem conhecimento pra caramba pra compartilhar!! estou com intenção de postar muitas coisas novas quando começarmos a estudar para certificação… podemos fazer uma parceria heheheheh
Abração!
Por Marcelo Sabadini (109 comments) em 18/01/2009
Ola tudo bom Patrick?
Bom, primeiramente muito obrigado por estar acompanhando o mini curso.
Faça o seguite para ele ficar correto:
1) Verifique todas as aspas, pois quando der CTRl+C e CTRL+V, na verdade as aspas são substituidas por acentos( o plugin que gera o codigo colorido no meu blog faz isso =/ ).
2) Vi que vc comentou a linha que tem o IF para validar se o ID é numérico! Descomente-a ok?
3) Depois do die(), feche apenas uma }(chave). Ao fechar mais uma, você esta fechando o IF que faz a validação do ID ser numérico!
Fazendo isto seu script vai ficar 100%!!!
QQ coisa é só postar!!
Abraçao!!!
Por Marcelo Sabadini (109 comments) em 18/01/2009
Marcelo! Coloquei no meu usuario_cadastro.php
ao inves da tag input um select porem nao sei como pega os dados do value depois pois diz que falta preencher o campo. Vlw!
Por Alessandro Coelho (5 comments) em 22/03/2009
Boa noite Alessandro tudo bem?
Primeiramente muito obrigado por acessar meu site… e pelo elogio!!!
Bom, em relação a gravar datas no Mysql tem um pequeno detalhe. O formato que o banco de dados armazena campos do tipo DATE é o seguinte: YYYY-mm-dd.
Então quando vc tem um campo que recebe dd-mm-YYYY vc tem que formatar para ficar no formato esperado pelo banco.
A forma mais facil que eu acho é a seguinte:
Agora a variável $data_formatada esta prontinha para ser inserida no Mysql.
Mas, lembre-se de tratar a data caso seja DATETIME. Você terá que separar a hora e inserir na $data_formatada.
Espero ter ajudado.. Um grande abraço!
Por Marcelo Sabadini (109 comments) em 22/03/2009
Deu certo.. era apenas um erro no usuario_cadastro.php !
Fui
Por Alessandro Coelho (5 comments) em 22/03/2009
Eu fiz mesmo um VARCHAR pra gravar a data.. bem facinhu. No DATE ainda fico pra aprender =D
Por Alessandro Coelho (5 comments) em 23/03/2009
Marcelo! + uma coisa! Desculpe-me pelo flood..
Caso eu queira que crie contas para que eu possa fazer um login e definir quem tem acesso para postar as noticias eu teria que criar uma tabela tipo boolean, certo? Numeric do tipo BOOL? Se voce pudesse mostrar depois como fazer a pagina de login seria otimo! Flws
Por Alessandro Coelho (5 comments) em 23/03/2009
@Alessandro Coelho.. eu não recomendo usar varchar.
Pois se vc precisar filtrar por data vai ser uma dor de cabeça.. por exemplo:
– pegar registros em um intervalo de data
– Ou pegar os registros do mes X;
pensa em fazer um sistema de notícias que vc vai listar as notícias mais acessadas da mesma data soh q do ano passado. Seria uma dor de cabeça grande hehehehe
Abraços!!!
Por Marcelo (3 comments) em 23/03/2009
Marcelo, boa tarde!
Estou começando a programar em PHP e estou com uma dúvida, montei a estrutura de acordo com as suas informações, porém o comando value=”"> não está apresentado os valores vindos do banco e com isto o update não funciona, pode me dar um help.
Saudações
Por Ferrari (1 comments) em 27/11/2009
nossa adorei estou estudando aqui em casa esta dando certo!!
bom num projeto que eu fiz pro pf de CRM era fazer um sistema que ao cadastrar no site perfumaria, ele cairia ja nas perguntas feito direto no banco de dados e phpadm e deu certo só que dai, ele queria saber a porcentagem de cada resposta de cada cliente!!!
mais nós só conseguiamos puxar o nome da pessoa, a pergunta e a resposta e eu queria aprender isto como é que puxo a porgentagem de resposta de cada cliente??
o banco de dados era:
clientes: id_cliente, nome, endereco
e ao se registrar cairia na tabela de pergunta
que era: codigo_pergunta, pergunta
e a tabela de respostas
codigo_resposta, codi_cliente,codi_pergunta, resposta.
nós só conseguimos fazer assim:
pussar o codigo do cliente, o nome do cliente, as perguntas e as resposta!!
mais ele queria com a porgentagem poderia dar uma aula sobre essa parte??/
Por Kelly (1 comments) em 11/06/2010
Carinha que postou isso.. valeu mesmo… me ajudou muito no meu estagio.. obrigado
Por eduardo meneses (2 comments) em 23/11/2011
preciso de ajuda, fiz meu código praticamente igual o seu de atualizar, quando vou alterar ele mostra “Dados alterados com sucesso”, mas no banco não mostra atualizado
Por eduardo meneses (2 comments) em 24/11/2011