PHP • PHP e a WWW • Funcionamento do PHP • PHP com Apache e MySQL • XAMPP PHP e a WWW Páginas estáticas / Páginas dinâmicas O PHP permite a criação de páginas dinâmicas. Informação dinâmica O que fazer quando a informação que está no website muda constantemente, como por exemplo as cotações da bolsa? Neste caso, os documentos estáticos em HTML não são a melhor solução. É necessário criar HTML dinâmico para que no momento em que o cliente contacta o servidor lhe seja enviada a informação actualizada. PHP É uma linguagem de programação vocacionada para o desenvolvimento de aplicações orientadas para a www. Existem 2 tipos de linguagens web: - Baseadas no cliente (browser) (JavaScript, ActiveX, Java Applets, etc…) - Baseadas no servidor. (PHP, ASP, etc…) PHP O código PHP é embebido no código HTML dando origem a um script contendo instruções específicas. O servidor lê o código PHP e interpreta os comandos. Exemplo 1 <?php /*php_1.php */?> <html> <head> <title> Resultado </title> </head> <body> <?php $X=5; $Y=3; $Z=$X+$Y; echo “Total ”; echo “= $Z”; ?> </body> </html> Formulários HTML Botões Radio buttons Seleccion lists Input boxes Checkbox Etc… Formulários HTML method - Especifica o modo como a informação é transmitida. Pode ser GET ou POST. action - Indica o nome e a localização do script PHP que irá processar a informação que foi introduzida no formulário. Métodos de transmissão O protocolo HTTP (HiperText Transfer Protocol) utiliza vários métodos de manipulação e organização dos dados. Actualmente, os dois métodos mais utilizados para submeter dados de formulários são o GET e o POST. Ambos os métodos transferem dados do browser para o servidor, a maior diferença entre eles é a maneira como essa informação é transmitida. GET O browser acrescenta ao URL, especificado no atributo ACTION, um "?" e os valores codificados; Os dados não são encriptados, logo informações que exigem segurança não devem ser manipuladas por este método; Suporta apenas até 128 caracteres, logo é útil para valores pequenos. POST Os dados introduzidos num formulário fazem parte do corpo da mensagem enviada para o servidor; Pode encriptar os dados; É possível transferir uma grande quantidade de dados. Este é o método aconselhado. Exemplo 2 Situação em que são usados dois ficheiros: form.html - É o local onde o utilizador fará os “inputs”. php_2.php - Contém os comandos PHP que irão processar os dados inseridos no formulário. Exemplo 2 <html> <head> <title> formulário PHP </title> </head> <body> <form enctype="multipart/form-data" method="POST" action="php_2.php"> <p> Nome <input type="text" name="nome" size=30> </p> <p> Idade <input type="text" name="idade" size=2> </p> <p> Qual o carro que mais gostas? <select name="marca"> <option> Ferrari </option> <option> Mercedes </option> <option> BMW </option> </select> </p> <p> <input type="submit" value="OK"> </p> </form> </body> </html> Exemplo 2 <?php /*php_2.php*/ ?> Nota: Atenção à junção de <html> texto com variáveis numa <head> instrução de escrita <title> Resultado </title> </head> <body> <?php echo "O meu nome é ".$_POST['nome']. " ,tenho " .$_POST['idade']. " anos e gosto de carros da marca " .$_POST['marca']; ?> </body> </html> O que é preciso? Um cliente (browser) Um servidor Web (ex.: Apache) Um servidor de bases de dados (ex.: MySQL) Uma ferramenta que permita ligar tudo isto (ex.: PHP) 1 3 PHP 4 2 Cliente BD Servidor web 1 - O cliente solicita a página ao servidor web. Este, verificando que existe um script PHP, chama o módulo PHP para efectuar o processamento. 2 - Se no script existirem comandos que abrem uma ligação a uma base de dados, o PHP trata de efectuar essa ligação. 3 - Os dados pretendidos são então extraidos da base de dados, sendo enviados pelo PHP ao servidor web em formato HTML. 4 - O servidor web envia os dados ao cliente, sendo estes visualizados numa página HTML devidamente formatada. Porque utilizar o Apache? É o líder do mercado; É o mais seguro; Não tem concorrentes quanto à riqueza de recursos, estabilidade, performance, ... Porque utilizar o MySQL? Baixa exigência de recursos de hardware; Simplicidade de administração; É o mais veloz do mercado; Foi optimizado para as aplicações típicas da Web, onde ocorrem mais consultas do que actualizações. Porque usar PHP, Apache e MySQL? Porque fornecem tudo o que necessitamos para construir aplicações e web sites sofisticados, e de maneira mais simples do que outras alternativas. Principalmente porque são software livre! Tenho que utilizar os três em conjunto? Não, esta é apenas uma combinação popular na Internet. Outras alternativas seriam: Apache com Perl, Python, ASP, Java, ... PHP com IIS, PWS, Xitami, ... PHP com PostgreSQL, Interbase, Oracle, DB2 ... MySQL com Perl, Phyton, ASP, Java, ... Software Xampp -O XAMPPé um servidor Web multiplataforma constituído por um servidor HTTP Apache. X- Sistema operativo (atualmente suportado por windows, Linux, SunSolaris e MacOs. A-Apache M-MySQL P-PHP P-PERL wamp - Windows, Apache, MySQL e PHP lamp - Linux, Apache, MySQL e PHP PHP • Tipos de dados • Variáveis e constantes • Operadores • Estruturas de controlo Operadores, tipos de dados e alguns caracteres especiais Operadores Aritméticos Operadores lógicos + - * / % += -= *= /= %= ++ -- ! NOT && AND || OR Tipos de dados Booleanos Inteiros, Strings, Array, Object Números reais (floating point) Operadores relacionais == != < <= > >= === !== === (igualdade restrita) Alguns caracteres especiais \n Muda de linha \t Tabulação horizontal \r Volta início da linha PHP PHP Variáveis $var=1234; //inteiro $var=-1234; //inteiro $var= 1.234 //real $var= 1.2e3 $var=5; $var2= “O valor da variável é $var”; Em PHP o tipo de dados das variáveis não é definido pelo programador. PHP Arrays 0 1 2 3 4 5 6 7 $arr= array(5,20,32,400,500,62,47,58); echo $arr[1]; // resulta em 20 Array multidimensional: $arr=array(1,2, array(“Carlos”, array(7,9) ) , “xa”); echo $arr[0]; //resulta em 1 echo $arr[2][0]; // resulta em Carlos echo $arr[2][1][1]; // resulta em 9 PHP Estruturas de controlo if(condição) <bloco de instruções> [else <bloco de instruções>] while (condição) <bloco de instruções>; switch (selector) { case valor1: <bloco> break; case valor2: <bloco> break; … [default: <bloco>; ] } do <bloco de instruções> while (condição); for (inicialização; condição; incremento) <bloco de instruções>; PHP Exemplo <table border=”1”> <?php for($i=1; $i<6; $i++) { echo '<tr>'; $q=$i*$i*$i; echo "<td> $i </td>"; echo "<td> $q </td>"; echo '</tr>'; } ?> </table> i3 PHP • SQL / MySQL • Ligação a base de dados • Selecção e visualização de registos • Adicionar, Eliminar, Pesquisar e Editar registos Acesso a bases de dados com PHP 1.º - Captar os dados 2.º - Estabelecer a ligação 3.º - Aplicar um comando SQL 4.º - Preparar os dados obtidos Principais funções com suporte ao MySQL improved mysqli_connect - Estabelece uma ligação ao servidor ex.: $ligax = mysqli_connect('localhost', 'root', ‘password'); mysqli_select_db - Selecciona uma base de dados ex.: mysqli_select_db($ligax, 'vendas'); mysqli_query - Interroga uma base de dados ex.: mysqli_query($ligax, $insere); mysqli_num_rows - Devolve n.º de registos resultantes de uma consulta. ex.: $nregistos = mysqli_num_rows($result); mysqli_fetch_assoc - Guarda num array o resultado de uma consulta. ex.: for ($i=0; $i <$nregistos; $i++) { $registo = mysqli_fetch_assoc($result); echo '<tr> <td>' .$registo['CodCli']. '</td>'; echo '<td>' .$registo['Nome']. '</td>'; echo '<td>' .$registo['Morada']. '<td> </tr>'; } Exemplo Servidor BD vendas Browser PHP Clientes Encomendas Fornecedores Artigos Ficheiro ligacao.php $host = 'localhost'; $user = 'root'; $pwd = ''; $db = ‘dados'; $ligax=mysqli_connect($host, $user, $pwd) or die ('Não conseguiu fazer a conexão ao servidor'); mysqli_select_db($ligax,$db); <?php include (‘ligacao.php’);?> Listar dados de uma BD LISTAR <html> <head> <title> Listar Clientes </title> </head> <body> <h2> Lista de clientes: </h2> <br> <?php $ligax = mysqli_connect('localhost', 'root', ''); if (!$ligax) {echo '<p> Falha na ligação.';} mysqli_select_db($ligax, 'vendas'); $consulta = "Select * From Clientes"; $result = mysqli_query($ligax, $consulta); $nregistos = mysqli_num_rows($result); echo "Nº de registos encontrados: $nregistos "; ?> <br> <table border="1"> <tr><td> Codigo: <td> Nome: <td> Morada: </tr> <?php for ($i=0; $i <$nregistos; $i++) { $registo = mysqli_fetch_assoc($result); echo '<tr>'; echo '<td>'.$registo['CodCli'].'</td>'; echo '<td>'.$registo['Nome'].'</td>'; echo '<td>'.$registo['Morada'].'<td>'; echo '</tr>'; echo '</p>'; } ?> </table> <br> <a href="index.htm">Voltar à entrada</a> </body> </html> Pesquisar dados numa BD PESQUISAR Código php para pesquisar dados da tabela <html> <head> <title>Mostrar</title> </head> <body> <h3>Mostrar cliente procurado</h3> <?php /*pesquisa.php*/ $nomeproc = $_POST['nome']; if (!$nomeproc) {echo "Volte atrás e escreva o nome.";} echo "<p>Nome procurado: $nomeproc. </p>"; $ligax = mysqli_connect('localhost', 'root',''); if (!$ligax){echo "<p> Falha na ligação."; exit; } mysqli_select_db($ligax, 'vendas'); $procura = "Select * from clientes where nome like ‘ %".$nomeproc."% ‘ "; $result = mysqli_query($ligax, $procura); $nregistos = mysqli_num_rows($result); echo "Nº de registos encontrados: $nregistos"; ?> <table border="1"> <tr><td> Codigo: <td> Nome: <td> Morada: </tr> <?php for ($i=0; $i <$nregistos; $i++) { $registo = mysqli_fetch_assoc($result); echo '<tr> <td>' .$registo['CodCli']. '</td>'; echo '<td>' .$registo['Nome']. '</td>'; echo '<td>' .$registo['Morada']. '<td> </tr>'; } ?> </table> <p> <a href="listar.php"> Listar registos </a> </body></html> Adicionar dados a uma BD ADICIONAR <html> <head> <title> Inserir </title> </head> <body> <h2> Novo cliente </h2> <?php /*inserir.php*/ $cod = $_POST['codcli']; $nome = $_POST['nome']; $morada = $_POST['morada']; echo 'Dados recebidos: <br />'; echo 'Código: '.$cod.'<br />'; echo 'Nome: '.$nome.'<br />'; echo 'Morada: '.$morada.'<br />'; $ligax = mysqli_connect('localhost', 'root', ''); if (!$ligax) {echo '<p> Erro: Falha na ligação.'; exit;} mysqli_select_db($ligax, 'vendas'); $insere = “ INSERT INTO clientes ( CodCli, Nome, Morada ) VALUES (‘ ".$cod.“ ‘ , ‘ ".$nome.“ ‘ , ‘ ".$morada.“ ‘ )"; $result = mysqli_query($ligax, $insere); if ($result==1) echo "<p>Dados inseridos<br>"; else "<p>Dados não inseridos<br>"; ?> <p> <a href="index.htm">Voltar à entrada</a> <p> <a href="listar.php">Listar clientes</a> </body> </html> Eliminar dados numa BD ELIMINAR <html> <head> <title> Remover </title> </head> <body> <h2> Remover cliente </h2> <?php $codrem = $_POST['codcli']; if (!$codrem) {echo 'Volte atrás e escreva o código do cliente a remover.'; } echo "Cliente a remover: $codrem. <p>"; $ligax = mysqli_connect('localhost', 'root',''); if (!$ligax){echo "<p> Falha na ligação."; exit; } mysqli_select_db($ligax, 'vendas'); $consulta = "Select * From Clientes"; $result = mysqli_query($ligax, $consulta); $nr_antes = mysqli_num_rows($result); $remove = "delete from clientes where codcli =‘ ".$codrem." ' "; $result = mysqli_query($ligax, $remove); if ($result==0) echo "<p>Não removido<br>"; $consulta = "Select * From Clientes"; $result = mysqli_query($ligax, $consulta); $nr_depois = mysqli_num_rows($result); $nr_removidos = $nr_antes - $nr_depois; echo 'Nº de registos removidos: '.$nr_removidos; ?> <p> <a href="listar.php"> Listar registos </a> </body> </html> Exemplos de validações em PHP if ($pass!=$conf_pass || $pass=="") { $flag=true; $flag_pass=true; } if (!preg_match ("/^[0-9]{4}[\-][0-9]{3}$/",$cod_postal)) { $flag=true;$flag_cod_postal=true; } if (!preg_match ("/^[0-9]{4}$/",$ano_nasc)) { $flag=true;$flag_ano_nasc=true; } if (!preg_match ("/^[0-9]{9,12}$/",$telefone)) { $flag=true;$flag_telefone=true; }