Escolar Documentos
Profissional Documentos
Cultura Documentos
Referências
– L. Shklar, R. Rosen (capítulo 9)
– www.w3schools.com/php/
– php.net
request
Browser Web-Server
response
(cliente) (servidor)
Frontend Backend
© 2023- Docentes SI – DI/FCUL 3
Abordagens de desenvolvimento web (1)
• Híbridas
– Abordagens que incluem construtores de formatação embebidos em blocos
de scripts
Ex. PHP, Microsoft ASP (Active Server Pages), Java Server Pages (JSP)
– Potencialmente confusas para designers
– Mistura a apresentação do conteúdo da aplicação
– É fundamental de separação da lógica aplicacional da apresentação
– Minimiza problemas com os designers e programadores
• Frameworks
– Separam os módulos responsáveis pelo conteúdo (model) dos que
apresentam o conteúdo num formato (view)
ex. Express, Django, Laravel, Codeigniter, Ruby, Spring
– Potencialmente mais fléxiveis e escaláveis
– Baseadas geralmente no padrão Modelo-Vista-Controlador (MVC)
• Linguagens embedded
– O código é embebido nos documentos Web …
– … e executado no servidor
Desvantagens
– Código embebido no HTML pode ser MUITO confuso de manter
– Debugging pode ser(é) infernal
<html>
<head> O servidor deteta o
<title>Teste do PHP</title>
<?php e executa o script:
</head>
<body>
<p>Alo Mundo!</p> </body> echo '<p>Alo Mundo!</p>'
</html>
$arrlength = count($cores);
for($x = 0; $x < $arrlength; $x++) {
echo $cores[$x];
echo "<br>";
}
© 2023- Docentes SI – DI/FCUL 13
Elementos da linguagem (3)
Ficheiro pagina.html
<html> <body>
<form method="post" action="pdata.php">
Nome: <input type="text" name="nome"><br>
idade: <input type="text" name="idade"><br>
<input type="submit">
</form>
</body> </html>
Ficheiro pdata.php
OBS: http://www.mysite.org/pdata.php?nome=Jim&idade=27
© 2023- Docentes SI – DI/FCUL 16
Validação da informação
<html> <body>
<form action="pdata.php" method=“post">
Nome: <input type="text" name="nome"><br>
idade: <input type="text" name="idade"><br>
<input type="submit">
</form>
</body> </html>
• A validação dos dados do formulário pode ser realizada no browser com javascript
• MAS é fundamental proteger o script (pdata.php) de código malicioso
• Ex: pode ser enviado código do tipo:
<script> alert('hacked')</script>
• Prevenção
converter caractéres especiais < > em entidades HTML
usar a função htmlspecialchars() sempre que se pretende enviar para o browser qualquer
informação que vem do input do utilizador
<html> <body>
<form action="pedido_post.php" method="post">
Coloque uma string html:
<input type="text" name="nome" value=" ola<em> \pa\\</em> tu"><br>
<input type="submit">
</form>
</body> </html>
pedido_post.php
<?php
echo "<li>Normal:<br>" . $_POST["nome"];
echo "<li>htmlspecialchars() =<br>" . htmlspecialchars($_POST["nome"]);
echo "</ul></body></html>";
?>
• A função mysql_real_escape_string()
– Ajuda a escapar caracteres especiais usados em comandos SQL, como
aspas simples, aspas duplas, entre outros
– Ela ajuda a proteger contra ataques de injeção de SQL, evitando que
caracteres especiais sejam interpretados como parte da consulta SQL
– Utilização com a preparação de comandos (mais adiante)
© 2023- Docentes SI – DI/FCUL 20
Processamento de ficheiros
• PHP contém a maior parte das funções de leitura e escrita de
ficheiros habituais
– fopen(), fread(), fclose(), …
• Duas aproximações
– MySQLi
– PDO (PHP Data Objects)
• Vantagens e desvantagens
– MySQLi suporta apenas MySQL
– PDO suporta 12 SGBDs
– As duas são OO, mas MySQLi oferece uma API procedimental
– As duas suportam Prepared Statements
mecanismo importante na segurança de uma aplicação Web
proteção contra SQL injection
<?php
$dbhost = "appserver-01.alunos.di.fc.ul.pt";
$dbuser = "asw99";
$dbpass = "asw99";
$dbname = "asw99";
// Cria a ligação à BD
$conn = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);
include "abreconexao.php";
$query = "INSERT INTO aluno (nome, idade) VALUES ('Ana',25)";
if($res) {
echo "Novo aluno criado com sucesso";
} else {
echo "Erro: " . $query . "<br>" . mysqli_error($conn);
}
// Termina a ligação com a base de dados
mysqli_close($conn);
?>
// Parâmetros
$nome = "Hermione";
$idade = 20;
mysqli_stmt_execute($stmt);
...
?>
if (mysqli_num_rows($result) > 0) {
// output data of each row
while($row = mysqli_fetch_assoc($result)) {