Escolar Documentos
Profissional Documentos
Cultura Documentos
A. Majer, Professor da Unidade Curricular: Aplicaes Corporativas da Universidade Cidade de So Paulo UNICID
Licena de Uso Este trabalho est licenciado sob uma Licena Creative Commons Atribuio-Vedada a Criao de Obras Derivadas 2.5 Brasil. Para ver uma cpia desta licena, visite http://creativecommons.org/licenses/bynd/2.5/br/ ou envie uma carta para Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA. Este material no pode ser alterado. Para maiores informaes envie um e-mail para cmajer@uol.com.br ou cmajer@ig.com.br.
PHP
Introduo
Um SCRIPT um conjunto de instrues ou comandos, tambm chamado de programa, baseados numa determinada linguagem (PHP, Javascript, etc), que executam certas operaes. Agindo geralmente de forma automtica, estes programas caracterizam-se por sua necessidade de interpretao por um software (em geral um servidor web ou navegador), diferentemente dos programas que precisam ser compilados e ligados (link-editados). Conforme o tipo de script, ele pode ser executado no servidor ou no micro cliente.
Pgina
Prof. Carlos Majer Aplicaes Corporativas UNICID O PHP caracteriza-se por ser uma linguagem de script. Ela supre uma necessidade que existe na linguagem baseada em marcas HTML, principalmente no que diz respeito s limitaes que advm do carter esttico do HTML. A linguagem PHP open source, o que significa que pode ser utilizada sem o pagamento de royalties terceiros. Ela caracteriza-se por ser uma linguagem que primeiramente executada (processada) num servidor web (computador que roda um ambiente que recebe solicitaes para acesso s pginas HTML) para em seguida disponibilizar a pgina resultante ao usurio solicitante. Resumindo, a pgina PHP no executada no navegador do usurio e sim no servidor onde a mesma est hospedada.
Seu navegador no entende PHP. Apenas HTML, algumas linguagens de script (Javascript, Vbscript, etc) e CSS
Enquanto as pginas HTML provm limitada funcionalidade, a insero do PHP expande os limites desta tecnologia, trazendo grande nmero de vantagens e amadurecendo o desenvolvimento atravs de programao dinmica. O PHP tem evoludo constantemente e traz cada vez mais facilidades no desenvolvimento de sites. Atualmente, diversas bibliotecas foram disponibilizadas ao PHP contribuindo para enriquecer esta linguagem. PHP muito utilizado para manipulao de banco de dados, processamento dinmico, manipulao de imagens, dentre outras possibilidades.
Funcionamento
O desenvolvedor pode criar uma pgina feita toda em PHP ou mescl-la com HTML, ou seja, inserindo comandos dentro do HTML. A linguagem PHP pode ento ser embutida dentro do cdigo HTML e o servidor PHP processa apenas o cdigo PHP (ignorando o HTML), inserindo o resultado deste processamento no lugar dos comandos PHP (em formato HTML), de forma a gerar uma pgina HTML final que ser enviada ao cliente (navegador do usurio). Esta pgina final a mesma dos comandos em HTML existentes anteriormente junto com o resultado processado pelo servidor PHP.
Extrapolando Limites
Certos limites do HTML podem ser claramente verificados: Imagine a quantidade de trabalho necessria na criao das pginas de um grande conjunto de informaes, como por exemplo, um catlogo de peas de uma grande empresa. Alm de trabalhoso, tambm muito difcil controlar a manuteno deste conjunto de pginas, especialmente quando existem diferentes regras de negcio aplicadas na exibio das pginas Seria muito complexo efetuar uma mudana de contextos (exemplo: conforme login de usurio, site apresentaria um conjunto de informaes para cliente e outro para administrador)
Formas de Utilizao
Um comando ou conjunto de comandos PHP deve ser inserido dentro das seguintes marcas especficas:-
Pgina
Prof. Carlos Majer Aplicaes Corporativas UNICID Esta outra forma que tambm aceita e corretamente interpretada.
?>.
PHP e HTML
Uma vez criada, a pgina PHP armazenada no SERVIDOR. A pgina processada (interpretada) no Servidor e o cdigo resultante em HTML enviado ao navegador. O navegador recebe apenas o resultado do cdigo interpretado, ou seja, apenas aquilo que ele consegue entender (HTML, Javascript, CSS, etc).
Exemplo:<html> <head> <title>Primeira Pagina PHP</title> </head> <body> <?php echo "Isto ser inserido na pgina HTML."; ?> </body> </html>
Ao encontrar a marca <?php, o PHP ir processar tudo at encontrar um ponto e virgula o processamento PHP.
; , que finaliza
A marca de fechamento ?> opcional. Quando esta marca no inserida, o desenvolvedor pode incluir outros arquivos (include/require) no cdigo PHP. Outra forma de se iniciar um cdigo PHP atravs de sua forma curta inserir o texto
php.
Inserindo Comentrios
Comentar o cdigo uma atividade que todo desenvolvedor deve seguir. Para isto, o PHP prov a possibilidade de comentrio por linha ou por bloco.
Pgina
Tipos de Dados
Segue uma relao de alguns tipos de dados disponveis pelo PHP:-
Tipo Booleano
Descrio Utilizado para valores boleanos (verdadeiro ou falso) * Verifique no manual do PHP, pois existem outras possibilidades de definio do valor FALSE Utilizado para valores inteiros. A diferena entre ambos (inteiro e longo) o nmero de bytes utilizado para armazenamento do valor, feito automaticamente pelo PHP. * Verifique no manual do PHP como se definem nmeros em outras bases (octais e hexadecimais) Utilizado para valores com casas decimais e quando se trata de um grande nmero inteiro (maior do que o tipo Inteiro pode armazenar). * Verifique no manual do PHP como se definir um nmero flutuante com grande nmero de casas.
Inteiro / Longo
Conjunto Z {..,-1, 0 , 1 , ..} Em geral, 32 bits (aproximadamente 2 bilhes) Mximo de ~1.8e308 com preciso de 14 decimais digitais (nmero de 64 bits no formato IEEE).
Ponto Flutuante
String
Cadeia de String um conjunto de caracteres geralmente delimitados por caracteres limitada apstrofos ou aspas. pela memria. * Se uma string for delimitada por aspas, voc conseguir expandir o valor de uma varivel (desde que o PHP consiga identificar corretamente esta varivel) ou caractere de escape. Vetor ou Matriz contendo de 0 a muitos elementos Este tipo de objeto um vetor (quando tem uma nica dimenso) ou matriz (quando tem mais do que uma dimenso). Cada item numa array referenciado por um ndice, que pode ser numrico ou string.
Array
Variveis
A criao de variveis no PHP segue a seguinte regra: Todas as variveis devem ser precedidas do smbolo $ (Dlar ou cifro). Em seguida deve vir uma letra ou o caractere de sublinhado, para em seguida qualquer
Pgina
Prof. Carlos Majer Aplicaes Corporativas UNICID letra, nmero ou caractere de sublinhado. Caso aps o sinal de $ se insira um nmero, esta varivel est incorreta. Exemplos:-
$ativo =FALSE; $valor=1; // Nmero Inteiro $valor2=-2; # Outro nmero inteiro $valor=45.12; // Este um nmero de ponto flutuante $nome='Carlos'; $texto='Isto um string'; $1teste=123; // Errado
<html> <head> <title>Teste de Formulrio</title> </head> <body> <form name="f1" method="get" action="programa.php"> Nome: <input type="text" name="nome"> <br /> <input type="submit" value="Enviar"> </form> </body> </html>
Pgina
Pgina
Caso o desenvolvedor no informe o atributo name, o objeto no pode ser reconhecido pelo PHP
Em seguida, o desenvolvedor fecha o formulrio atravs do encerramento da marca </form>, bem como encerra as marcas de corpo </body> e de pgina HTML </html> Neste momento, o desenvolvedor tem a pgina que ser a responsvel pela criao dos objetos em seu navegador e que ir enviar estes objetos de formulrio para a pgina destino.
De preferncia, salve esta pgina HTML num local (pasta/diretrio) onde exista um servidor web instalado (Exemplo: Apache).
Objeto do tipo password igual ao elemento do tipo textbox, sendo que ao ser digitado seu contedo, asteriscos iro aparecer no lugra das letras. Objeto do tipo hidden (escondido) mantm o seu valor, mas no exibido ao usurio na pgina HTML (tela do navegador)
Pgina
Pgina
Prof. Carlos Majer Aplicaes Corporativas UNICID como um vetor, inserindo os valores que recebe neste objeto, possibilitando o acesso a todos os valores escolhidos pelo usurio. Exemplo:-
<form action="TipoArquivo.php" method="post" name="F1" enctype="multipart/form-data"> Escolha o arquivo<br> <input type="file" id="arquivo" name="arquivo"> <input type="submit" value="Enviar"> </form>
Quando o servidor recebe o formulrio, os dados podem ficar na matriz $_GET ou $_POST, mas quando se recebe arquivos (upload), suas informaes ficam na varivel $_FILES, que a matriz que mantm os dados de arquivos recebidos.
Para verses anteriores do PHP, a matriz que recebe tais valores a $HTTP_POST_FILES.
As seguintes informaes podem ser acessadas:["nome do arquivo"] ["name"] Nome do arquivo ["nome do arquivo"] ["size"] Tamanho do arquivo, em bytes ["nome do arquivo"] ["type"] Tipo do arquivo ["nome do arquivo"] ["tmp_name"] Nome da pasta de armazenamento temporria do arquivo Ao final do processamento do script PHP, o arquivo existente na pasta temporria simplesmente eliminado.
Pgina
if (move_uploaded_file($_FILES['arquivo']['tmp_name'], 'uploads/' . _FILES['arquivo']['name'])) echo "Arquivo ". basename( $_FILES['arquivo']['name']). " recebido com sucesso"; else echo "Houve algum problema no recebimento do arquivo";
Para restringir o tipo de arquivo a ser recebido, verifique o elemento type da matriz. Exemplo:-
<body> <h1>PHP - Recebe Arquivo</h1> <?php if ($_FILES["arquivo"]["error"]>0) echo "Erro: " . $_FILES["arquivo"]["error"] . "<br>"; else { echo "Nome do Arquivo: " . $_FILES["arquivo"]["name"] . "<br>"; echo "Tamanho: " . $_FILES["arquivo"]["size"] . "<br>"; echo "Tipo: " . $_FILES["arquivo"]["type"] . "<br>"; echo "Pasta de Armazenamento:" . $_FILES["arquivo"]["tmp_name"] . "<br>"; // Parte 2 $pasta_destino = "uploads/"; $pasta_destino .= $_FILES["arquivo"]["name"]; if (move_uploaded_file($_FILES["arquivo"]["tmp_name"] , $pasta_destino)) echo "Arquivo <strong>" . $_FILES["arquivo"]["name"] . "</strong> recebido com sucesso"; else echo "Ocorreu algum erro no recebimento do Arquivo " . $_FILES["arquivo"]["name"]; } ?> </body>
Configurando o PHP.INI
Algumas configuraes do PHP.INI so importantes para que o upload de arquivos funcione de forma adequada.
Pgina
10
Prof. Carlos Majer Aplicaes Corporativas UNICID Uma delas a seo file_uploads que deve estar com o valor On ou 1 para receber arquivos
file_uploads = On
Outra o nome do diretrio temporrio que armazenar os arquivos recebidos (se no for especificado utilizar o padro do sistema):-
upload_tmp_dir = "${path}\tmp\"
O tamanho mximo de um arquivo pode ser definido pela diretiva abaixo:-
upload_max_filesize = 2M
Caso deseje precaver o usurio de enviar um arquivo de tamanho maior que o desejado, o desenvolvedor pode inserir um campo de nome MAX_FILE_SIZE definindo em seu atributo value o tamanho mximo de um arquivo. Exemplo:-
Pgina
11
Arrays
Array o nome ingls para um tipo de objeto composto por uma coleo de dados. Esta coleo de dados, que pode ser de uma dimenso (vetor) ou de vrias dimenses (matrizes), pode conter diferentes tipos de dados. Irei utilizar a denominao matriz (es) para referenciar este tipo de objeto.
Criando Matrizes
Uma das formas de se cri-las atravs da funo array(). Exemplo:-
<?php $frutas = array ('a' => 'Abacate', 'b' =>'Banana','c' => 'Carambola'); print_r ($frutas); ?>
Resultado:Array ( [a] => Abacate [b] => Banana [c] => Carambola ) Podemos definir um ndice inicial para insero de itens numa matriz. Exemplo de Meses:-
<?php $meses = array(7 => 'Janeiro', 'Fevereiro', 'Maro', 'Abril', 'Maio', 'Junho', 'Julho', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Dezembro'); print_r($meses); ?>
Pgina
12
Prof. Carlos Majer Aplicaes Corporativas UNICID Resultado:Array ( [7] => Janeiro [8] => Fevereiro [9] => Maro [10] => Abril [11] => Maio [12] => Junho [13] => Julho [14] => Agosto [15] => Setembro [16] => Outubro [17] => Novembro [18] => Dezembro ) Uma item de uma matriz pode ter mais do que uma dimenso:-
<?php $frutas = array ('c' => 'Carambola', 'b' =>'Banana', 'a' => array ('Abacate', 'Abacaxi', 'Ameixa')); print_r ($frutas); ?>
Resultado:Array ( [c] => Carambola [b] => Banana [a] => Array ( [0] => Abacate [1] => Abacaxi [2] => Ameixa ) ) Alguns exemplos:-
Arquivo Carros.php
Matriz 1 - Carros <html> <head> <title>Matriz de Carros</title> </head> <body> <?php $carros= array("Polo", "Fiesta","Mercedes"); print_r($carros); ?> </body> </html>
Arquivo Frutas.php
<html> <head> <title>Matriz de Frutas</title> </head> <body> <?php $frutas = array ('a' => 'Abacate', 'b' =>'Banana','c' => 'Carambola'); print_r ($frutas); ?> </body> </html>
Arquivo Frutas2.php
<html> <head>
Pgina
13
<title>Matriz 2</title> </head> <body> <?php $frutas = array ('c' => 'Carambola', 'b' =>'Banana', 'a' => array ('Abacate', 'Abacaxi', 'Ameixa')); print_r ($frutas); ?> </body> </html>
Arquivo Deptos.php
<html> <head> <title>Matriz de Departamentos e Empregados</title> </head> <body> <?php $departamento[0] $departamento[1] $departamento[2] $departamento[3] = = = = "financeiro"; "producao"; "rh"; "comercial";
$empregados["financeiro"] = 5; $empregados["producao"] = 32; $empregados["rh"] = 3; $empregados["comercial"] = 15; print "Os departamentos da empresa so:-<br>"; foreach ($departamento as $d) { echo $d.'<br>'; } ?> </body> </html>
Arquivo Deptos2.php
<html> <head> <title>Matriz 2 de Departamentos e Empregados</title> </head>
Pgina
14
<body> <?php $departamento[0] $departamento[1] $departamento[2] $departamento[3] = = = = "financeiro"; "producao"; "rh"; "comercial";
sort($departamento); print "Os departamentos da empresa em ordem alfabtica so:-<br>"; foreach ($departamento as $d) { echo $d.'<br>'; } rsort($departamento); print "<br>Os departamentos da empresa em ordem reversa so:<br>"; foreach ($departamento as $d) { echo $d.'<br>'; } ?> </body> </html>
Arquivo Deptos3.php
<html> <head> <title>Matriz 3 de Departamentos e Empregados</title> </head> <body> <?php $departamento['C'] $departamento['D'] $departamento['A'] $departamento['B'] = = = = "financeiro (C)"; "producao (D)"; "rh (A)" ; "comercial (B)";
sort($departamento); print "Os departamentos da empresa em ordem alfabtica so:-<br>"; foreach ($departamento as $d) { echo $d.'<br>';
Pgina
15
} arsort($departamento); print "<br>Os departamentos da empresa em ordem da chave so:<br>"; foreach ($departamento as $d) { echo $d.'<br>'; } ?> </body> </html>
Arquivo Deptos4.php
<html> <head> <title>Matriz 4 de Departamentos e Empregados</title> </head> <body> <?php $departamento[0] $departamento[1] $departamento[2] $departamento[3] = = = = "financeiro"; "producao"; "rh"; "comercial";
$empregados["financeiro"] = 5; $empregados["producao"] = 32; $empregados["rh"] = 3; $empregados["comercial"] = 15; sort($departamento); print "Os departamentos da empresa em ordem alfabtica so:-<br>"; for ($n=0;$n<sizeof($departamento);$n++) { echo 'Departamento ' . $departamento[$n].' tem ' . $empregados[$n] . ' empregados <br>'; } ?> </body> </html>
Pgina
16
Arquivo Deptos5.php
<html> <head> <title>Matriz 5 de Departamentos e Empregados</title> </head> <body> <?php $departamento[0] $departamento[1] $departamento[2] $departamento[3] $empregados[0] $empregados[1] $empregados[2] $empregados[3] = = = = = = = = "financeiro"; "producao"; "rh"; "comercial";
5; 32; 3; 15;
sort($departamento); print "Os departamentos e empregadosso:-<br>"; for ($n=0;$n<sizeof($departamento);$n++) { echo 'Departamento ' . $departamento[$n] .' tem ' . $empregados[$n] . ' empregados <br>'; } ?> </body> </html>
Arquivo Meses.php
<html> <head> <title>Matriz de Meses</title> </head> <body> <?php $meses = array(7 => 'Janeiro', 'Fevereiro', 'Maro', 'Abril', 'Maio', 'Junho', 'Julho', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Dezembro'); print_r($meses); ?> </body>
Pgina
17
</html>
PHP e MYSQL
O PHP contm funes para acesso a diversos bancos de dados. O MYSQL um dos bancos de dados mais utilizado por quem desenvolve PHP. Irei relacionar as funes mais utilizadas nesta parte desta apostila.
Conectando a um servidor
O momento inicial e diramos primeiro passo para se recuperar informaes de um banco de dados MYSQL a conexo com o servidor MYSQL. Quando um usurio acessa o MYSQL, atravs de seu prompt em tela MS-DOS, ele informa uma linha de comando similar seguinte:C:\MYSQL\BIN> mysql u usurio root p senha <ENTER> Onde usurio a identificao de um usurio vlido no MYSQL e senha a senha deste usurio. Logo aps uma instalao padro, o usurio root criado, podendo sua senha no ser cadastrada. Exemplo:C:\MYSQL\BIN> mysql u root <ENTER> O PHP permite o acesso ao MYSQL atravs de uma funo especfica para este fim.
Funo mysql_connect
Prottipo
$conexao = mysql_connect("localhost","root","");
Retorno Esta funo retorna um objeto de conexo com o servidor ou FALSO caso no consiga conectar no servidor informado. Em caso de problemas ela seta o controle de erro interno do MYSQL que pode ser acessado pela funo mysql_error() (explicado adiante) Detalhe No exemplo acima, esta funo conecta a mquina cliente ao Servidor MYSQL, de nome localhost, utilizando a identificao de usurio root, com senha em branco.
Pgina
18
Prof. Carlos Majer Aplicaes Corporativas UNICID O resultado da conexo passado ao objeto de nome $conexao que tem seu valor setado em FALSO caso no se consiga executar a conexo.
Este o primeiro passo quando se deseja recuperar informaes de um banco de dados do MYSQL.
Funo mysql_select_db
Prottipo
$banco = mysql_select_db("sistema",$conexao);
Retorno Esta funo retorna um objeto de conexo com o Banco de Dados informado ou FALSO caso no consiga conectar no banco de dados informado. Em caso de problemas ela seta o controle de erro interno do MYSQL que pode ser acessado pela funo mysql_error() (explicado abaixo) Detalhe No exemplo acima, esta funo conecta a mquina cliente ao Banco de Dados de nome sistema, que existe no Servidor informado por $conexao. Caso o usurio no informe o objeto de conexo ($conexao), o MYSQL utilizar a ltima conexo aberta com o servidor (neste caso, com o localhost). O resultado da conexo passado ao objeto de nome $banco que tem seu valor setado em FALSO caso no se consiga executar a conexo.
Este o segundo passo quando se deseja recuperar informaes de um banco de dados do MYSQL.
Voc tambm pode utilizar este comando e variar apenas o Servidor de Conexo, de forma a conectar em mais do que um servidor, para troca de dados entre bancos de dados, por exemplo.
Funo mysql_query
Prottipo
Pgina
19
Prof. Carlos Majer Aplicaes Corporativas UNICID Detalhe No exemplo acima, esta funo executa a query de seleo de todos os registros da tabela usuarios no servidor apontado pelo objeto $conexao. Caso o usurio no informe o objeto de conexo ($conexao), o MYSQL utilizar a ltima conexo aberta com o servidor (neste caso, com o localhost). O resultado da conexo passado ao objeto de nome $resultado que tem seu valor setado em FALSO caso no se consiga executar a conexo. No caso especfico deste exemplo que seleciona registros de uma tabela, o objeto $resultado conter os nomes dos atributos (campos) da tabela usurios, bem como as linhas (registros) com seus valores.
Este o terceiro passo quando se deseja recuperar informaes de um banco de dados do MYSQL.
Explicao Complementar No exemplo aplicado acima, o contedo que este objeto ir armazenar ser todos os nomes de campos da tabela usuarios, como tambm seus valores (linhas/registros). Podemos abstrair um exemplo do contedo deste objeto da seguinte forma:Objeto $resultado ==> [id varchar(40)] [senha varchar(40)] [nome varchar(50)] [Majer] [123] [Carlos Majer] [Ana] [abc] [Ana Travassos] No exemplo acima, podemos entender que este objeto contm os nomes dos campos/atributos da tabela usuarios (id, senha e nome), seus tipos e tamanhos. Este objeto tambm armazena os valores das duas linhas (registros) encontradas na tabela, que neste caso so:{Majer, 123,Carlos Majer} e {Ana, abc, Ana Travassos} O que foi explicado o contedo deste objeto. Para recuperar estes valores, verifique explicao abaixo.
Funo mysql_num_rows
Prottipo
$numeroLinhas = mysql_num_rows($resultado);
1 Parmetro (Obrigatrio): Objeto de Resultado de Consulta MYSQL Retorno Esta funo retorna o nmero de linhas (registros) existente dentro de um objeto que armazena o resultado de uma consulta MYSQL. Em caso de problemas ela seta o controle de erro interno do MYSQL que pode ser acessado pela funo mysql_error() (explicado adiante) Detalhe Caso o comando de seleo retorne 0 (zero) porque no existem registros que satisfaam STRING de pesquisa SQL informada.
Este o quarto passo quando se deseja recuperar informaes de um banco de dados do MYSQL.
Pgina
20
Funo mysql_result
Prottipo
$valor = mysql_result($resultado,0,'senha');
Retorno Esta funo retorna o contedo da linha/campo informado. Como explicado no exemplo anterior, temos um objeto de nome $resultado que contm o que foi lido da tabela usuarios. A funo mysql_result nos permite ler o contedo das linhas/registros desta tabela. Para isto, devemos informar a linha (comea por zero) e o campo desejado. Exemplo:Olhe novamente a tabela usurios:[id varchar(40)] [senha varchar(40)] [nome varchar(50)] [Majer] [123] [Carlos Majer] [Ana] [abc] [Ana Travassos] Caso queiramos ler o campo nome, do segundo registro/linha, devemos escrever:-
$valor = mysql_result($resultado,1,'nome');
Utilizei $valor como nome de varivel para armazenar o dado resultante (que "Ana Travassos"). Poderia ter usado outro nome de varivel. Tive que informar 1, no segundo parmetro, pois a primeira linha a linha 0, e a segunda linha a linha 1. Por fim, informei o campo/atributo "nome" pois o que Eu queria. Se tivesse feito assim:-
$identificacao = mysql_result($resultado,0,'id');
O valor de $identificacao seria "Majer".
Login de Usurio
Abaixo disponibilizo um exemplo completo de funcionamento de Identificao de Usurio. A tela abaixo a loginBasico.htm, que basicamente uma pgina contendo os objetos:Formulrio cujo atributo action aponta para loginBasico.php Caixa de texto identificada como id, que ser utilizada para digitao da identificao do usurio Caixa de texto identificada como senha, que ser utilizada para digitao da senha do usurio Boto de submisso Detalhe Nenhum tipo de consistncia est sendo feito nesta pgina.
Pgina
21
<html> <head> <title>rea de Login</title> </head> <body> <form name="frmLogin" method="post" action="loginBasico.php"> <table width="300" border="1" bgcolor="#FFD7AE"> <tr> <td bgcolor="black" align="center"><font color="white"><strong>ACESSO À AREA RESTRITA</strong></font></td> </tr> <tr> <td> <p> <strong>Área exclusiva para usuários cadastrados.</strong> </p> <p> Usuário<br> <input type="text" name="id" id="id"> <br> <br> Senha<br> <input type="password" name="senha" id="senha"> <br><br> <input type="submit" name="Submit" value="OK"> </p> </td> </tr> </table> </form> </body> </html>
Pgina
22
Prof. Carlos Majer Aplicaes Corporativas UNICID Pgina loginBasico.php [DEBUG] ==> Comando SQL a ser executado: SELECT * FROM usuarios WHERE login='Carlos' [DEBUG] ==> Senha Passada:123 [DEBUG] ==> Nome passado:Carlos Majer ltimo acesso efetuado em 2007-10-23 Nmero de Acessos: 39 [DEBUG] ==> Comando SQL a ser executado: UPDATE usuarios SET ultAcesso=curdate() , numAcessos=40 WHERE login='Carlos' Aqui vai a parte trabalhada:ACESSO AREA RESTRITA rea exclusiva para usurios cadastrados. Caro (a) Carlos Majer ltimo Acesso 2007-10-23 No. de Entradas: 39 Seja bem vindo(a) rea reservada. Cdigo PHP (O que est precedido por duas barras e em negrito comentrio):-
<html> <head> <title>PHP - Login do Usurio</title> </head> <body> <?php // 1o. Passo - verificar se o usurio enviou ID e SENHA if($_POST['id']=='' || $_POST['senha']=='') { echo '<script> history.go(-1); alert("Informe Usurio e Senha !");</script>'; } // 2o. Passo - vamos criar uma conexo com o MYSQL $conn = mysql_connect("localhost","root",""); // Seno conseguiu conectar, a varivel $conn estar setada como falsa if (!$conn) die("Erro na conexo com o servidor localhost -->" . mysql_error()); // 3o. Passo - vamos selecionar o banco de dados desejado, // neste caso sistema, usando o objeto de conexo $conn // criado acima $db = mysql_select_db("sistema",$conn); // Seno conseguiu selecionar o banco de dados, a varivel
Pgina
23
// $db estar setada como falsa if (!$db) die("Erro na seleo do banco de dados sistema -->" . mysql_error()); // // // // 4o. Passo - Uma vez que estamos conectados ao MYSQL e selecionar o banco de dados, podemos executar a query que ir pesquisar a tabela de usurios para localizar o usurio/senha desejado.
// Desejamos criar algo assim:// SELECT * FROM usuarios WHERE login='CARLOS' // Vamos ento montar o string // 4.1 - Passo .1 - Inserindo o primeiro trecho na varivel $comandoSQL = "SELECT * FROM usuarios WHERE login="; // // // // Bom, colocamos um pedao da query na varivel. Ocorre, que precisamos inserir uma aspa. No exemplo do select acima, inseri o texto CARLOS entre aspas simples, na string SQL
// Como fazer isto, ou seja, como inserir uma aspa simples // dentro de uma varivel SQL ? // Insira-a, delimitando-a com aspas duplas --> aspas duplas // + aspas simples + aspas duplas // Com isto, se consegue inserir aspa simples. Vamos fazer // isto abaixo:$comandoSQL = $comandoSQL . "'"; // Agora, a varivel est com o seguinte contedo:// SELECT * FROM usuarios WHERE login=' // 4.2 - Inserindo o contedo do nome/id // Ocorre que 'CARLOS' contedo de um objeto do tipo texto, // que veio da pgina LOGIN.HTM e foi recebido pelo PHP // Podemos verificar acima (aps passo 1) que os contedos // destas variveis podem ser acessados atravs da matriz // $_POST[...] // Vamos inserir o contedo da varivel identificao, que // 'CARLOS':$comandoSQL = $comandoSQL . $_POST['id']; // Agora, a varivel est com o seguinte contedo:// SELECT * FROM usuarios WHERE login='CARLOS // Vamos inserir a aspa simples, fechando o contedo CARLOS? // Notem o uso de .=, o que significa que o comando abaixo // algo assim:-
Pgina
24
// $comandoSQL = $comandoSQL + ... $comandoSQL .= "'"; // // // // // // Ateno, caso queiram verificar o comando SQL que voc vai tentar executar no banco de dados, sugiro descomentar a linha abaixo, que ir mostrar a STRING SQL e ir interromper/parar a execuo deste script. Tendo certeza de que a STRING SQL est correta, volte a comentar a linha abaixo e execute novamente o script PHP.
// die($comandoSQL); // // // // Agora, a varivel est com o seguinte contedo:SELECT * FROM usuarios WHERE login='CARLOS' Estamos com a varivel $comandoSQL do jeito que precisvamos
// Vamos executar a consulta ? // 5o. Passo - Executando a consulta // Para executarmos a consulta, iremos utilizar a // funo mysql_query $resultado = mysql_query($comandoSQL,$conn); // // // // // // // A funo mysql_query recebe dois parmetros :: Um string de consulta SQL (no nosso exemplo, usamos uma varivel que contm este string) :: A conexo com o banco, que ser utilizada para executar a consulta :: Ela retorna um objeto contendo as colunas selecionadas que pode ser consultado
if (!$resultado) die("Execuo de consulta gerou o seguinte erro no MYSQL -->" . mysql_error()); // // // // // 5.1 - Checando se o usurio existe Para isto, utilizaremos a funo mysql_num_rows que recebe como parmetro o objeto resultado de uma query (consulta) e retorna o nmero de linhas existentes dentro deste objeto. Se for zero o comando SQL no encontrou nada
if(mysql_num_rows($resultado)==0) { echo '<script> history.go(-1); alert("ID no encontrado!");</script>'; } // 5.2 - Mas a senha tambm pode estar incorreta, certo ?
Pgina
25
// Vamos checar ? // // // // // // // // // // // // Utilizaremos a funo mysql_result para isto. Informamos os parmetros::: $resultado --> que foi o objeto resultante da query/consulta anterior :: 0 --> Que a primeira linha que desejamos consultar. Num comando do tipo SELECT, diversas linhas (registros) podem ser retornados. :: nome --> Informos o nome do campo, que neste caso senha O objetivo comparar a informao do banco de dados com a senha digitada na pgina de login e recuperada pelo PHP em sua varivel/matriz $_POST['senha']
echo '<p>[DEBUG] ==> Comando SQL a ser executado:</font><br>' . $comandoSQL . "</p>"; if (mysql_result($resultado,0,'senha')!=$_POST['senha']) { echo '<script> history.go(-1); alert("Senha Incorreta !");</script>'; } echo '<p>[DEBUG] ==> Senha Passada:' . mysql_result($resultado,0,'senha') . '<br></p>'; // 6 - Exibir os dados desejados // Podemos agora exibir certos dados, dentre eles o nome, // nmero de acessos e data de ltimo acesso. echo '<p>[DEBUG] ==> Nome passado:' . mysql_result($resultado,0,'nome') . '<br></p>'; echo 'ltimo acesso efetuado em ' . mysql_result($resultado,0,'ultAcesso') . '<br>'; echo 'Nmero de Acessos: '. mysql_result($resultado,0,'numAcessos') . '<br>'; // 7 - Atualizao do ltimo acesso e nmero de acessos, no // banco de dados. // Iremos agora atualizar a informao de nmero de acessos. // Para isto, pegamos o nmero de acessos do registro // selecionado e colocamos seu valor na varivel $acessos, // que ser incrementada em um $acessos=mysql_result($resultado,0,'numAcessos'); $acessos++; // Iremos agora criar o comando SQL para atualizao do // registro do usurio. // Queremos algo assim:// UPDATE usuarios SET ultAcesso='2007-10-21', numAcessos=2
Pgina
26
// WHERE login='Carlos' // A nica coisa diferente aqui a data do ltimo acesso do // usurio, que queremos armazenar no campo ultAcesso sempre // que o usurio acessar o sistema // // // // // // // // Para isto, irei utilizar a funo curdate(), do prprio MYSQL, que recupera a data atual do servidor MYSQL no formato AAAA-MM-DD, que a forma que nosso campo entende. Note que este comando no funcionar em outro Servidor SQL, pois especfico do MYSQL. Caso tenha outro servidor SQL, procure localizar a funo deste servidor que recupera a DATA atual do sistema. Nosso comando SQL dever ficar assim:-
// UPDATE usuarios SET ultAcesso = curdate(), numAcessos=2 // WHERE login='Carlos' $comandoSQL $comandoSQL $comandoSQL $comandoSQL $comandoSQL ='UPDATE usuarios SET ultAcesso='; .= "curdate() , "; .= "numAcessos=".$acessos ; .= " WHERE login='" . $_POST['id']; .= "'";
echo '<p>[DEBUG] ==> Comando SQL a ser executado:</font><br>' . $comandoSQL . "</p>"; $atualizacao = mysql_query($comandoSQL,$conn); if (!$atualizacao) echo 'Erro na atualizaco de registro do usurio: '.mysql_error(); else echo '<script> alert("Seja bem vindo(a) ' . mysql_result($resultado,0,'nome') . '");</script>'; echo 'Aqui vai a parte trabalhada:-<br>' ; ?> <HR> <strong>ACESSO À AREA RESTRITA</strong> <p>Área exclusiva para usuários cadastrados.</p> <p> Caro (a) <?php echo mysql_result($resultado,0,'nome'); ?> <br> <br> ltimo Acesso<br> <?php echo mysql_result($resultado,0,'ultAcesso'); ?>
Pgina
27
<br> <br> No. de Entradas:<br> <?php echo mysql_result($resultado,0,'numAcessos'); ?> <br><br> Seja bem vindo(a) rea reservada. </p> </body> </html>
Pgina
28