Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


PHP e PostgreSQL - Apostilas - Informática Part2, Notas de estudo de Informática

Apostilas de Informática sobre PHP e PostgreSQL, Enviando os dados para o servidor web, Formulários HTML, Sintaxe básica, Tipos, Estruturas de controle, Funções, Variáveis e Constantes.

Tipologia: Notas de estudo

2013

Compartilhado em 27/08/2013

Garoto
Garoto 🇪🇸

4.6

(121)

1 / 24

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Existem duas maneiras de se passar valores por referência: pode-se indicar na declaração da função,
ou na chamada da mesma. Quando se indica a passagem por referência na declaração da função, tal
passagem de argumentos sempre será por referência. Em ambos os casos se utiliza o caracter & para
indicar que a passagem será por referência.
function incrementa(&$num1, $num2) {
$num1++;
$num2++;
}
$a = $b = 5;
incrementa($a, $b); /* neste caso $a vale 6 e $b continua a valer 5 no término da execução da função */
incrementa($a, &$b); /* aqui, as dus variáveis terão seus valores alterados */
Argumentos com valores pré-denidos (default)
Em PHP é possível ter valores
default
para argumentos de funções, ou seja, valores que serão assumidos
em caso de nada ser passado no lugar do argumento. Quando um parâmetro é declarado desta maneira,
a passagem do mesmo na chamada da função torna-se opcional. Por exemplo:
function imprime($texto = ``III Sinec'') {
echo ``$texto'';
}
imprime(); // imprime ``III Sinec''
imprime(``123 testando''); // imprime ``123 testando''
Contexto
O contexto é o conjunto de variáveis e seus respectivos valores num determinado ponto do programa.
Na chamada de uma função, ao iniciar a execução do bloco que contém a implementação da mesma é
criado um novo contexto, contendo as variáveis declaradas dentro do bloco, ou seja, todas as variáveis
utilizadas dentro daquele bloco serão eliminadas ao término da execução da função.
Escopo
O escopo de uma variável em PHP dene a porção do programa onde ela pode ser utilizada. Na
maioria dos casos todas as variáveis têm escopo global. Entretanto, em funções denidas pelo usuário um
escopo local é criado. Uma variável de escopo global não pode ser utilizada no interior de uma função
sem que haja uma declaração. Por exemplo:
$texto = ``III Sinec'';
function imprime() {
25
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18

Pré-visualização parcial do texto

Baixe PHP e PostgreSQL - Apostilas - Informática Part2 e outras Notas de estudo em PDF para Informática, somente na Docsity!

Existem duas maneiras de se passar valores por referência: pode-se indicar na declaração da função, ou na chamada da mesma. Quando se indica a passagem por referência na declaração da função, tal passagem de argumentos sempre será por referência. Em ambos os casos se utiliza o caracter & para indicar que a passagem será por referência.

function incrementa(&$num1, $num2) { $num1++; $num2++; } $a = $b = 5; incrementa($a, $b); /* neste caso $a vale 6 e $b continua a valer 5 no término da execução da

incrementa($a, &$b); /* aqui, as dus variáveis terão seus valores alterados */

Argumentos com valores pré-denidos (default)

Em PHP é possível ter valores default para argumentos de funções, ou seja, valores que serão assumidos em caso de nada ser passado no lugar do argumento. Quando um parâmetro é declarado desta maneira, a passagem do mesmo na chamada da função torna-se opcional. Por exemplo:

function imprime($texto = III Sinec'') { echo$texto''; } imprime(); // imprime III Sinec'' imprime(123 testando''); // imprime ``123 testando''

Contexto

O contexto é o conjunto de variáveis e seus respectivos valores num determinado ponto do programa. Na chamada de uma função, ao iniciar a execução do bloco que contém a implementação da mesma é criado um novo contexto, contendo as variáveis declaradas dentro do bloco, ou seja, todas as variáveis utilizadas dentro daquele bloco serão eliminadas ao término da execução da função.

Escopo

O escopo de uma variável em PHP dene a porção do programa onde ela pode ser utilizada. Na maioria dos casos todas as variáveis têm escopo global. Entretanto, em funções denidas pelo usuário um escopo local é criado. Uma variável de escopo global não pode ser utilizada no interior de uma função sem que haja uma declaração. Por exemplo:

$texto = ``III Sinec'';

function imprime() {

echo ``$texto''; } imprime();

A chamada a função imprime() não produzirá nada na saída, pois a variável $texto é de escopo global, e não pode ser referida num escopo local, mesmo que não haja outra com nome igual que cubra a sua visibilidade. Para alcançar o objetivo do script acima, a variável global deve ser declarada. Por exemplo:

$texto = ``III Sinec'';

function imprime() { global $texto; echo ``$texto''; } imprime();

Uma outra maneira de acessar variáveis de escopo global dentro de uma função é utilizando um array pré-denido pelo PHP cujo nome é $GLOBALS. O índice para a variável referida é o próprio nome da variável, sem o caracter $. O exemplo abaixo produz um resultado semelhante ao anterior.

$texto = ``III Sinec'';

function imprime() { echo ``$GLOBALS[texto]''; } imprime();

9.4 Variáveis enviadas pelo navegador

Uma das maneiras do navegador enviar dados para o interpretador PHP é através da URL. Por exem- plo: se o script está localizado em http://localhost/teste.php pode-se chamá-lo com a url  `http://localhost/teste.ph Neste caso o PHP criará automaticamente uma variável com o nome $texto contendo a string IIISinec. Este formato é conhecido como urlencode. Os formulários HTML já enviam informações automatica- mente nesse formato, e o PHP trata esses dados como variáveis comuns, sem precisar de um tratamento especial por parte do programador. O formato urlencode é obtido substituindo os espaços pelo caracter + e todos os outros caracteres não alfa-numéricos (com exeção de _) pelo caracter % seguido do código ASCII em hexadecimal.

9.5 Utilizando arrays

Cada elemento de um formulário HTML submetido a um script cria no ambiente do mesmo uma variável cujo nome é o mesmo nome do elemento. Por exemplo

O código acima fará com que seja criada uma variável com o nome $email no script ao qual esse código foi submetido. Uma boa técnica de programação é utilizar a notação de arrays para itens de um formulário HTML. Para um conjunto de checkboxes, por exemplo, pode-se utilizar a seguinte notação:

Opção 1 Opção 2 Opção 3

Ao submeter o formulário, o script que recebe os valores criará uma variável chama $teste contendo os valores num array, com índices a partir do zero.

9.6 Variaváveis de ambiente

O PHP possui diversas variáveis de ambiente, como a $PHP_SELF, por exemplo, que contém o nome e o path do próprio arquivo. Algumas outras contém informações sobre o navegador do usuário, o servidor http, a versão do PHP e diversas outras informações. Para ver a listagem completa dessas variáveis e seus respectivos conteúdos, deve-se utilizar a função phpinfo().

9.7 Vericando se uma variável possui um valor

Existem duas funções que podem ser usadas para saber se a variável está setada. São elas a função isset e a função empty. A função isset possui o seguinte protótipo:

int isset(mixed var);

Ela retorna true se a variável estiver setada (mesmo com uma string vazia ou o valor zero), e false caso contrário. A função empty possui o seguinte protótipo:

int empty(mixed var);

Ela retorna true se a variável não contiver um valor ou possuir valor zero ou uma string vazia. Caso contrário, retorna false.

9.8 Constantes pré-denidas

Assim como as variáveis de ambiente, o PHP possui algumas constantes pré-denidas, contendo a versão do PHP, o sistema operacional do servidor, etc. Para uma listagem completa dessas constantes pode-se usar a função phpinfo().

9.9 Denindo constantes

A função define é usada para denir o valor de uma constante, que uma vez setada, não poderá mais ser alterado. Uma constante pode apenas conter um valor escalar, não podendo guardar arrays ou objetos. A assinatura da função define é a seguinte:

int define(string nome_da_constante, mixed valor);

A função retorna true se for bem sucedida. Por exemplo:

define (``pi'', 3.1415926536); $circunf = 2pi$raio;

$HTTP_COOKIE_VARS[teste];

ou

$teste;

11 A História do PostgreSQL

Tudo começou com o desenvolvimento do Ingres, ancestral do PostgreSQL, na Universidade da Cali- fórnia de Berkeley, entre os anos de 1977 a 1985. Após isso, o código do Ingres foi aumentado pela Ingres Corporation, o qual produziu um dos principais servidores de banco de dados relacionais que tiveram sucesso comercialmente. Também em Berkeley, Michael Stonebraker liderou uma equipe que desenvolveu um servidor de banco de dados relacional chamado Postgres, entre os anos de 1986 a 1994. A Illustra( comprada depois pela Informix ) herdou o código Postgres e desenvolveu-o em um produto comercial. Dois estudantes de graduação, Jolly Chen e Andrew Yu, adicionaram mais outras características, de forma que interpretasse SQL no Postgres. O projeto resultante foi chamado Postgres95, desenvolvido no período de 1994 a 1995. Após a saída dos desenvolvedores de Berkeley, o projeto continuou com a inclusão de novos desenvolvedores até o lançamento de uma nova versão, no nal de 1996 com o nome de PostgreSQL.

13 Stored Procedures

Uma stored procedure é, em suma, um programa com comandos SQL, que é armazenado em um banco de dados PostgreSQL. A stored procedure é composta por comandos SQL, variáveis e comandos de uxo lógico.

14 Trigger

São blocos de comandos em SQL que são automaticamente executados quando um comando INSERT, DELETE ou UPDATE é executado em uma tabela. A principal aplicação de um trigger é a criação de consistências e restrições de acesso ao banco de dados, como por exemplo, rotinas de segurança. Em vez de deixar o controle da aplicação para a própria tabela, por meio de triggers o banco passa a executar esses controles, tornando muito mais seguro o manuseio do banco de dados.

14.1 Aplicações

  • Criar o conteúdo de uma coluna derivada de outras colunas;
  • Criar mecanismos de validação que envolvam pesquisas em múltiplas tabelas;
  • Criar logs para registrar a utilização de uma tabela;
  • Atualizar outras tabelas em função da inclusão ou alteração da tabela atual;

15 Alguns comandos no banco de dados

15.1 Começando uma sessão de banco de dados

PostgreSQL usa um modelo de cliente/servidor de comunicação. Um servidor PostgreSQL sempre ca rodando, esperando conexões. O servidor processa a requisição e retorna a saída ao cliente.

15.2 Escolhendo qual interface

PostgreSQL possui várias interfaces de comunicação com o servidor. A que será usada no curso será o PSQL, por ser a mais utilizada e por ter a maior documentação.

15.3 Começando uma sessão

Para iniciar uma sessão PSQL, devemos digitar PSQL no prompt de comando. Ao iniciar um menu em modo texto aparecerá, indicando alguns comandos básicos.

  • \ h > help para comandos SQL;
  • \ q > para sair;
  • \ g > terminar uma query, equivalente;
  • ? > mostra todos os comandos do prompt PSQL;
  • \ p > mostra o buer;
  • \ r > reseta o buer;

data(06/11/2001), 'A morte da bezerra', '', '', data(07/11/2001));

Para usar strings, é necessário usar aspas simples. Aspas duplas não funcionam. Espaçamento e capitalização são opcionais, exceto dentro de aspas simples, onde o texto é considerado literalmente. Para colunas numéricas, não é necessário o uso de aspas simples.

16.3 Visualizando dados com Select

Para reaver dados no banco de dados, o comando utilizado é o SELECT. O comando a seguir mostra todos os campos e todos os registro da tabela noticia.

SELECT * FROM noticia;

O comando SELECT seleciona registro do banco de dados. O asterisco é usado para indicar que na consulta é pedido todas as colunas da tabela. O FROM noticia, indica que a tabela que queremos consultar é a tabela noticia.

O SELECT tem um grande número de variações. Por exemplo, se quisésemos apenas o campo cha- mada da tabela noticia, o comando utilizado seria o seguinte SELECT chamada FROM noticia; , onde o asterisco foi substiuído apenas pelo campo requerido. Se mais de um for necessário, deve-se usar vírgulas para separar os mesmos.

16.4 Selecionando linhas especícas com a cláusula Where

Na seção 16.3 na página 32, ao utilizarmos o comando SELECT, temos todos os registros como resposta. Mas, de fato, dependendo da situação, existem casos em que queremos apenas um registro ou um conjunto de registros que sejam retornados e não todos os registros da tabela. Nesse caso, devemos usar a cláusula WHERE. Ela deve vir logo após ao nome da tabela, e após o WHERE deve-se colocar um ltro de pesquisa.

SELECT * FROM noticia WHERE id>65;

O comando produz uma saída onde todos os registros possuem um id maior que 65.

16.5 Removendo dados com Delete

Depois de aprender como incluir dados no banco, é necessário saber como se deleta a informação. A remoção é bem simples, como todos os outros comandos já mostrados. O comando DELETE pode rapidamente apagar um, mais de um ou todos os registros. Vale lembrar que o comando DELETE é usado para apagar registro e não tabelas. Abaixo teremos alguns exemplos.

DELETE FROM noticia WHERE id=32;

Esse comando deleta o registro da tabela notícia que contenha em seu id o número 32;

DELETE FROM noticia;

Esse comando apaga todos os registros da tabela noticia.

16.6 Modicando dados com Update

Para modicar dados, o comando utilizado é UPDATE. Ele segue um formato semelhante a outros comandos utilizados em SQL. Como acima daremos dois exemplos um pouco distintos.

UPDATE noticia set chamada='O diário de Fabita' WHERE id=24;

Esse comando atualiza o campo chamada para 'O diário de Fabita' onde o id do registro for igual a

  1. Se for necessário atualizar mais de um campo, eles devem ser separados por vírgulas.

UPDATE noticia set link='/sinec/index.html'

Já essa instrução, atualiza o link de todos os registros para '/sinec/index.html'. Deve-se tomar cuidado com esse comando para, por um descuído de esquecer de colocar a cláusula WHERE, atualizar todos os registros quando se queria atualizar apenas parte deles.

16.7 Ordenando dados com Sort by

Em uma consulta SQL, registros são dipostos de uma forma indeterminada. Para garantir que os registros serão retornados de uma consulta SELECT em uma ordem especíca, é necessário que se use a cláusula ORDER BY no nal do comando SELECT.

Se quiser, pode-se usar após o ORDER BY condição, o argumento DESC que inverte a ordem de co- mo foi disposta a saída.

SELECT id,noticia,chamada FROM noticia WHERE id>2 ORDER BY noticia;

Esse comando seleciona os campos id, noticia e chamada, para os registros que tiverem o id maior que 2 ordernando pelo campo noticia. Como o campo noticia é string, a ordenação é feita por ordem alfabética.

SELECT * FROM noticia where foto like 'j%' ORDER BY chamada DESC;

Esse comando seleciona todos os campos da tabela noticia, reavendo apenas os registros que tenham foto comecando com j, ordenando a saída pelo campo chamada por ordem alfabética inversa.

16.8 Destruindo tabelas

Para completar esta parte de noções de SQL, devemos mostrar como apagar tabelas em si, não só os registros localizados nela. Esta tarefa é realizada com o comando DROP TABLE. Por exemplo o comando DROP TABLE noticia apagaria toda a tabela noticia. Convém dizer que toda a estrutura e os dados existentes na tabela serão apagados.

17.1.2 Tipo Monetário

17.2 Tipos caracter

Além dos tipos padrões suportados pelo SQL: caracter e caracter varying. Postgres também reconhece o tipo text.

Nome do Tipo Armazenamento Compatibilidade Descrição character(n),char(n) (4+n) bytes SQL Tamanho xo character varying(n),varchar(n) (4+n) bytes SQL Tamanho variável com limite text (4+n) bytes Mais exível tamanho variável e ilimitado Tabela 10: Tipos Caracter

17.3 Tipo data/hora

Postgres suporta todos os seguintes tipos de datas e horas do SQL.

  • timestamp: Data e hora
  • timestamp with timezone : Data e hora com fuso horário
  • interval: Intervalos de tempo
  • date: Apenas datas
  • time: Apenas horas
  • time with time zone : Apenas horas

Tipo Armazenamento Início Fim Resolução timestamp 8 bytes 4713 AC 1465001 DC 1 microsegundo/ 14 dígitos timestamp com fuso horário 8 bytes 1903 DC 2037 DC 1 microsegundo/ 14 dígitos interval 12 bytes -178000000 anos 178000000 anos 1 microsegundo date 4 bytes 4713 DC 32767 DC 1 dia time 4 bytes 00:00:00.00 23:59:59.99 1 microsegundo time with time zone 4 bytes 00:00:00.00+12 23:59:59.99-12 1 microsegundo Tabela 11: Tipos de Data/hora

Em versões anteriores eram usadas os tipos datetime e timespan, que são euivalentes à timestamp e interval, respectivamente. Atualmentesses tipos não são mais usados.

17.3.1 Entrada de Data/hora

As maiorias das entradas de data/hora conhecidos são aceitos no Postgres. O comando SET DateStyle to 'US' ou SET DateStyle to 'NonEuropean' especica o estilo da data como mês dia ano e o comando SET DateStyle to 'European' especica o estilo da data para dia mês ano. Nota:A entrada de data e/ou hora precisa ser feita com estas entre aspas simples. como o seguinte:

type 'value'

17.3.2 Hora sem Fuso Horário

Esse tipo pode ser chamado como time ou time without timezone. A tabela 17.3.2 mostra as entradas válidas para o time.

17.3.3 Hora com Fuso Horário

Este tipo foi denido pelo SQL92, mas sua denição contem algumas deciências que diculta o uso deste tipo como padrão. Na tabela 16 é mostrada todas as entradas válidas. Note que este tipo aceita todos as entradas do tipo time com o acréscimo de um fuso horário válido.

17.3.4 interval

O tipo interval pode ser especicado usando a seguinte syntax.

Exemplo Descrição 1/8/2001 Estilo americano; 1 de agosto 8/1/2001 Estilo europeu; 1 de agosto Tabela 12: Entrada de datas

Mês Abreviação Abril Apr Agosto Aug Dezembro Dec Fevereiro Feb Janeiro Jan Julho Jul Junho Jun Março Mar Novembro Nov Outubro Oct Setembro Sep, Sept Tabela 13: Abreviação dos meses

Dia Abreviação Domingo Sun Segunda Mon Terça Tue, Tues Quarta Wed, Weds Quinta Thu, Thur, Thurs Sexta Fri Sábado Sat Tabela 14: Abreviação dos dias da semana

Exemplo Descrição 04:05:06.789 ISO- 04:05:06 ISO- 04:05 ISO- 040506 ISO- 04:05 AM O mesmo que 04: 04:05 PM O mesmo que 16:05; entrada de horas devem ser menores que 12 z o mesmo que 00:00: zulu o mesmo que 00:00: allballs o mesmo que 00:00: Tabela 15: Entrada de horas sem fuso horário

17.4 Tipo Booleano

O Postgres oferece suporte para o tipo boolean. O tipo boolean pode assumir um dos dois valores válidos: true (verdadeiro) ou false (falso). Valores válidos para o estado verdadeiro:

  • TRUE
  • 't'
  • 'y'
  • 'yes'
  • '1'

E para o estado falso:

  • FALSE
  • 'f'
  • 'n'
  • 'no'
  • '0'

18 Alguns comandos adicionais em SQL

Nesta seção, mostraremos alguns recursos adicionais existente na linguagem SQL, e além disso, algumas características existentes apenas no PostgreSQL.

18.1 Aspas dentro de um texto

Quando temos que utilizar aspas dentro de um texto, como por exemplo, na inserção de um campo do tipo char, onde o dado é 'Leca's', a inserção não funcionaria. A presença de uma aspa simples dentro de uma string cercada por aspas simples, geraria um parser error. O método correto para incluir esse tipo de dado seria o uso de duas aspas simples juntas como em 'Lecas''s'. Outro método possível seria o uso da contrabarra para incluir esse dado 'Leca's'. O uso da contrabarra ignora o sentido da aspa simples.

18.2 Usando valores nulos

Suponha que se queira incluir uma notícia mas que ela não contenha um link. A pergunta que ca é qual o valor assinalado ao campo link? A reposta é que o campo link possui um valor nulo. NULL é um valor especial que é valido em qualquer coluna. Usa-se quando uma entrada válida para um campo não é conhecida ou não é aplicável.

Os testes IS NULL e IS NOT NULL foram desenvolvidos especicamente para testar a existência de va- lores NULL. Abaixo, colocaremos um exemplo que ilustra bem a confusão que pode existir com o uso de valores NULL.

INSERT INTO noticia (noticia,datains,chamada,link,foto,datapub) values ( 'Felipe viajou para o Marrocos e acabou comprando um Dromedário', '08/11/2001', 'O dromedário de Felipe', NULL, NULL, '10/11/2001' );

Neste exemplo, tanto o campo LINK como o campo FOTO possuem um valor nulo. Podia-se pensar que fazendo uma consulta do tipo:

SELECT * FROM noticia WHERE link=noticia;

teríamos como resposta a inclusão feita no exemplo anterior. O fato é que o retorno de query é igual a zero registros. O campo que contém NULL, signica desconhecido, desse modo não temos como saber se dois valores NULL são iguais. PostgreSQL não adivinha ou imprime o resultado. Convém dizer que  e NULL são diferentes.