segunda-feira, 20 de fevereiro de 2017

UPDATE DE UM REGISTRO

UPDATE DE UM REGISTRO

Atenção: espaços foram inseridos depois do sinal de abertura das tags e no final < > para não ser interpretado pelo blogger.

Quando precisarmos alterar um registro devemos em primeiro lugar localizá-lo, selecioná-lo e depois alterá-lo utilizando o comando sql update.
Vamos imaginar que queiramos alterar os dados do usuário. Mas, a que registro essa alteração afetará? Como não cometer um erro de alterar todos os usuários?
Vamos seguir a ideia do cadastro anterior, onde mencionei que alguém com permissões determinaria se o usuário seria administrador, e/ou aprovar o cadastro do usuário.
Logo precisamos identificar o usuário. Então nesse modelo, após abrir a tag do form, determinar o arquivo que executará a instrução do update, precisamos chamar nossa tabela do banco para selecionar o registro a ser alterado. Para chegar a ter acesso ao banco, anteriormente, ou pode ser agora chamamos o nosso arquivo de conexão do banco, o conecta_banco.php.

< form name="caduser" method="POST" action="../salva/salva_aprova_usuario.PHP" >
< ?PHP
include ("conecta_banco.PHP");
Através de uma variável, nesse modelo chamado query ou outro nome usaremos a função do PHP mais o sql para selecionar a tabela e os registros. Asterisco para todos ou pela WHERE restringimos a condição do registro:
$query = mysql_query("SELECT * FROM users");
? >
Agora pela tag label digitamos o texto que queremos ver na tela.
[< label for="">Selecione usuario< /label > 
Seguimos com a tag do Select, só que em vez do select abrir uma lista predefinida (options), a seleção vai ocorrer com os dados da tabela. Observe que o atributo “name” que vamos nos referir na próxima página sai do select, nesse exemplo ‘id’.
< select name="id" >
< option name="">Selecione...< /option >
Com o “while” faremos uma análise dos dados e se a condição for verdadeira executa o que vier dentro das chaves. Então, While($a ou $um_nome_qualquer igual função mysql_fetch_array ($query)) ajudando para compreender mysql_fetch(busca) array(conjunto)= Temos um conjunto de dados em $query = mysql_query("SELECT * FROM users");.
< ?php while($a = mysql_fetch_array($query))
Se sim, então vamos mostrar. Mostrar o quê? Pelo comando php echo a busca da variável que chamamos de “$a” e a coluna da tabela que queremos passar adiante, para a página que executará o update. Nesse caso [‘id’] id do usuario.
{ ?  >
< option value="< ?
php echo $a['id'] ? >"  >
E ainda o que estará visível no select. Nesse caso por exemplo, mostrar o “id” não ajudaria pois quem é o usuario do id1, id2… difícil saber, então melhor selecionar o usuário pelo seu e-mail por exemplo [‘email’]. Fecha-se o option e o select e a }
< ?PHP echo $a['email'] ?>< /option >
< ?PHP } ?  >
< /select  >
 
Nessa nossa brincadeira vamos alterar também a situação do usuário de inativo para ativo. Digamos que as situações possíveis também não vem de options html e sim de uma tabela do banco chamada de cdsituacao.

< ?PHP
$query = @mysql_query("SELECT * FROM cdsituacao");
? >
< label for="">Selecione situacao< /label>
< select name="situacao" >
< option name="">Selecione...< /option>
< ?PHP while($setor = mysql_fetch_array($query)) { ? >
< option value="">< /option>
< ?PHP } ?>
< /select>

Para misturar possibilidades agora usamos opções de options.
< label>Administrador:< /label>
< select name="admin" >
< option>Sim< /option>
< option selected>Não< /option>

< input type="submit" value="Liberar" />
< input type="button" name="cancela" value="Cancelar" onclick="window.location.href='admin.PHP'"/>
< /form>
Teremos uma tela mais ou menos assim, obviamente conforme o tratamento dado por css a página:

< ?php
include "../conecta_banco.php";
$id=$_POST['id'];
$admin=$_POST['admin'];
$situacao=$_POST['situacao'];
$sql = @mysql_query("UPDATE users SET admin ='$admin', situacao = '$situacao' WHERE id ='$id'");
echo "Cadastro alterado com sucesso!";
?>

INSERINDO DADOS NO BANCO

INSERINDO DADOS NO BANCO

Atenção: espaços foram colocados depois do < das tags para não serem interpretados pelo blogger. Cuidado ao copiar o código, não tem espaço depois da abertura da tag.

Para exemplificar criaremos um formulário de cadastro de usuários e uma tabela no banco para guardar esses dados:

< form action="salva/salva_usuario.PHP" method="POST" name="caduser"> < /form>
< label>Nome:< /label>
*< input name="nome" size="40" type="text" />
< label>Email ou nome de usuario:< /label>
< input name="email" size="25" type="text" />
< label>Senha:
< input name="senha" size="10" type="password" />
< input type="submit" value="Cadastrar" />
< input type="reset" value="Limpar" />
< input name="cancela" onclick="window.location.href='painel.PHP'" type="button" value="Cancelar" />
*Atributos mínimos. Inclua a seu conhecimento de html outros atributos.
Alguns comentários:
method="POST": temos dois metodos de fazer o envio dos dados do formulários dentro do PHP. GET ou POST. Para mais detalhes sobre um ou outro pesquise sobre o assunto. Por enquanto guarde a ideia que como POST os dados são enviados sem estar visíveis na url de redirecionamento da página.
action="salva/salva_usuario.PHP": para qual pagina os dados do formulário serão enviados. Pode ser para a mesma página ou para outra como no exemplo onde vamos chamar outra página salva_usuario.PHP.

Enviamos então nome, e-mail e senha através do atributo “name” para outra página pelo POST e agora na nova página vamos recepcionar esses dados e criar variáveis que guardarão essas informações.

#manda ler o arquivo de conexão do banco
include "conecta_banco.php";
#Recolhe através da variável superglobal $_POST os dados do formulário do atributo “name” “nome”, e-mail” e “senha”.
$nome=$_POST['nome'];
$email=$_POST['email'];
$senha=$_POST['senha'];
# uma variavel com nome qualquer (nesse caso $sql) e através do mysql_query inserimos o SQL para gravar os dados.
$sql = @mysql_query("INSERT INTO users(nome, admin, email, senha, situacao)
VALUES('$nome', 'Não', '$email', MD5('$senha'), 0)");
echo "Cadastro efetuado com sucesso!";
?>
Inserir em tabela de nome users nos campos: nome, admin, e-mail, senha e situação os VALUES(valores) das variáveis que armazenaram os dados do formulário.
Obs1: Note que nem todos os dados precisam vir de variáveis. Quando inicialmente queremos passar um valor padrão podemos declarar direto nos valores do INSERT. Nesse exemplo, em vez de perguntar no formulário se o novo usuário seria administrador, inserimos um valor padrão ‘Não’ e um administrador no futuro decide se esse usuário será administrador ou não.
Obs2: poderia ser declarada uma variável acima, mesmo que os dados não proviessem de um formulário, nesse caso, por exemplo: $admin=‘não’, $situação=0. O desenvolvedor pode escolher sua forma de trabalhar. (se valor da variável for texto escreva dentro de aspas simples e se for numérico sem aspas).
Obs3: O que faz esse @? Na verdade o PHP evoluiu para mysqli, a arroba é um truque que contorna esse problema em algumas funções nas atuais versões do PHP. Porém, se você for iniciante recomenda-se se habituar ao mysqli.
Obs4: Para tranquilizar o usuário devolvemos uma mensagem de que tudo foi realizado com sucesso através do “echo”. Cadastro efetuado com sucesso!". De fato, se tudo ocorreu bem no sql e o sistema não retornar outro erro, a execução chegou ao “echo” há de se supor que tudo ocorreu bem. Não é de todo confiável, mas por hora vamos acreditar que se a mensagem vier à tela, tudo foi bem.
Obs5: A certeza que os dados foram gravados se dará consultando a base de dados. A partir do momento, que executado vários testes sempre se repete a gravação no banco, podemos ter confiança que a instrução está correta.
Obs6.: MD5('$senha'). MD5 é uma forma de criptografar senhas. Dessa forma, ao ler a tabela ninguém sabe qual a senha real do usuário. Comentaremos mais adiante sobre isso.

Agora chegou a hora de criar a tabela no nosso banco. Para demonstrar usaremos o banco criado de nome loja. Veja que ao clicar no sinal de + do banco temos uma opção new para chamar a tela de criação de uma tabela. Oferecemos um nome para a tabela, e opcionalmente quantas colunas terá essa tabela. Não se preocupe, pois inserir novas colunas podem ser feitas depois.


Após executar, insira pelo menos o nome da coluna, tipo de dados, tamanho, colação se for tipo texto, e para um deles, geralmente o primeiro que seja de índice primário e marque A.I. (autoincremento).

Para nosso formulário e para nosso sql funcionar e os dados ficarem gravados em uma tabela de um banco precisamos criar uma coluna com identificador nesse caso id, tipo INT, tamanho 4 (comportará até 9999 usuários), índice primário e autoincremento para não precisarmos inserir dados nesta coluna, o banco cria sequencialmente o próximo ID. Nomes que usamos no INSERTO TO nome, admin, e-mail, senha.


Obs.: após clicar em guardar os dados a tabela será criada e listada na barra esquerda.
Na barra superior, quando clicamos sobre o nome da tabela, o ícone procurar listará alguns campos já lançados. O caminho estrutura usa-se para incluir/alterar as colunas da tabela. Mais adiante iremos ver outras funções.


Após isso, rode o arquivo no navegador e verifique no phpmydmin se os dados estão sendo gravados na tabela. Importante, clique em Procurar para dar uma recarregada na tela.


Se tudo estiver dado certo, terás a primeira inserção no banco. Parabéns. Caso contrário reveja os códigos, se os nomes das variáveis estão certo, os nomes no sql e nas colunas da tabela.

segunda-feira, 6 de fevereiro de 2017

Conexão do banco de dados com as páginas html+php

Criado o banco nosso desejo é a ligação entre os dados de nosso formulário com o banco ou base de dados. É desejável criar o script de ligação ao banco num arquivo e depois chamá-lo quando necessário do programar em toda página que acessar o banco essa ligação. Se por algum motivo mudarmos o nome do banco, do usuário, a senha, etc será trabalhoso mudar em todos arquivos. Faremos a requisição da leitura do arquivo de conexão ao banco através do include "nome_do_arquivo.PHP";. Então se nomearmos o arquivo de conexão como conecta_banco.PHP a chamada será .
Um jeito de criar um arquivo de conexão é esse:
# Uma variável onde informa a localização do computador que armazena o banco. Pode ser indicado simplesmente localhost ou IP da máquina que guarda o banco. A segunda opção seria utilizada caso os arquivos PHP estão em outra máquina e não na mesma onde se encontra o banco. 
$host = "localhost";
# Uma variável onde informa o usuário do banco. Na verdade do gerenciador do banco.
$user = "root";
# Uma variável onde informa a senha do banco. Na verdade do gerenciador do banco.
$pass = "usbw";
# Uma variável onde informa o nome do banco.
$banco = "loja";
#Agora numa variável usaremos a função PHP que permite a conexão e referenciamos as variáveis que mysql_connetct deve ler. E ainda or die caso não encontre dados válidos para uma das variáveis.
$conexao = mysql_connect($host, $user, $pass) or die(mysql_error());
#Agora numa variável usaremos a função PHP que seleciona o banco.
mysql_select_db($banco) or die(mysql_error());
# Esse conjunto de linhas informa qual o conjunto de caracteres será usado (opcional. Importante em situações onde mesmo usando colation no banco, como por exemplo utf-8 os dados são gravados sem respeitar os acentos, cedilha, etc).
header('Content-Type: text/html; charset=utf-8');
mysql_query("SET NAMES 'utf8'");
mysql_query('SET character_set_connection=utf8');
mysql_query('SET character_set_client=utf8');
mysql_query('SET character_set_results=utf8');
?>
Lembrando que a tag do PHP é dada dentro do
< ?php código ? >

segunda-feira, 30 de janeiro de 2017

PHP - GUIA INICIAL

APRESENTAÇÃO:

Esse trabalho objetiva ser um guia para iniciantes. Queremos dar ao iniciante o gostinho de montar um projeto que funciona para depois, através de mais e mais estudos, encontrar outras formas de fazer e criar sistemas em PHP com qualidade e segurança. A partir desses códigos muitas implementações e variações podem ser efetuadas. A abordagem consiste em passar uma ideia de como fazer algumas telas de um projeto. Não temos o objetivo de entrar a fundo na teoria do PHP, mas apenas oferecer para iniciantes um jeito de fazer. Para quem conhece a linguagem, essa apostila ficará aquém de ser um bom guia em PHP, mas deixo esse trabalho como ajuda para quem possa necessitar de uma referência.
O PHP precisa do HTML para desenhar a interface com o usuário. Então, para fazer um projeto o estudante precisa conhecer pelo menos as tags de formulário e de estrutura de um arquivo HTML.
Para permitir que um projeto PHP armazene e acesse informações de um banco de dados, devemos conhecer um pouco de SQL. O Mysql entra na jogada como o sistema de banco de dados mais usado na integração com o PHP, mas nada impede que se use outros gerenciadores de banco de dados como Firebird, Postgre ou soluções pagas de SQL.

SERVIDOR WEB

Ao contrário de um arquivo html que o navegador se encarrega de interpretar e devolver na tela a interface “desenhada” para que o PHP funcione precisamos que um servidor interprete os códigos e faça a devidas ações que o código propõe. Para isso existem muitas soluções que implementam servidores PHP, incluindo MYSQL, APACHE. Nada impede que o usuário por conta própria instale separadamente as ferramentas mas, não é o caminho mais fácil de fazer. Então, para o Windows encontramos os aplicativos Xampp, Wamp, Easyphp, USBWebserver, etc.
Para quem quer estudar PHP sem se deter nos pormenores da instalação do servidor sugiro baixar o USBWebServer por ser portátil e assim ficar mais fácil no início ver o seu projeto tomar corpo. Os demais pacotes são mais susceptível a erros de configuração, o que exige um certo tempo para otimizá-los mas, eles têm a vantagem de serem mais rápidos na resposta do servidor.
Para essa apostila o USBWebserver será utilizado. Procure na internet pelo aplicativo USBWebServer e faça o download. Após feito o download e a descompactação do USBWebserver execute o arquivo usbwebserver.exe, aguarde um momento e quando o Apache e o Mysql ficarem com o logotipo de status verde, está tudo pronto para começar a usar o sistema.

O botão de Root dir levará o usuário para dentro da pasta onde deverão ficar os arquivos .php do projeto; o Localhost abrira o navegador para carregar o arquivo index.PHP do seu projeto e o botão PHPMyAdmin abrirá no navegador o acesso ao gerenciador de banco de dados Mysql.


 CRIAR E CONECTAR A UM BANCO


Uma das primeiras alegrias que o estudante tem é ver que os códigos escritos e o conteúdo inserido nos formulários gravem no banco de dados. Para chegar a essa etapa, precisamos fazer com que o servidor PHP possa fazer uma conexão com sucesso entre as páginas html mais PHP com o Mysql. Então, antes de mais nada precisamos da existência de um banco, com suas devidas tabelas e campos criados. Veja no arquivo acessório como instalar um servidor PHP, o mysql e como criar um banco com mysql.
Trabalhar isso dentro dessa apostila seria trabalho desnecessário já que existem materiais muito bons que ensinam como fazer.
Apenas a criação de um simples banco será feita para trabalhar durante o desenvolver deste trabalho. Maiores detalhes sobre tipos de dados de um banco, procure estudar mais sobre banco de dados.


Ao clicar no botão do PHPMyAdmin a tela de acesso ao gerenciador se abrirá e a menos que já tenha sido alterada a senha de usuario o utilizador será root e a senha (palavra-passe) será usbw. (Importante: num sistema comercial é importante alterar essa senha para evitar invasões, e também o ideal é criar um novo usuário para conexão com o banco, já que o root deve ser preservado para administradores do sistema de gerenciamento).

A barra lateral esquerda temos a listagem de bancos criados e na barra superior alguns controles sobre ferramentas de bancos. 

 
 
Para criar um banco use essa barra superior clicando em Base de Dados. Será solicitado o nome do banco e a colattion deste. Recomendo usar Utf8_general_ci. Trata-se da codificação dos caracteres evitando aqueles desagradáveis caracteres estranhos na escrita de acentos, cedilhas, etc. Finalize clicando em Criar.



Ao atualizar a tela receberás a mensagem de criação do banco e na lateral esquerda aparecerá o seu banco recém-criado. Agora é hora de partir para criar uma tabela. Insira o nome da tabela e o número de colunas desejado para a tabela.
Na tela de nomeação dos campos (colunas) atente-se a marcar a coluna de identificação índice Primary e A.I.