Escolar Documentos
Profissional Documentos
Cultura Documentos
Curso de PHP e MYSQL
Curso de PHP e MYSQL
PHP e MySQL
Desenvolvimento
Web
Autor:
Felipe Costa Fernandes
Filipe Costa Fernandes
PHP e MySQL
Desenvolvimento Web
Luke Welling e Laura Thomson
significativos aos campos de formulrio dos quais voc possa facilmente se lembrar ao
comear a escrever o script de PHP.
Para embutir cdigo PHP em HTML devemos simplesmente escrever o cdigo PHP
dentro do arquivo HTML.
Ex:
<html><head>
<title> PHP e MySQL </title>
</head>
<body>
<h1> Meu primeiro programa </h1>
<?php
echo <p> Cdigo PHP em um arquivo HTML.;
?>
</body> </html>
UTILIZANDO TAGS DE PHP
O cdigo de PHP no exemplo anterior comeou com <?php e acabou com ?>. Isso
semelhante a todas as tags HTML porque todas comeam com um smbolo menor que (<) e
terminam com um smbolo maior que (>). Esses smbolos so chamados tags de PHP que
dizem ao servidor da Web onde o cdigo de PHP comea e onde termina. Qualquer texto
entre as tagas ser interpretado como PHP. Qualquer texto fora dessas tags ser tratado com
HTML normal.
COMENTRIOS
Os comentrios em PHP comeam com /* e terminam com */.
/* esta linha no ser processada pois est como comentrio */
ACESSANDO VARIVEIS DE FORMULRIO
Dentro do script de PHP, voc pode acessar cada um dos campos de formulrio como
uma varivel com o mesmo nome do campo de formulrio.
Ex:.
Em um arquivo HTML que tenha o seguinte campo de formulrio:
<input type=text name=teste size=20 maxlength=20>
Ao clicar em um boto submit e enviar estes dados para um arquivo PHP, o PHP
receber uma varivel de nome teste contendo o mesmo valor do campo de formulrio do
HTML.
As variveis so tratadas pelo PHP com um sinal de $ (cifro) no inicio. A varivel
teste do exemplo anterior ser tratada pelo PHP com $teste.
Operador
Nome
+
*
/
%
Adio
Subtrao
Multiplicao
Diviso
Mdulo
Exemplo
$a + $b
$a - $b
$a * $b
$a / $b
$a % $b
igual a
idntico a
no igual a
no igual a
menor que
maior que
menor que ou igual a
maior que ou igual a
6
$a = = $b
$a = = = $b
$a != $b
$a <> $b
$a < $b
$a > $b
$a <= $b
$a >= $b
O OPERADOR TERNRIO
Condio ? valor_se_true : valor_se_false
($total>60) ? Aprovado : Reprovado
FUNES DO PHP
Gettype($varivel) -> retorna um string com o nome do tipo da varivel.
Is_array($var), is_doubl($var), is_float($var), is_real($var), is_long($var),
is_int($var), is_integer($var), is_string($var), is_object($var) -> retorna true se $var for
desse tipo e false se no for.
IF
If ($total = = 0)
{
echo total igual a zero;
}
else
{
echo total no igual a zero;
}
SWITCH (CASE)
Switch($total)
{
case 0 :
echo total igual a zero;
Filipe Costa Fernandes
break;
case 1 :
echo total igual a um;
break;
default :
echo total indefinido;
break;
}
WHILE
$num = 1;
while ($num <= 5)
{
echo $num . <BR>;
$num++;
}
FOR
For ($num = 1; $num <= 5; $num++)
{
echo $num . <BR>;
}
DO .. WHILE
$num = 1;
do
{
echo $num . <BR>;
$num++
} while ($num < 1);
ARRAYS
$vetor = array (um, dois, trs);
ou
$vetor[0] = um;
$vetor[1] = dois;
$vetor[2] = trs;
Filipe Costa Fernandes
MANIPULAO DE STRING
$texto . texto adicional -> contatena o contedo de $texto com texto adicional.
trim($texto) -> elimina os espaos em branco da esquerda e da direita de $texto.
ltrim($texto) -> elimina os espaos em branco somente da esquerda de $texto.
chop($texto) -> elimina os espaos em branco somente da direita de $texto.
strtoupper() -> deixa o texto em letras maisculas.
strtolower() -> deixa o texto em letras minsculas.
Ucfirst() -> coloca o primeiro caractere da string em maisculo.
Ucwords() -> coloca o primeiro caractere de cada palavras do texto em maisculo.
10
CHAMANDO FUNES
Para chamar uma funo com o PHP simplesmente digitamos o nome da funo
seguido de parnteses, e se a funo tiver parmetros e/ou retorno estes tambm devero ser
lembrados.
Ex.:
Funo simples:
nome_da_funo( );
Funo com um parmetro ou mais:
Nome_da_funo(lista de parmetros separados por virgula);
Funo com retorno:
$var = nome_da_funo( );
11
OBSERVAO:
Nomes de funes no fazem distino entre letras maisculas e minsculas, e nomes
de variveis fazem esta distino.
Ex.:
As funes somador( ), SoMaDoR( ) e SOMADOR( ), fazem referencia a
mesma funo.
As variveis total, ToTal e TOTAL, so trs variveis diferentes.
ESTRUTURA BSICA DA FUNO
Function nome_da_funo( )
{
echo corpo da funo;
}
function nome_da_funo( lista de parmetros)
{
echo corpo da funo;
return retorno;
}
function nome_da_funo( & lista de parmetros)
{
echo corpo da funo;
}
Observao: O & (e comercial) antes do nome do parmetro na declarao da funo
indica que este parmetro est sendo passado por referencia.
PHP ORIENTADO A OBJETOS
Estrutura de uma classe
Uma definio mnima de classe parecida com o seguinte:
Class classname
{
}
Para serem teis nossas classes precisam de atributos e operaes. Criamos atributos
declarando variveis dentro de uma definio de classe utilizando a palavra-chave var.
Ex.:
Class classname
{
var $atributo1;
var $atributo2;
Filipe Costa Fernandes
12
function operacao1( )
{
}
function operao2( )
{
}
}
Construtores
A maioria das classes tem um tipo de operao chamada construtor. Um construtor
chamado quando um objeto criado e ele normalmente tambm realiza tarefas teis de
inicializao como configurar atributos como valores iniciais sensveis ou criar outros
objetos necessrios para esse objeto.
Um construtor declarado da mesma maneira como outras operaes, mas tem o
mesmo nome que a classe. Embora manualmente possamos chamar o construtor, seu
propsito principal ser chamado automaticamente quando um objeto criado.
Ex.:
Class classname
{
function classname ( $parametro )
{
echo Construtor chamado como o parmetro $parametro;
}
}
Para criarmos objetos de uma classe agimos da seguinte maneira:
$a = new classname(Primeiro);
A linha acima cria um objeto da classe classname, chamado de $a e passa o parmetro
primeiro para esta classe. Quando o objeto $a criado, automaticamente o construtor da
classe classname chamado e ele ecoar uma mensagem como a seguinte:
Construtor chamado com o parmetro Primeiro
UTILIZANDO ATRIBUTOS DE CLASSE
Dentro de uma classe temos acesso a um ponteiro especial chamado $this. Se um
atributo de sua classe atual se chama $atributo, podemos referenci-lo como $this->atributo
quando configurarmos ou acessarmos a varivel a partir de uma operao dentro da classe.
Var $atributo;
Function operao( $param )
{
$this->atributo = $param;
Filipe Costa Fernandes
13
echo $this->atributo;
}
outro exemplo,
class classname
{
var $atributo;
}
$a = new classname( );
$a->atributo = valor;
echo $a->atributo;
outro exemplo,
class classname
{
var $atributo;
function get_atributo( )
{
return $this->atributo;
}
function set_atributo( $novo_valor )
{
$this->atributo = $novo_valor;
}
}
14
$a->operacao1( );
$a->operacao2(12,teste);
se as operaes retornam algo, podemos capturar esses dados de retorno da seguinte
maneira:
$x = $a->operacao1( );
$y = $a->operacao2(12,teste);
IMPLEMENTANDO HERANA NO PHP
Se nossa classe deve ser uma subclasse de outra, voc pode utilizar a palavra-chave
extends para especificar isso. O prximo cdigo cria uma classe chamada B que herda de
alguma classe anteriormente definida chamada A.
Class B extends A
{
var $atributo2;
function operacao2( )
{
}
}
class A
{
var $atributo1;
function operacao1( )
{
}
}
todos os seguintes acessos a operaes e atributos de um objeto de tipo B seriam
vlidos:
$b = new B( );
$b->operacao1( );
$b->atributo1 = 10;
$b->operacao2( );
$b->atributo2 = 10;
A classe B pode referenciar operacao1( ) e $atributo1, mas a classe A no pode
referenciar operacao2( ) e $atributo2.
15
Para fazer isso, v para uma interface de linha de comando na sua mquina e digite o
seguinte:
> mysql h nome_do_host u nome_do_usurio -p
A opo h utilizada para especificar o host a que voc quer conectar-se; isto , a
mquina em que o servidor de MySQL est executando. Se estiver executando esse
comando na mesma mquina que o servidor de MySQL, voc pode omitir essa opo. A
opo u utilizada para especificar o nome do usurio e a opo p instrui o servidor ao
qual voc quer conectar-se utilizando uma senha.
Criando Banco de Dados e Usurios
Para criar um banco de dados devemos digitar a seguinte linha de comando no prompt
do MySQL:
Mysql> create database nomedodb;
Se tudo ocorreu bem, voc dever ver uma resposta parecida com a seguinte:
Query OK, 1 row affected (0.06 sec)
Isso significa que tudo funcionou bem.
Usurios e privilgios
O comando GRANT utilizado para criar usurios e fornecer privilgios. O
formulrio geral do comando GRNAT :
GRANT privilgios [colunas]
ON
item
TO
nome_do_usurio [IDENTIFIED BY senha]
[WITH GRANT OPTION]
as clusulas entre colchetes so opcionais.
Tipos e nveis de privilgios
PRIVILGIO
Select
Insert
Update
Delete
Index
Alter
Create
Drop
APLICA-SE A
Tabelas, colunas
Tabelas, colunas
Tabelas, colunas
Tabelas
Tabelas
Tabelas
Banco de dados, tabelas
Banco de dados, tabelas
DESCRIO
Fazer seleo
Fazer insero
Fazer alterao
Fazer deleo
Criar ou excluir ndices
Alterar estrutura de tabelas
Criar BDs e Tabelas
Excluir BDs ou tabelas
16
DESCRIO
Permite recarregar tabelas Grant e limpar privilgio, hosts, logs e tabelas.
Permite desligar o servidor de MySQL.
Permite visualizar processos de servidor e elimina-los.
Permite que os dados sejam lidos em tabelas a partir de arquivos e viceversa.
O comando REVOKE
REVOKE o oposto de GRANT. Esse comando utilizado para retirar privilgios de
um usurio. Sua sintaxe muito semelhante a de GRANT:
REVOKE privilgios [(colunas)]
ON item
FROM nome_do_usurio
Se voc concedeu a clusula WITH GRANT OPTION, pode revogar fazendo assim:
REVOKE GRANT OPTION
ON item
FROM nome_do_usurio <F?P14>
Exemplos utilizando GRANT e REVOKE
Para configurar um administrador, voc pode digitar:
Mysql> Grant all
-> on *
-> to Fred identified by mn123
-> With Grant Option;
Isso concede todos os privilgios em todos os bancos de dados a um usurio chamado
Fred com a senha mnb123 e permite a ele passar esses privilgios a outros usurios.
O exemplo abaixo mostra como retirar o usurio Fred:
Mysql> revoke all
-> on *
-> from Fred;
Agora vamos configurar um usurio regular sem privilgios:
Mysql> Grant usage
-> on books.*
17
18
19
cidade,
telefone,
idade)
values
Se quisermos inserir mais de uma linha de uma s vez, devemos separar os valores
das linhas por virgula, como mostrado no exemplo abaixo:
Insert into clientes values
(Filipe,Ipatinga,38261111,21),
(Thiago,Ipatinga,38262222,18)
(Gildete,Sete Cachoeiras,38213333,42)
(Natan,Santana do Paraso,38224444,45);
Ou podemos inserir valores atravs de um arquivo com cdigos SQL:
> mysql h host u username p < arquivo.sql
20
FROM tabela;
Onde (*) siginifica tudo (todos os campos existentes em tabela)
SELECT itens
Seleciona as colunas da tabela definidas em itens.
Ex.: select nome, idade
FROM tabelas
Determina que tabelas sero usadas na consulta.
Ex.: from clientes, fornecedores
[ WHERE condio ]
Determina a condio para seleo.
Ex.: where clientes.cdigo = fornecedores.cdigo and clientes.nome=Filipe
[GROUP BY tipo_de_grupo ]
Nos fornece o resultado da consulta em grupos. Como por exemplo, se eu quero saber
o valor total das compras realizadas por um determinado cliente, eu fao a consulta com um
GROUP BY por nome de clientes.
Ex.: group by clientes.nome
[ HAVING definio_de_where ]
Alm de agrupar e agregar dados, podemos realmente testar o resultado de um
agregado utilizando uma clusula HAVING. Isso vem logo depois da clusula GROUP BY
e como uma WHERE que se aplica somente a grupos e agregados. Para estender nosso
exemplo anterior, se quisermos saber quais clientes tem um total de compras maior que
R$50, podemos utilizar a seguinte consulta:
Select C.nome, sum(CO.valor)
From clientes as C, compras as CO
WHERE C.cdigo = CO.cdigo
GROUP BY C.nome
HAVING sum(CO.valor) > 50;
[ ORDER BY item_de_ordenao ]
Ordena os dados da consulta em ordem crescente ou decrescente, definidos por ASC
(crescente) ou DESC (decrescente).
Ex.: ORDER BY nome asc
ou
ORDER BY nome desc
[ LIMIT critrios_de_limite ] ;
utilizada para especificar quais linhas da sada devem ser retornadas. Essa clusula
aceita dois parmetros: o nmero de linha a partir do qual iniciar e o nmero de linhas para
retornar.
Ex.: Select nome
From clientes
Filipe Costa Fernandes
21
Limit 2, 3;
Essa consulta pode ser lida como: Selecione nome de clientes e ento retorne 3
linhas, iniciando da linha 2 na sada. Note que os nmeros de linhas comeas a partir de
zero.
Operadores de comparao teis para a clusula WHERE
=
>
<
>=
<=
!= ou <>
IS NOT
IS NULL
BETWEEN
IN
NOT IN
LIKE
NOT LIKE
REGEXP
DESCRIO
Mdia de valores na coluna especificada
Se especificarmos uma coluna, essa funo fornecer o n de valores
no nulos nessa coluna. Se adicionar a palavra DISTINCT na frente do
nome de coluna, voc obter uma contagem dos valores distintos
somente nessa coluna. Se especificar COUNT(*), obter uma contagem
de linha independentemente dos valores nulos (NULL).
MIN(coluna)
O valor mnimo na coluna especificada.
MAX(coluna)
O valor mximo na coluna especificada.
STD(coluna)
Desvio padro dos valores na coluna especificada.
STDDEV(coluna) O mesmo que STD(coluna).
SUM(coluna)
Soma de valores na coluna especificada.
22
UPDATE livros
Set precos = precos*1.1
O exemplo acima faz uma modificao na tabela livros, aumentando em 10% o preo
de todos os livros.
UPDATE cliente
SET telefone = 38263333
WHERE nome = Filipe;
O exemplo acima altera o telefone do cliente que se chama Filipe.
Alterando tabelas depois da criao
Para alterarmos a estrutura de uma tabela temos o instruo ALTER TABLE.
Sua forma bsica :
ALTER TABLE nome_da_tabela alterao1, alterao2,...
Obs.: Podemos fazer somente uma alterao por instruo ALTER TABLE, mas
podemos us-la quantas vezes quisermos.
Os diferentes tipos de alterao que podemos fazer com essa instruo so mostrados
abaixo.
SINTAXE
ADD [coluna] descrio_da_coluna
[FIRST | AFTER coluna] como
DESCRIO
Adiciona uma nova coluna na localizao
especificada (se no especificada, a coluna
entra
no
final).
Note
que
as
descries_da_coluna precisam de um nome
e um tipo, exatamente como uma instruo
CREATE.
ADD
[coluna]
(descrio_da_coluna, Adiciona uma ou mais colunas novas no fim
descrio_da_coluna,...)
da tabela.
ADD INDEX [ndice] (coluna,...)
Aa um ndice tabela na coluna especificada
ADD PRIMARY KEY (coluna,...)
Torna a coluna especificada a chave primria
da tabela.
ADD UNIQUE [ndice] (coluna,...)
Adiciona um ndice tabela na coluna
especificada.
ALTER [coluna] coluna (SET DEFAULT Adiciona ou remove um valor padro de
23
24
Para excluir bancos de dados usamos a instruo DROP DATABASE, que parecida
com:
DROP DATABASE banco_de_dados;
Navegador
Servidor
WEB
Mecanismo
PHP
MySQL
Server
abaixo segue um exemplo (em forma de codigo) de como podemos acessar uma
banco de dados MySQL a partir da WEB com o PHP.
<Arquivo procura.html>
<html>
<head>
<title> Procura por livros </title>
</head>
<body>
<h1> Livraria PHP Catalogo de procura </h1>
<form action=resultado.php method=post>
Escolha o tipo da pesquisa: <br>
<select name=tipo>
<option value=autor> Autor
<option value=titulo> titulo
<option value=codigo> codigo
</select>
<br>
Digite o termo de pesquisa: <br>
<input name=pesquisa type=text>
<br>
<input type=submit value=Pesquisar>
</form>
</body>
</html>
25
Este cdigo nos mostra um formulrio com um Combobox para escolhermos o tipo, e
um edit para digitarmos os parametros para a pesquisa. E por fim um boto para pesquisar.
Ou clicarmos neste boto ser chamado o arquivo resultado.php, e seu cdigo mostrado
abaixo.
<resultado.php>
<html>
<head>
<title> Procura por livros </title>
</head>
<body>
<h1> Livraria PHP Catalogo de procura </h1>
<?php
trim($pesquisa);
if (!$tipo || !$pesquisa )
{
echo Informe todos os campos. Volte e os digite.;
exit;
}
$tipo = addslashes($tipo);
$pesquisa = addslashes($pesquisa);
@ $db = mysql_pconnect(localhost,banco_de_dados,senha);
if (!$db)
{
echo Erro: No conectado ao banco de dados;
exit;
}
mysql_select_db(banco_de_dados);
$query = select * from livros where .$tipo. Like %.$pesquisa.%;
$result = mysql_query($query);
$num_result = mysql_num_rows($result);
for ($i=0;$i<num_result;$i++)
{
$linha = mysql_fetch_array($result);
echo <p><strong>.($i+1).. Titulo: ;
echo htmlspecialchars( stripslashes($linha[titulo]));
echo </strong><br>Autor: ;
echo htmlspecialchars( stripslashes($linha[autor]));
echo <br> Codigo: ;
echo htmlspecialchars( stripslashes($linha[codigor]));
echo <br> Preo: ;
echo htmlspecialchars( stripslashes($linha[preco]));
Filipe Costa Fernandes
26
echo </p>;
}
?>
</body>
</html>
CONFIGURANDO UMA CONEXO
@ $db = mysql_pconnect(localhost, Usurio,Senha);
Esta funo retorna um identificador de link para seu banco de dados do MySQL em
caso de sucesso ou falso em caso de falha.
Para realizar conexes com banco de dados temos duas funes, mysql_pconnect( ) e
mysql_connect( ). A diferena que mysql_pconnect( ) retorna uma conexo persistente
para o banco de dados.
Uma conexo normal para o banco de dados ser fechada quando um script concluir a
execuo ou quando o script chamar mysql_close( ). A conexo persistente permanece
aberta depois que o script conclui a execuo e no pode ser fechada com a funo
mysql_close( ).
Fazer uma conexo com um banco de dados envolve uma certa quantidade de
overhead e, portanto, leva algum tempo. Quando mysql_pconnect( ) chamado, antes de
tentar conectar-se ao banco de dados, ele automaticamente verificar se j no h uma
conexo persistente aberta. Se houver, ele utilizar essa em vez de abrir uma nova. Isso
economiza tempo e overhead de servidor.
ESCOLHENDO UM BANCO DE DADOS PARA UTILIZAR
Podemos escolher o banco de dados que queremos utilizar com a funo
Mysql_select_db(banco_de_dados);
CONSULTANDO O BANCO DE DADOS
Para realizar uma consulta utilizamos a funo mysql_query( ), mas, antes bom
configurarmos a consulta que desejamos executar:
$query = select * from livros;
Agora podemos executar a consulta:
$result = mysql_query($query);
ou podemos utilizar a funo
mysql_db_query,
Filipe Costa Fernandes
27
Esta funo muito semelhante a anterior, mas permite especificar o banco de dados
em que voc gostaria de executar a consulta. Essa funo como uma combinao das
funes mysql_select_db( ) e mysql_query( ).
RECUPERANDO RESULTADOS DA CONSULTA
Para recuperar o resultado da consulta usaremos duas funes: mysql_num_rows( ) e
mysql_fetch_array( ).
A funo mysql_num_rows( ) fornece o nmero de linhas retornadas pela consulta.
$num_results = mysql_num_rows( $result );
A funo mysql_fetch_array( ) retorna cada linha da consulta em um array
associativo, com cada chave um nome de atributo e com cada valor o valor correspondente
no array.
$row = mysql_fetch_array( $result );
Para acessarmos o campo nome resultante desta consulta usamos o seguinte comando
$row[nome];
H diversas variaes quanto ao mtodo de obter resultados a partir de um
identificador de resultado. Em vez de um array associativo, podemos recuperar os
resultados em um array enumerado com mysql_fetch_row( ), da seguinte maneira:
$row = mysql_fetch_row( $result );
Para acessarmos um campo resultante desta consulta usamos o nmero referente ao
campo desejado. Por exemplo, se o campo nome for o primeiro campo da tabela usamos o
seguinte comando:
$row[0];
DESCONECTANDO-SE DO BANCO DE DADOS
Para fechar uma conexo com o banco de dados usamos
Mysql_close( nome_da_conexo )
LIBERANDO ESPAO
Para liberar espao em memria usamos mysql_free_result. Esta funo libera a
memria utilizada para armazenar o resultado de uma consulta.
28
Mysql_free_result( $result )