CPANEL primeiros passos

O que é o Cpanel?

CPanel é um painel de controle baseado em web, cheio de recursos, que permite administrar seu domínio numa interface web. A idéia é dividir, igualmente, o controle e a responsabilidade de administrar seu site com você. Você tem a habilidade de administrar todos os aspectos de e-mail, arquivos, backup, FTP, script de CGI, e estatísticas do web site.

Como se logar?

Você precisa se logar para usar o CPanel e administrar seu Site.

Para se logar:

1. Digite o endereço de seu CPanel em seu navegador. O endereço precisa estar da seguinte forma http://www.seudominio:2083 ou https://www.seudominio/cpanel

2. Digite seu nome de usuário e senha nos campos Nome de Usuário e Senha.

3. Clique no botão OK. Pronto agora você está logado no CPanel.
Trocando a Senha de Acesso ao CPanel:

Sua senha de domínio é a mesma que você usa para logar em seu CPanel. É recomendável alterar a senha ocasionalmente para maximizar a segurança do seu site. Você devesempre mudar sua senha caso ache que outra pessoa tenha acesso a sua conta.

Para mudar a senha do seu domínio:

1. Clique no botão Alterar Senha na página inicial.

2. Digite sua senha atual no campo Senha Antiga.

3. Digite a nova senha nos campos Nova Senha e Nova Senha (repetir).

4. Clique no botão Mudar sua senha agora!. Sua senha terá sido modificada.

O QUE E HTML

HTML é a “língua mãe” do seu navegador.

Resumindo uma longa história, HTML foi inventado em 1990 por um cientista chamado Tim Berners-Lee. A finalidade inicial era a de tornar possível o acesso e a troca de informações e de documentação de pesquisas, entre cientistas de diferentes universidades. O projeto inicial tornou-se um sucesso jamais imaginado por Tim Berners-Lee. Ao inventar o HTML ele lançou as fundações da Internet tal como a conhecemos atualmente.

HTML é uma linguagem que possibilita apresentar informações (documentação de pesquisas científicas) na Internet. Aquilo que você vê quando abre uma página na Internet é a interpretação que seu navegador faz do HTML. Para visualizar o código HTML de uma página use o menu “View” (Ver) no topo do seu navegador e escolha a opção “Source” (Código fonte).

Para quem não conhece, o código HTML pode parecer complicado, mas este artigo irá tornar as coisas claras para você.

 

Para que devo usar o HTML?

Se você quer construir websites terá que conhecer HTML. Mesmo que você use um programa para criar seu website, tal como o Dreamweaver, um conhecimento básico de HTML será necessário para tornar as coisas mais simples e para criar um website de melhor qualidade. A boa notícia é que HTML é fácil de aprender e de usar.

HTML é usado para construir websites!

E a sigla HTML?

  • Hyper é o oposto de linear. Nos tempos antigos – quando mouse era apenas um rato caçado por gatos – os programas de computadores rodavam linearmente: quando o programa executava uma ação tinha que esperar a próxima linha de comando para executar a próxima ação e assim por diante de linha em linha. Com HTML as coisas são diferentes – você pode ir de onde estiver para onde quiser. Exemplificando: não é necessário que você tenha visitado o site MSN.com antes de visitar o site HTML.net.
  • Text é texto e não há mais nada a acresentar.
  • Mark-up significa marcação e é o texto que você escreve. Você cria a marcação da mesma forma que escreve em um editor seus cabeçalhos, marcadores, negrito, etc
  • Language significa linguagem e é exatamente o que HTML é; uma linguagem. A linguagem HTML usa muitas palavras do inglês.

SISTEMA DE LOGIN PHP E MYSQL

Hoje vou ensinar a criar um sistema de login simples usando PHP e MySQL.

É recomendável que você já tenha um conhecimento prévio de HTML e, se possível, PHP e MySQL para tornar as coisas mais fáceis.

Nosso sistema será bem simples: um arquivo chamado seguranca.php, que deverá ser incluído no topo do seu site (em todas as páginas) e que faz a conexão com o banco de dados e que possui algumas funções usadas para redirecionar o visitante para o formulário de login (login.php) caso ele não esteja logado.

Vamos ao trabalho:

O que iremos definir primeiro é a tabela usada para armazenar os usuários do sistema:

1 DROP TABLE IF EXISTS `usuarios`;
2 CREATE TABLE IF NOT EXISTS `usuarios` (
3 `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
4 `nome` varchar(100) NOT NULL,
5 `usuario` varchar(50) NOT NULL,
6 `senha` varchar(50) NOT NULL,
7 PRIMARY KEY (`id`),
8 UNIQUE KEY `usuario` (`usuario`)
9 ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

Execute esse bloco SQL no seu banco de dados para criar a tabela usada pelo sistema.

Depois disso, vamos ao formulário de login que você colocará dentro de um arquivo chamado login.php:

1 <form method="post" action="valida.php">
2 <label>Usuário</label>
3 <input type="text" name="usuario" maxlength="50" />
4
5 <label>Senha</label>
6 <input type="password" name="senha" maxlength="50" />
7
8 <input type="submit" value="Entrar" />
9 </form>

Esse formulário, com apenas dois campos, manda pra página valida.php, que é um pequeno PHP que receberá os dados enviados pelo formulário, fará a validação deles e mandará o visitante ou pra página interna (index.php) ou de volta pra página de login (login.php).

Esse é o codigo fonte do arquivo valida.php:

01 // Inclui o arquivo com o sistema de segurança
02 include("seguranca.php");
03
04 // Verifica se um formulário foi enviado
05 if ($_SERVER['REQUEST_METHOD'] == 'POST') {
06 // Salva duas variáveis com o que foi digitado no formulário
07 // Detalhe: faz uma verificação com isset() pra saber se o campo foi preenchido
08 $usuario = (isset($_POST['usuario'])) ? $_POST['usuario'] : '';
09 $senha = (isset($_POST['senha'])) ? $_POST['senha'] : '';
10
11 // Utiliza uma função criada no seguranca.php pra validar os dados digitados
12 if (validaUsuario($usuario$senha) == true) {
13 // O usuário e a senha digitados foram validados, manda pra página interna
14 header("Location: index.php");
15 else {
16 // O usuário e/ou a senha são inválidos, manda de volta pro form de login
17 // Para alterar o endereço da página de login, verifique o arquivo seguranca.php
18 expulsaVisitante();
19 }
20 }

A estrutura do seu site, até esse ponto, deve estar dessa forma:

../pasta_do_seu_site/index.php » Página intera a ser protegida
../pasta_do_seu_site/login.php » Página com o formulário de login
../pasta_do_seu_site/valida.php » Página que faz a validação dos dados do formulário

Agora vamos criar o arquivo seguranca.php na mesma pasta dos demais arquivos:

001 /**
002 * Sistema de segurança com acesso restrito
003 *
004 * Usado para restringir o acesso de certas páginas do seu site
005 *
006 * @author Thiago Belem <contato@thiagobelem.net>
008 *
009 * @version 1.0
010 * @package SistemaSeguranca
011 */
012
013 //  Configurações do Script
014 // ==============================
015 $_SG['conectaServidor'] = true;    // Abre uma conexão com o servidor MySQL?
016 $_SG['abreSessao'] = true;         // Inicia a sessão com um session_start()?
017
018 $_SG['caseSensitive'] = false;     // Usar case-sensitive? Onde 'thiago' é diferente de 'THIAGO'
019
020 $_SG['validaSempre'] = true;       // Deseja validar o usuário e a senha a cada carregamento de página?
021 // Evita que, ao mudar os dados do usuário no banco de dado o mesmo contiue logado.
022
023 $_SG['servidor'] = 'localhost';    // Servidor MySQL
024 $_SG['usuario'] = 'root';          // Usuário MySQL
025 $_SG['senha'] = '';                // Senha MySQL
026 $_SG['banco'] = 'test';            // Banco de dados MySQL
027
028 $_SG['paginaLogin'] = 'login.php'// Página de login
029
030 $_SG['tabela'] = 'usuarios';       // Nome da tabela onde os usuários são salvos
031 // ==============================
032
033 // ======================================
034 //   ~ Não edite a partir deste ponto ~
035 // ======================================
036
037 // Verifica se precisa fazer a conexão com o MySQL
038 if ($_SG['conectaServidor'] == true) {
039 $_SG['link'] = mysql_connect($_SG['servidor'], $_SG['usuario'],$_SG['senha']) or die("MySQL: Não foi possível conectar-se ao servidor [".$_SG['servidor']."].");
040 mysql_select_db($_SG['banco'], $_SG['link']) or die("MySQL: Não foi possível conectar-se ao banco de dados [".$_SG['banco']."].");
041 }
042
043 // Verifica se precisa iniciar a sessão
044 if ($_SG['abreSessao'] == true) {
045 session_start();
046 }
047
048 /**
049 * Função que valida um usuário e senha
050 *
051 * @param string $usuario - O usuário a ser validado
052 * @param string $senha - A senha a ser validada
053 *
054 * @return bool - Se o usuário foi validado ou não (true/false)
055 */
056 function validaUsuario($usuario$senha) {
057 global $_SG;
058
059 $cS = ($_SG['caseSensitive']) ? 'BINARY' '';
060
061 // Usa a função addslashes para escapar as aspas
062 $nusuario addslashes($usuario);
063 $nsenha addslashes($senha);
064
065 // Monta uma consulta SQL (query) para procurar um usuário
066 $sql "SELECT `id`, `nome` FROM `".$_SG['tabela']."` WHERE ".$cS." `usuario` = '".$nusuario."' AND ".$cS." `senha` = '".$nsenha."' LIMIT 1";
067 $query = mysql_query($sql);
068 $resultado = mysql_fetch_assoc($query);
069
070 // Verifica se encontrou algum registro
071 if (empty($resultado)) {
072 // Nenhum registro foi encontrado => o usuário é inválido
073 return false;
074
075 else {
076 // O registro foi encontrado => o usuário é valido
077
078 // Definimos dois valores na sessão com os dados do usuário
079 $_SESSION['usuarioID'] = $resultado['id']; // Pega o valor da coluna 'id do registro encontrado no MySQL
080 $_SESSION['usuarioNome'] = $resultado['nome']; // Pega o valor da coluna 'nome' do registro encontrado no MySQL
081
082 // Verifica a opção se sempre validar o login
083 if ($_SG['validaSempre'] == true) {
084 // Definimos dois valores na sessão com os dados do login
085 $_SESSION['usuarioLogin'] = $usuario;
086 $_SESSION['usuarioSenha'] = $senha;
087 }
088
089 return true;
090 }
091 }
092
093 /**
094 * Função que protege uma página
095 */
096 function protegePagina() {
097 global $_SG;
098
099 if (!isset($_SESSION['usuarioID']) OR !isset($_SESSION['usuarioNome'])) {
100 // Não há usuário logado, manda pra página de login
101 expulsaVisitante();
102 else if (!isset($_SESSION['usuarioID']) OR !isset($_SESSION['usuarioNome'])) {
103 // Há usuário logado, verifica se precisa validar o login novamente
104 if ($_SG['validaSempre'] == true) {
105 // Verifica se os dados salvos na sessão batem com os dados do banco de dados
106 if (!validaUsuario($_SESSION['usuarioLogin'],$_SESSION['usuarioSenha'])) {
107 // Os dados não batem, manda pra tela de login
108 expulsaVisitante();
109 }
110 }
111 }
112 }
113
114 /**
115 * Função para expulsar um visitante
116 */
117 function expulsaVisitante() {
118 global $_SG;
119
120 // Remove as variáveis da sessão (caso elas existam)
121 unset($_SESSION['usuarioID'], $_SESSION['usuarioNome'],$_SESSION['usuarioLogin'], $_SESSION['usuarioSenha']);
122
123 // Manda pra tela de login
124 header("Location: ".$_SG['paginaLogin']);
125 }

Não vou poder explicar todas as funções do arquivo pq é muita coisa.. Mas todas elas estão devidamente comentadas e documentadas… É só olhar.

Com esse arquivos nós já nos conectamos automaticamente ao servidor MySQL, então se você usar outra forma pra fazer a conexão, vá na parte de configurações do seguranca.php e defina a variável $_SG[‘conectaServidor’] pra falso (false). O mesmo acontece pra sessão com a variável $_SG[‘abreSessao’].

Agora é só incluir essas linhas no topo de cada arquivo que deverá ter o acesso restrito:

1 include("seguranca.php"); // Inclui o arquivo com o sistema de segurança
2 protegePagina(); // Chama a função que protege a página

Quando vocês quiserem exibir o nome do usuário logado, é só fazer isso:

1 echo "Olá, " $_SESSION['usuarioNome'];

Veja mais sobre escrever e pegar valores da sessão (coisa que acontece muito nesse sistema de login) no tópico Aprendendo a usar sessões no PHP.

Viram como é fácil?

Pra quem quiser um tutorial mais explicado e detalhado recomendo: Como criar um Sistema de Login com Níveis de Permissão (passo-a-passo).

Login e Senha criptografados

Login e Senha Criptografados – Parte 01

Fala pessoas!

Hoje eu queria começar 2013 de uma maneira diferente: ao invés de gravar uma vídeo aula explicando determinado assunto, eu decidi ESCREVER para fazer isso. Há tempos eu penso em fazer algo mais “complexo” aqui no site, para atender também a algumas dúvidas de usuários mais avançados.

Ou não.

Porém, por falta de tempo (não que hoje esteja sobrando, que fique bem claro isso!) eu não conseguia gravar a vídeo aula, então, eu resolvi criar os scripts e comentá-lo. Isso mesmo. Farei alguns comentários ao inserir aqui os códigos, mas o script em si está bem comentado, visando não dar margem para dúvidas futuras.

Mas, como eu sempre costumo dizer, eu gosto quando as pessoas dão “aquela viajada” e, por si só, fazem aquele comentário interno “Nossa! Eu poderia usar isso para fazer aquilo! Só preciso adaptar isso aqui e ali” …

Se alguém quiser me deixar feliz, é só fazer isso!

Apresentando: O PROBLEMA!

O cliente X me pediu para que eu criasse um sistema, onde seria necessário seguir as seguintes diretrizes:

  • O usuário deverá fazer seu cadastro, que deverá, por sua vez, conter os campos: Seu Nome, Nome de Usuário, E-mail e Senha;
  • Haverá no sistema um setor de “Conteúdo Exclusivo“, que o usuário só poderá acessar após fazer o seu cadastro completo;
  • Poderá ser cadastrado apenas UM endereço de e-mail; se for cadastrado em duplicidade, o usuário deve ser avisado desse problema;
  • Esse conteúdo, não poderá, em hipótese alguma, ser acessado por quem não efetuou o cadastro;
  • Preciso da segurança: se por um acaso o sistema for invadido, não quero que o invasor tenha acesso ao NOME DE USUÁRIO e a SENHA cadastrada. Precisam ser criptografados;
  • Caso o usuário perca seus dados, deve ser dada a opção e ferramentas para que o mesmo possa cadastrar novos dados, sempre que necessário;

Com esse “mini briefing” em mãos, podemos pensar e fazer uma comparação da seguinte maneira: eu preciso guardar dados dentro do banco, e depois, de alguma maneira, preciso recuperá-los. É o mesmo que eu jogar as coisas dentro de um baú com um cadeado, e depois, usando uma senha, eu consiga recuperar esses dados guardados lá… bico! rs

Então vamos começar a desenvolver esse nosso sistema: o primeiro arquivo que precisaremos ter em mãos é o de “conexão ao banco de dados”. O mesmo segue abaixo:

conexao.php

1
2
3
4
5
6
7
8
9
10
11
<?php
$host = "localhost";
$loga = "seuUsuario";
$senhaLoga = "suaSenha";
$baseDados = "seuBancoDeDados";
$conecta = mysql_connect($host, $loga, $senhaLoga, $baseDados);
$conectaBanco = mysql_select_db($baseDados);
?>

E de quebra, vou passar para vocês o código do banco que eu vou utilizar para nesse tutorial. Na realidade, ele é bem simples, tendo apenas uma tabela no total!

bancoDados.sql

1
2
3
4
5
6
7
8
9
CREATE TABLE IF NOT EXISTS `usuario` (
`id_usuario` int(111) NOT NULL AUTO_INCREMENT,
`nome` varchar(150) NOT NULL,
`email` varchar(150) NOT NULL,
`userlogin` longtext NOT NULL,
`passlogin` longtext NOT NULL,
`ativo` varchar(3) NOT NULL DEFAULT 'sim',
PRIMARY KEY (`id_usuario`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

Fazendo uma breve explicação sobre os campos dessa tabela:

id_usuario -> É o ID do usuário, que é campo único e se incrementa automaticamente;
nome -> Tá mais do que na cara;
e-mail -> Idem à de cima! rs;
userlogin -> Aqui fica interessante! O campo está como “longText”, pois é nele que será inserido o primeiro dado criptografado desse tutorial, que será o nome de usuário;
passlogin -> Aqui será inserida a senha do usuário, também criptografada;
ativo -> O campo terá como valor padrão (default) o “SIM“. Não pretendo deixar que sejam DELETADOS dados do banco. Simplesmente, ou eu ATIVO ou DESATIVOdeterminado usuário. Porém, nunca o apago. Evita problemas futuros!

Após termos criado o banco e testado a conexão com o mesmo, vamos analisar o primeiro arquivo ao qual nosso usuário terá acesso!

index.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<!DOCTYPE HTML>
<html lang="br" class="no-js">
<head>
<meta charset="utf-8">
<title>Sistema de Login e Senha Criptografados</title>
<link href="style.css" rel="stylesheet" />
</head>
<body>
<div id="conteudo">
<h1>Sistema de login e senha criptografados - Cadastro de usuário</h1>
<div class="borda"></div>
<!-- Formulário para acesso -->
<p>Para ter acesso ao conteúdo exclusivo, por favor, cadastre-se utilizando o formulário abaixo!</p>
<form method="post" action="cadastraUsuario.php" id="validaAcesso">
<fieldset>
<legend>Faça seu cadastro abaixo!</legend>
<label for="nome">Seu nome:</label>
<input type="text" name="nome" id="nome" />
<div class="clear"></div>
<label for="nome">Nome de usuário:</label>
<input type="text" name="nomeUsuario" id="nomeUsuario" />
<div class="clear"></div>
<label for="email">E-mail:</label>
<input type="text" name="email" id="email" />
<div class="clear"></div>
<label for="senha">Senha:</label>
<input type="password" name="senha" id="senha" />
<div class="clear"></div>
<input type="submit" value="Efetuar cadastro" />
</fieldset>
</form>
<p>Se você já possui cadastro, <a href="exclusivo/">clique aqui</a> para acessar o Conteúdo Exclusivo!</p>
</div>
</body>
</html>

E seu arquivo de “folha de estilos”, o

style.css

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
* body {
margin:0;
padding:0;
background-color:#f2f2f2;
font-family:"Trebuchet MS", Arial, Helvetica, sans-serif;
font-size:medium;
color:#000;
line-height:150%;
}
h1 {
color:#039;
font-size:120%;
}
h3 {
color:#900;
font-size:100%;
}
p {
font-size:80%;
}
#conteudo {
width:984px;
height:auto;
display:table;
margin:10px auto;
border-top:1px solid #e1e1e1;
}
#conteudo form {
font-size:80%;
}
#conteudo form legend {
padding:5px;
border:1px solid #036;
border-radius:5px;
background-color:#e2e2e2;
}
#conteudo fieldset {
border:1px dotted #036;
}
#conteudo form label {
width:120px;
float:left;
font-weight:bold;
margin:5px 0;
}
#conteudo form input[type="text"], #conteudo form input[type="password"] {
float:left;
background-color:#e2e2e2;
text-indent:10px;
width:150px;
height:25px;
border:1px solid #036;
border-radius:5px;
margin:5px 0;
}
#conteudo form input[type="text"]:hover, #conteudo form input[type="password"]:hover {
background-color:#ccc;
}
#conteudo form input[type="text"]:focus, #conteudo form input[type="password"]:focus {
background-color:#fff;
}
#conteudo form input[type="submit"]{
background-color:#036;
color:#fff;
width:150px;
text-align:center;
padding:5px;
border-radius:5px;
float:left;
margin:0 50px;
}
#conteudo form input[type="submit"]:hover{
background-color:#000;
color:#fff;
}
.clear {
clear:both;
}
.borda {
border-top:1px solid #e1e1e1;
margin:10px auto;
}
.destaca {
color:#f90;
}
.logout {
float:right;
border:1px solid #900;
background-color:#ccc;
padding:5px;
width:250px;
height:25px;
text-align:center;
margin:10px 0 0;
}
.sairSistema {
font-size:70%;
color:#036;
margin:0 auto;
}

Como podem observar, nada mais é do que um formulário que pede os dados requisitados pelo nosso cliente X. Nele, constam todos os campos que o mini-briefing nos pediu, e, sim, ele tem o cabeçalho em HTML5.

Tem também um link para que, se o usuário já estiver cadastrado no sistema, ter acesso ao seu “Conteúdo Exclusivo”.

O formulário, assim que o usuário o tiver preenchido e clicado no botão “Efetuar Cadastro”, será enviado ao arquivo

cadastraUsuario.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
<!DOCTYPE HTML>
<html lang="br" class="no-js">
<head>
<meta charset="utf-8">
<title>Sistema de Login e Senha Criptografados</title>
<link href="style.css" rel="stylesheet" />
</head>
<body>
<div id="conteudo">
<h1>Sistema de login e senha criptografados</h1>
<div class="borda"></div>
<!-- Recebendo e gravando os dados -->
<?php
include "conexao.php";
//URL para a qual o usuário será enviado após ter preenchido todos os campos corretamente
$urlAcesso = "exclusivo/index.php";
//Recebendo os dados e tratando os mesmos para inserção no banco
$recebeSeuNome = filter_input(INPUT_POST, 'nome', FILTER_SANITIZE_SPECIAL_CHARS);
$confereSeuNome = filter_input(INPUT_POST, 'nome', FILTER_SANITIZE_MAGIC_QUOTES);
$recebeNomeUsuario = filter_input(INPUT_POST, 'nomeUsuario', FILTER_SANITIZE_SPECIAL_CHARS);
$confereNomeUsuario = filter_input(INPUT_POST, 'nomeUsuario', FILTER_SANITIZE_MAGIC_QUOTES);
$recebeEmail = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);
$recebeSenha = filter_input(INPUT_POST, 'senha', FILTER_SANITIZE_SPECIAL_CHARS);
//Nesse if, faço uma conferência em relação ao e-mail informado; se não for um e-mail validado pelo filtro, ele retornará a mensagem abaixo.
//Se o email for válido, ele passa para a segunda parte da verificação
if ($recebeEmail == NULL ) {
echo "<p>Retorne e digite um e-mail válido por favor!";
echo "<p><a href='javascript:history.back();'>Voltar</a></p>";
return false;
}
//Nesse if, faço uma conferência em relação à senha informada. Se não for informada nenhuma, retorno a mensagem para que o usuário informe algo!
if ($recebeSenha == NULL ) {
echo "<p>Retorne e informe uma senha por favor!";
echo "<p><a href='javascript:history.back();'>Voltar</a></p>";
return false;
}
//Aqui faço a segunda parte da verificação: vejo se no nome de usuário foi utilizado algum caractere especial
//Isso serve para evitar uma possível invasão sql no banco de dados, possibilitando assim a proteção e integridade dos dados
//Nesse caso, eu comparo os nomes. Se forem iguais, após passarem pelos filtros, eu inicio a criptografia. Se não forem, peço que volte à página anterior
else if ($confereNomeUsuario != $recebeNomeUsuario) {
echo "<p>Você informou o seguinte Nome de Usuário: <strong>$recebeNomeUsuario</strong> .</p>";
echo "<p>Por favor, não utilize caracteres especiais (tais como aspas simples ou duplas, assim como barras!) no campo <strong>Nome de Usuário</strong>.</p>";
echo "<p><a href='javascript:history.back();'>Volte</a> para a página anterior e tente novamente! Obrigado!</p>";
return false;
}
else if ($confereSeuNome != $recebeSeuNome) {
echo "<p>Você informou o Seu Nome como: <strong>$confereSeuNome</strong> .</p>";
echo "<p>Por favor, não utilize caracteres especiais (tais como aspas simples ou duplas, assim como barras!) no campo <strong>Seu Nome</strong>.</p>";
echo "<p><a href='javascript:history.back();'>Volte</a> para a página anterior e tente novamente! Obrigado!</p>";
return false;
}
else {
//Aqui vou agora, criptografar as informações antes de enviá-las ao banco de dados
echo "<h3>Cadastrando informações em nosso banco de dados</h3>";
//Aqui vamos criar a função que vai criptografar os dados.
//Serão necessários criptografar apenas o endereço de e-mail e a senha informada
//Função para criptografar a senha
function criptoSenha($criptoSenha){
return sha1(md5($criptoSenha));
}
//Função para criptografar o e-mail
function criptoNomeUsuario($criptoNomeUsuario){
return sha1(md5($criptoNomeUsuario));
}
//Aqui realizo a criptografia do endereço de e-mail
$criptoNomeUsuario = criptoNomeUsuario(filter_input(INPUT_POST, 'nomeUsuario', FILTER_SANITIZE_MAGIC_QUOTES));
//Aqui realizo a criptografia da senha informada do usuário
$criptoSenha = criptoSenha(filter_input(INPUT_POST, 'senha', FILTER_SANITIZE_SPECIAL_CHARS));
//Aqui eu vou realizar minha PRIMEIRA VERIFICAÇÃO DE CRIPTOGRAFIA no banco de dados
//Se o endereço de e-mail for válido, eu preciso verificar se o e-mail cadastrado já consta na base de dados.
//Como desejo que o e-mail seja um campo único, preciso verificar se o mesmo já foi ou não cadastrado no banco.
//A consulta segue abaixo:
$consultaBanco = mysql_query("SELECT * FROM usuario WHERE email = '$recebeEmail'") or die (mysql_error());
$verificaBanco = mysql_num_rows($consultaBanco);
if($verificaBanco == 1){
echo "<p>Prezado(a) <strong>$confereSeuNome</strong>, o endereço de e-mail informado (<strong><em>$recebeEmail</em></strong>) já consta em nossa base de dados!</p>";
echo "<p><a href='javascript:history.back();'>Volte</a> para a página anterior e informe um novo endereço! Obrigado!</p>";
return false;
}
//Agora vamos inserir os dados no banco
$insereDados = mysql_query("INSERT INTO usuario (id_usuario, nome, email, userlogin, passlogin, ativo) VALUES ('NULL', '$confereSeuNome', '$recebeEmail', '$criptoNomeUsuario', '$criptoSenha', 'sim')") or die (mysql_error());
echo "<p>Seu cadastro foi efetuado com sucesso!</p>";
echo "<p>Aguarde enquanto lhe encaminhamos para a página de acesso ao <strong>Conteúdo Exclusivo</strong>!";
echo "<meta http-equiv=\"refresh\" content=\"5;URL=".$urlAcesso."\">";
}
?>
</div>
</body>
</html>

E pronto! Se o usuário preencheu corretamente todas as informações requisitadas, ele será enviado para uma outra “index”, que estará dentro de uma pasta. No meu caso, nomeei essa pasta de “exclusivo”, e lá consta esse primeiro arquivo, o qual fará, novamente, requisições de dados para garantir o acesso do usuário ao “Conteúdo Exclusivo”.

Portanto, vamos trabalhar agora dentro de uma pasta chamada “exclusivo“. O primeiro arquivo que teremos acesso é o

exclusivo/index.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<?php
ob_start();
include 'conexao.php';
//Essa variável $msg será explanada e apresentada no decorrer do tutorial
$msg = $_REQUEST["msg"];
?>
<!DOCTYPE HTML>
<html lang="br" class="no-js">
<head>
<meta charset="utf-8">
<title>Sistema de Login e Senha Criptografados</title>
<link href="../style.css" rel="stylesheet" />
</head>
<body>
<div id="conteudo">
<h1>Sistema de login e senha criptografados - Acesso ao Conteúdo Exclusivo</h1>
<div class="borda"></div>
<!-- Formulário para acesso -->
<p>Para ter acesso ao <strong>Conteúdo Exclusivo</strong>, por favor, logue-se utilizando o formulário abaixo!</p>
<form method="post" action="validaAcesso.php" id="validaAcesso">
<fieldset>
<legend>Login</legend>
<label for="nomeUsuario">Nome de Usuário:</label>
<input type="text" name="nomeUsuario" id="nomeUsuario" />
<div class="clear"></div>
<label for="senha">Senha:</label>
<input type="password" name="senha" id="senha" />
<div class="clear"></div>
<input type="submit" value="Acessar o sistema" />
</fieldset>
</form>
<p><small>Esqueceu seus dados? <a href="recuperaDados.php">Clique aqui!</a></small></p>
</div>
</body>
</html>

Na segunda parte desse tutorial, vamos trabalhar com a recuperação de dados, o qual se encontra linkado bem ao final do script acima. Por enquanto, vamos pensar que temos mais um arquivo de conexão dentro dessa pasta (exclusivo) que nos dá acesso ao banco de dados, e que não difere em nada do que já temos salvo. Vamos então, dar aquela analisada no arquivo

exclusivo/validaAcesso.php

 

1
2
3
4
<?php
ob_start();
include 'conexao.php';
$msg = $_REQUEST["msg"];

Por questões de segurança, deixo eu aqui uma breve explicação e direcionamento.

Quando fores utilizar esse sistema em uma hospedagem web, recomendo que crie “usuários diferenciados” para acesso às informações no banco de dados.
Por exemplo: Se eu estiver pensando em criar duas áreas distintas, onde uma será a do administrador e outra será do usuário, seria interessante,
para efeitos de segurança e integridade do banco, criar um usuário com alguns privilégios dentro do banco, e outro com esses privilégios reduzido.

Administrador -> Poderia, dentro de seu ambiente, deletar informações do banco.

Usuário -> Deveria, em seu ambiente, apenas alterar informações, e nunca deletar sequer uma linha ou tabela ou base de dados.

Nesse caso, seria necessário trabalhar com dois arquivos de conexão, um para cada tipo de usuário.

#ficaDica

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
*/
?>
<!DOCTYPE HTML>
<html lang="br" class="no-js">
<head>
<meta charset="utf-8">
<title>Sistema de Login e Senha Criptografados</title>
<link href="../style.css" rel="stylesheet" />
</head>
<body>
<div id="conteudo">
<h1>Sistema de login e senha criptografados - Verificando Informações</h1>
<div class="borda"></div>
<!-- Recebendo e gravando os dados -->
<?php
include "conexao.php";
//Praticamente faço as mesmas validações que fizemos para o cadastrado do usuário no banco de dados.
//Recebendo os dados e tratando os mesmos para inserção no banco
$recebeNomeUsuario = filter_input(INPUT_POST, 'nomeUsuario', FILTER_SANITIZE_SPECIAL_CHARS);
$confereNomeUsuario = filter_input(INPUT_POST, 'nomeUsuario', FILTER_SANITIZE_MAGIC_QUOTES);
$recebeSenha = filter_input(INPUT_POST, 'senha', FILTER_SANITIZE_SPECIAL_CHARS);
//Nesse if, faço uma conferência em relação à senha informada. Se não for informada nenhuma, retorno a mensagem para que o usuário informe algo!
if ($recebeSenha == NULL ) {
echo "<p>A senha precisa ser informada!";
echo "<p><a href='javascript:history.back();'>Voltar</a></p>";
return false;
}
//Aqui faço a segunda parte da verificação: vejo se no nome de usuário foi utilizado algum caractere especial
//Isso serve para evitar uma possível invasão sql no banco de dados, possibilitando assim a proteção e integridade dos dados
//Nesse caso, eu comparo os nomes. Se forem iguais, após passarem pelos filtros, eu inicio a criptografia. Se não forem, peço que volte à página anterior
else if ($confereNomeUsuario != $recebeNomeUsuario) {
echo "<p>Você informou o seguinte Nome de Usuário: <strong>$recebeNomeUsuario</strong> .</p>";
echo "<p>Por favor, não utilize caracteres especiais (tais como aspas simples ou duplas, assim como barras!) no campo <strong>Nome de Usuário</strong>.</p>";
echo "<p><a href='javascript:history.back();'>Volte</a> para a página anterior e tente novamente! Obrigado!</p>";
return false;
} else {
//Aqui vamos criar a função que vai criptografar os dados.
//Serão necessários criptografar apenas o endereço de e-mail e a senha informada
//Função para criptografar a senha
function criptoSenha($criptoSenha){
return sha1(md5($criptoSenha));
}
//Função para criptografar o e-mail
function criptoNomeUsuario($criptoNomeUsuario){
return sha1(md5($criptoNomeUsuario));
}
//Aqui realizo a criptografia do nome de usuário
$criptoNomeUsuario = criptoNomeUsuario(filter_input(INPUT_POST, 'nomeUsuario', FILTER_SANITIZE_MAGIC_QUOTES));
//Aqui realizo a criptografia da senha informada do usuário
$criptoSenha = criptoSenha(filter_input(INPUT_POST, 'senha', FILTER_SANITIZE_SPECIAL_CHARS));
/*
Agora vamos consultar no banco de dados para ver se existe realmente esse cadastro
Vamos verificar ambos os dados: Nome de Usuário e Senha e ainda se o campo "ATIVO" está setado como SIM
Penso eu que, ao invés de simplesmente DELETAR um USUÁRIO ou DELETAR QUALQUER INFORMAÇÃO GRAVADA NO BANCO é tiro no pé.
Vez ou outra, pode ser que seja necessária rever a informação ou a ação, e se tivermos apagado os dados, não temos muito o que fazer.
Lembre-se sempre: o usuário quer uma coisa agora, e outra daqui a 10 minutos. Então, preserve-se da melhor maneira possível.
Prefiro sempre trabalhar com a hipótese de ATIVO, EXIBIR, LIBERAR algo, para poder mudar simplesmente de SIM P/ NÃO e vice-versa, do que deletar a informação.
Posso até IMPRIMIR no botão "Deseja deletar a informação"? mas nunca, realmente nunca, apagar determinada linha ou informação do banco.
*/
$consultaInformacoes = mysql_query("SELECT * FROM usuario WHERE userlogin = '$criptoNomeUsuario' AND passlogin = '$criptoSenha' AND ativo = 'sim'") or die (mysql_error());
$verificaInformacoes = mysql_num_rows($consultaInformacoes);
//Aqui vou verificar se houve resultado positivo na pesquisa
if($verificaInformacoes == 1){
//Aqui eu vou setar os cookies para gravar os dados de acesso do usuário
setcookie ("login", $criptoNomeUsuario, (time()+60*60*24*30 ));
setcookie ("senha", $criptoSenha, (time()+60*60*24*30 ));
setcookie ("nomeUsuario", $confereNomeUsuario, (time()+60*60*24*30 ));
//header ("Location: conteudoExclusivo.php");
echo "<p>Os dados informados estão corretos!</p>
<p>Por favor, aguarde alguns segundos. Estamos processando a sua entrada!</p>
<p>Obrigado!</p>";
$conteudoExclusivo = "conteudoExclusivo.php";
echo "<meta http-equiv=\"refresh\" content=\"3;URL=".$conteudoExclusivo."\">";
} else {
echo "<p>Nome de Usuário ou Senha informada não confere. Por favor, <a href='javascript:history.back();'>volte</a> e tente novamente!</p>";
}
}
?>
</div>
</body>
</html>

Se todos os dados baterem, a gente vai acessar  o “Conteúdo Exclusivo” em si. Primeiramente, precisamos criar um arquivo que “confere”, por assim dizer, se os dados setados no cookie realmente batem com os dados cadastrados no banco.

Essa é a “grande sacada” em se criar um sistema de login e senha! Eu preciso verificar TODAS AS PÁGINAS do sistema se o usuário e senha informados realmente são cadastrados no banco de dados! Segue abaixo, o arquivo

exclusivo/acessoUsuario.php

1
2
3
4
5
6
7
8
9
10
11
12
<?php
include 'conexao.php';
$criptoNomeUsuario = $_COOKIE["login"];
$criptoSenha = $_COOKIE["senha"];
$nomeUsuario = $_COOKIE["nomeUsuario"];
$confirmacao = mysql_query("SELECT * FROM usuario WHERE userlogin = '$criptoNomeUsuario' and passlogin = '$criptoSenha' and ativo = 'sim'") or die (mysql_error());
$verificaInformacoes = mysql_num_rows($confirmacao);
?>

Esse código que faz menção àquela variável chamada {code type=php}$msg{/code} que temos no cabeçalho de nosso arquivo. Se eu tentar acessar o conteúdo sem ter feito o login, é ela que será apresentada ao usuário!

Sendo assim, já podemos então, ter acesso ao

exclusivo/conteudoExclusivo.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
<?php
ob_start();
include 'conexao.php';
include 'acessoUsuario.php'; //Aqui verifico se os dados gravados em cookies são reais
if ( $verificaInformacoes == 1 ) {
?>
<?php
$criptoNomeUsuario = $_COOKIE["login"];
$resultado = "SELECT * FROM usuario WHERE userlogin = '$criptoNomeUsuario' AND ativo = 'sim'";
$listaCliente = mysql_query($resultado) or die (mysql_error());
while ($listagem = mysql_fetch_array($listaCliente)){
$nomeUsuario = $listagem ["nome"];
}
mysql_close();
?>
<?php
$msg = $_REQUEST["msg"];
?>
<!DOCTYPE HTML>
<html lang="br" class="no-js">
<head>
<meta charset="utf-8">
<title>Sistema de Login e Senha Criptografados</title>
<link href="../style.css" rel="stylesheet" />
</head>
<body>
<div id="conteudo">
<h1><span class="destaca"><?php echo $nomeUsuario; ?></span>, seja bem-vindo ao Conteúdo Exclusivo</h1>
<div class="borda"></div>
<div class="logout">
<p class="sairSistema"><a href="logout.php">Clique aqui</a> para sair do sistema</p>
</div>
<div class="clear"></div>
<h3>Conteúdo exclusivo 01</h3>
<p>Penatibus pellentesque tincidunt in in porta aenean adipiscing nisi porttitor? Lacus tincidunt cursus habitasse cursus adipiscing. Et porta nunc penatibus velit vel? Sociis ac porta natoque arcu integer? Odio. Ultricies purus pid dis habitasse magna etiam, sociis magna ut ut a, turpis odio habitasse et? Rhoncus proin lorem. Montes augue enim magna dignissim auctor tincidunt dapibus natoque quis dignissim mus rhoncus in lorem! Quis magna, amet, nunc vut auctor in, nec odio? Magna magnis magna, ultricies elementum porta, purus. Cras! Turpis turpis cum cras! Velit lacus eu porttitor, nec magna nisi et pellentesque hac ultrices dis, tempor velit, arcu etiam, lacus magna vut nisi mus! Ac dignissim pid? Aliquet hac, mid lacus cras ac? Dignissim pid, montes cursus porta, in.</p>
<p>Urna sit dignissim, lorem purus a arcu platea rhoncus natoque et ac scelerisque vel. Ac. Adipiscing augue! Auctor cursus ac! Ultrices, auctor sed etiam cum adipiscing adipiscing? Porttitor dignissim, sed dignissim cras? Elementum. Quis! Dignissim. Turpis proin est aliquam lundium in! Arcu elementum augue scelerisque, purus in auctor facilisis etiam aliquam enim nunc rhoncus ac. Dapibus pulvinar turpis et. Dapibus platea? Lectus turpis, integer platea auctor nisi enim augue placerat dolor nec enim rhoncus augue augue enim augue augue? Massa! Porta dapibus placerat, sed ultricies arcu tristique! Scelerisque vel aliquet egestas sit elit? Sociis a! Et sagittis scelerisque mus in porta auctor pulvinar, turpis magna, elementum mus montes augue in, odio, nascetur elementum adipiscing, placerat facilisis, nunc egestas dis.</p>
<h3>Conteúdo Exclusivo 02</h3>
<p>Platea est scelerisque, nascetur in, vel? Tortor elementum cras. Lectus tristique purus ut aliquam est aliquet augue! Augue eros scelerisque placerat placerat ut lacus porttitor dapibus elementum in rhoncus dignissim sed ut in habitasse massa, dolor pellentesque augue dictumst! In velit ridiculus sagittis, non. Dignissim amet, amet. Porta! Nisi, pulvinar tincidunt, rhoncus, dis egestas hac nunc, proin dictumst integer amet integer facilisis vel? Et aliquam purus, nascetur turpis. Augue. Augue tristique sit nec in turpis magna enim nascetur facilisis? Elementum ultricies adipiscing rhoncus elementum, ac elementum purus eros eros sit pellentesque integer augue sed et in velit ac phasellus scelerisque, tortor tempor, purus! Integer, tincidunt tristique habitasse dignissim. Mid auctor sagittis! Vel dolor integer lectus risus, ultrices, mauris, magna.</p>
<h3>Conteúdo Exclusivo 03</h3>
<p>Nec dis, penatibus, magnis ac odio dictumst ultrices elit. Habitasse eros pulvinar duis porta ac pulvinar in, porta, in ut proin integer adipiscing. Lundium phasellus tincidunt est cum, magna, porta in, ut elit, ut mattis! Sociis amet ac velit, cum pid, aenean odio dis pulvinar! Adipiscing, sed. Lundium ac, vut ac massa augue, turpis et nisi a velit cum? Porttitor dis adipiscing pulvinar augue cum? Urna augue! Porttitor, pellentesque lorem cursus proin turpis amet scelerisque duis odio vut. Tincidunt mus! Cursus purus magna, urna in ac aenean! Vut nec, non aliquet risus proin, turpis habitasse placerat enim tristique! Diam cras in? Magna? Turpis, habitasse risus habitasse dis nisi risus parturient et, natoque pid habitasse! Sociis, sed odio mid rhoncus.</p>
<div class="borda"></div>
</div>
</body>
</html>
<?php
}
else {
$urlAcesso = "index.php";
echo "
<script type='text/javascript'>
alert('Proibido o acesso por esse meio. Volte e informe os dados corretamente. Obrigado e aguarde o redirecionamento para a tela inicial!');
</script>";
echo "<meta http-equiv=\"refresh\" content=\"1;URL=".$urlAcesso."\">";
}
?>

E para finalizar essa primeira parte, segue abaixo o arquivo que vai efetuar nossa “saída”, o

exclusivo/logout.php

1
2
3
4
5
6
7
8
9
<?php
// Configura a data de expiração para uma hora
setcookie ("login", "", time() - 3600);
setcookie ("senha", "", time() - 3600, 1);
header("Location: index.php?msg=Você saiu do sistema!");
?>

É isso aí!

Na segunda parte desse tutorial, vamos dar um jeito de fazer com que nosso usuário possa recuperar, ou melhor, gerar novos dados para cadastrar no sistema.

Vamos, de maneira resumida, enviar um e-mail para o mesmo, utilizando a classe PHPMailer, para que acesse uma página de nosso sistema que possibilite, após comprovar que o e-mail realmente já se encontra em nossa base de dados, a inserção de novos dados de usário e senha para acesso.

Espero que seja de grande valia a todos e que possa ajuda e bastante em seus estudos!

Forte abraço e até a segunda parte!

SQL

 Introdução – A View pode ser definida como uma tabela virtual composta por linhas e colunas de dados, vindos de tabelas relacionadas em uma query (um agrupamento de SELECT’s, por exemplo) que define a View. As linhas e colunas da View são geradas dinamicamente no momento em que é feita uma referência a ela.

Como já dito, a query que determina uma View pode vir de uma ou mais tabelas ou até mesmo de outras Views.

Obs: Podemos realizar qualquer query por meio de Views, assim como alterar dados por meio delas, o que é feito com algumas restrições.

Ao criarmos uma View, podemos filtrar o conteúdo de uma tabela a ser exibida, já que a função da View é essa mesma: filtrar tabelas servindo para agrupá-las, protegendo certas colunas e assim simplificando o código de uma programação.

Importante salientar que, mesmo após o servidor do SQL ser desligado, a View continua “viva” no sistema, assim como as tabelas que criamos normalmente. As Views não ocupam espaço no banco de dados.

 Criando uma View – Para criar uma View é muito simples. Vamos levar em conta a tabela Produtos, conforme a Figura 01 ilustra:

 

Figura 01 – Tabela Produtos

 Tendo a estrutura da tabela acima em mente, vamos criar a View, como mostra a Listagem 01:

Listagem 01 – Criando uma View

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
CREATE VIEW vwProdutos  
AS  
  SELECT   IdProduto    AS Código
         , Nome         AS Produto
         , Fabricante
         , Quantidade
         , VlUnitario   AS [Valor Unitário]
         , Tipo
    FROM       
           Produtos

 

Dica: Precisamos usar o comando CREATE apenas da 1ª vez, nas próximas vezes que desejarmos atualizar nossa View é só usar o comando ALTER. Essa dica vale também para Stored ProceduresFunctions, etc.

Para consultarmos os dados na View usamos o comando SELECT, da mesma forma que se estivéssemos fazendo uma consulta em uma tabela comum.

Listagem 02 exibe a consulta na View, e a Figura 02 nos exibe o resultado desta consulta:

Listagem 02 – Consultando uma View

 

1
SELECT * FROM vwProdutos

 

 

 

Figura 02 – Consulta na View de Produtos

 Note que a View tem algumas diferenças em relação à tabela de Produtos já que na Listagem 01 podemos ver que adicionei alguns Alias para as colunas IdProdutoNome e VlUnitario. Assim podemos formatar a View para que fique melhor até que uma (ou mais) tabela(s).

Com a View podemos incluir dados em uma tabela. Para isso é necessário que haja uma das seguintes situações: as colunas da tabela de origem que não são exibidas na View devem aceitar valores nulos, ser auto incrementais ou ter um valor padrão (que use a constraint Default) definido para elas.

Quando realizamos um INSERTUPDATE ou DELETE dos dados de uma tabela de origem da View, essa ação se reflete automaticamente na View.

 Assim finalizo o artigo. Na próxima parte descobriremos quais são as vantagens das Views, além de vermos como alterar e excluir uma View do banco, aguardem!

O QUE E PHP

Inicialmente PHP foi um acrônimo para Personal Home Pages, mas posteriormente assumiu o significado de PHP: Hypertext Preprocessor.
PHP foi criado por Rasmus Lerdorf nascido na Groelândia – Dinamarca e posteriormente começou a ser desenvolvido como código livre. PHP não é um Padrão Web – é uma tecnologia de código aberto. PHP não é uma linguagem de programação no sentido estrito da palavra, mas sim uma tecnologia que permite a inserção de scripts nos seus documentos.
A descrição sumária do que seja uma página PHP é que trata-se de um arquivo gravado com a extensão .php contendo tags HTML e scripts que são executados em um servidor web.

Como funciona o PHP?

A melhor maneira de explicar como o PHP funciona é comparando-o com a HTML. Suponha que você digite o endereço de um documento HTML (por exemplo: http://www.meusite.com/page.htm) na barra de endereços do navegador. Esta ação desencadeia a requisição de uma página HTML.

O QUE E PHP

Ao invés de muitos comandos para mostrar HTML (como visto em C ou Perl), páginas PHP contém HTML juntamente com códigos que fazem “alguma coisa” (neste caso, mostra “Olá, Eu sou um script PHP!”) O código PHP é delimitado por tags iniciais e finais <?php e ?> que lhe permitem pular pra dentro e pra fora do “modo PHP”.

O que distingui o PHP de algo como Javascript no lado do cliente é que o código é executado no servidor, gerando HTML que é então enviado para o cliente. O cliente receberia os resultados da execução desse script, mas não saberia como é o código fonte. Você pode inclusive configurar seu servidor para processar todos os seus arquivos HTML como PHP, e então não haverá nenhum modo dos usuários descobrirem que se você usa essa linguagem ou não.

A melhor coisa em usar PHP está no fato de ele ser extremamente simples para um iniciante, mas oferece muitos recursos para o programador profissional. Não se preocupe em ler as longas listas de funções do PHP. Você pode pular essa parte (por enquanto) e começar a escrever scripts em poucas horas.

Apesar do desenvolvimento do PHP ser focado nos scripts do lado do servidor, você pode fazer muito mais com ele. Veja isso e leia mais na seção O que o PHP pode fazer?, ou diretamente notutorial introdutório se você estiver interessado em programação web.