PHP e MySQL

 
 
Parte V - PHP 5.3 com Banco de dados MySQL 5.1
Seção Alunos
 

Introdução

Sobre as tabelas do banco de dados "alunosdb", criadas na parte IV deste trabalho, serão realizadas operações com a utilização de programas elaborados com a finalidade de realizar a necessária manutenção da base de dados e de facilitar o gerenciamento das informações. Formulários HTML e programas PHP são criados para efetuar o processamento dos dados requeridos pelo usuário.

Para um aprendizado efetivo e obter o máximo de aproveitamento, recomenda-se fazer todos os exercícios contidos neste projeto. Obedecendo a sequência de apresentação e após o estudo de cada programa, copie as instruções desse programa, cole no Bloco de notas, por exemplo, e grave o script com o nome especificado na pasta WWW ou alias subordinada à pasta EasyPHP. Execute cada programa para estudar seu comportamento operacional e avaliar seu funcionamento. Para executar o primeiro programa index.html, clique com o botão direito do mouse no ícone do EasyPHP que está na barra de ferramentas junto ao relógio e, no menu de contexto, clique em Localhost. Com isso, o sistema carrega e executa o programa index.html através de seu browser padrão. Caso o ícone do EasyPHP não esteja na bandeja da barra de ferramenta, execute o programa EasyPHP para carregá-lo.

 

Criação de um menu

A página inicial do projeto Controle de alunos fornece meios para acessar operações de manutenção e de visualização dos dados das tabelas. A seguir é mostrada a página inicial do sistema denominada Menu de administração:

O Menu de administração está subdividido em quatro seções ou submenus correspondendo ao número de tabelas exitentes no banco de dados, cada qual apresenta dois paineis separados por uma linha divisória.

Controle de alunos

Organização do site do projeto "Controle de alunos" sob o ponto de vista da estrutura hierárquica dos programas:

Programa: index.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Menu de administração</title>
<link rel="stylesheet" href="alunos.css" type="text/css" />
</head>
<script language="JavaScript">
function validar(form1) {
if(!document.form1.aluno.value){
alert("Informe o id do aluno")
document.form1.aluno.focus()
return false
}
achou=false
for(i=0;i<=2;i++){
if(document.form1.oper[i].checked){
achou=true
break
}
}
if (achou)
return true
else{
alert("Informe a operação: Cons., Exc. ou Alt.!" +
"\n(Consulta, Exclusão ou Alteração)")
return false
}
}
function validar2(form2) {
if(!document.form2.aluno2.value){
alert("Informe o id do aluno")
document.form2.aluno2.focus()
return false
}
achou=false
for(i=0;i<=1;i++){
if(document.form2.oper2[i].checked){
achou=true
break
}
}
if(!achou){
alert("Informe a operação: Alteração e inclusão\nou Exclusão!")
return false
}
}
function validar3(form3) {
achou=false
for(i=0;i<=1;i++){
if(document.form3.oper3[i].checked){
achou=true
break
}
}
if(!achou){
alert("Informe a operação: Inclusão ou Exclusão!")
return false
}
}
function validar4(form4) {
achou=false
for(i=0;i<=1;i++){
if(document.form4.oper4[i].checked){
achou=true
break
}
}
if(!achou){
alert("Informe a operação: Inclusão ou Exclusão!")
return false
}
}
</script>
<body bgcolor="#eeeeff">
<div id=area_geral>
<table width="750" border="0" bgcolor="#000033"
cellspacing="0" cellpadding="0">
<tr><td>&nbsp;</td></tr>
<tr>
<td><font size="4" color="#FFFFFF"><strong>&nbsp;&nbsp;
Controle de Alunos </strong></font></td>
</tr>
<tr><td>&nbsp;</td></tr>
</table>
<table width="750" border="0" bgcolor="#6699FF"
cellpadding="0" cellspacing="0">
<tr><td>&nbsp;</td></tr> <tr><td>&nbsp;</td></tr>
<tr>
<td width="70">&nbsp;</td>
<td width="700" height="255" valign="top">
<table width="100%" border="0" bgcolor="#DADDFE"
cellpadding="0" cellspacing="0" rules="cols">
<tr><td colspan="4" align="center">
<h3>Menu de administração</h3></td></tr>
<!-- --------------------- Submenu alunos ----------------------------- -->
<td width="22%" height="253" valign="top">
<table width="100%" border="0" bgcolor="#DADDFE"
cellpadding="0" cellspacing="0">
<tr><td align="center"><h3>Alunos</h3></td></tr>
<form name="form1" method="post" action="admin_aluno.php"
onsubmit="return validar(this);">
<tr><td>&nbsp;&nbsp;&nbsp;Aluno:
<input type="text" size=5 name="aluno" value=""> </td></tr>
<tr><td align="center">
<input name="oper" type="radio" id="oper1a" value="con" />
<label for="oper1a">Cons</label>
<input name="oper" type="radio" id="oper1b" value="exc" />
<label for="oper1b">Exc</label>
<input name="oper" type="radio" id="oper1c" value="alt" />
<label for="oper1c">Alt</label> </td></tr>
<tr><td align="center">
<input type="submit" name="enter" value=" Enter "> </td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td><hr /></td></tr>
<tr><td>&nbsp;</td></tr>
</form>
<tr><td align="center">
<input type="button" value=" &nbsp;Incluir&nbsp;&nbsp; "
onclick="window.location='inc_aluno.php'"></td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td align="center">
<input type="button" value=" &nbsp;Listar&nbsp;&nbsp; "
onclick="window.location='lista_alunos.php'"></td></tr>
<tr><td>&nbsp;</td></tr>
</table> </td>
<!-- --------------------- Submenu aluno-disciplinas ------------------- -->
<td width="22%" valign="top">
<table width="100%" border="0" bgcolor="#DADDFE"
cellpadding="0" cellspacing="0">
<tr><td align="center"><h3>Aluno-disciplinas</h3></td></tr>
<form name="form2" method="post" action="admin_aluno.php"
onsubmit="return validar2(this);">
<tr><td>&nbsp;&nbsp;&nbsp;Aluno:
<input type="text" size=5 name="aluno2" value=""></td></tr>
<tr><td><input name="oper2" type="radio" id="oper2a" value="alt" />
<label for="oper2a">Alteração e inclusão</label></td></tr>
<tr><td><input name="oper2" type="radio" id="oper2b" value="exc" />
<label for="oper2b">Exclusão</label></td></tr>
<tr><td align="center">
<input type="submit" name="enter" value=" Enter "></td></tr>
</form>
<tr><td>&nbsp;</td></tr>
<tr><td><hr /></td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td align="center">
<input type="button" value=" &nbsp;Listar&nbsp;&nbsp; "
onclick="window.location='lista_alunos_disc.php'"></td></tr>
<tr><td>&nbsp;</td></tr>
</form>
</table> </td>
<!-- --------------------- Submenu cursos ------------------------------- -->
<td width="22%" valign="top">
<table width="100%" border="0" bgcolor="#DADDFE"
cellpadding="0" cellspacing="0">
<tr><td align="center"><h3>Cursos</h3></td></tr>
<form name="form3" method="post" action="admin_cursos.php"
onsubmit="return validar3(this);">
<tr><td align="center">
<input name="oper3" type="radio" id="oper3a" value="inc" />
<label for="oper3a">Inclusão</label> </td></tr>
<tr><td align="center">
<input name="oper3" type="radio" id="oper3b" value="exc" />
<label for="oper3b">Exclusão</label> </td></tr>
<tr><td align="center">
<input type="submit" name="enter" value=" Enter "></td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td><hr /></td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td align="center">
<input type="button" value=" &nbsp;Listar&nbsp;&nbsp; "
onclick="window.location='lista_cursos.php'"></td></tr>
<tr><td>&nbsp;</td></tr>
</form>
</table> </td>
<!-- --------------------- Submenu matérias ----------------------------- -->
<td width="22%" valign="top">
<table width="100%" border="0" bgcolor="#DADDFE"
cellpadding="0" cellspacing="0">
<tr><td align="center"><h3>Matérias (Disc.)</h3></td></tr>
<form name="form4" method="post" action="admin_materias.php"
onsubmit="return validar4(this);">
<tr><td align="center">
<input name="oper4" type="radio" id="oper4a" value="inc" />
<label for="oper4a">Inclusão</label> </td></tr>
<tr><td align="center">
<input name="oper4" type="radio" id="oper4b" value="exc" />
<label for="oper4b">Exclusão</label> </td></tr>
<tr><td align="center">
<input type="submit" name="enter" value=" Enter "></td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td><hr /></td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td align="center">
<input type="button" value=" &nbsp;Listar&nbsp;&nbsp; "
onclick="window.location='lista_materias.php'"></td></tr>
<tr><td>&nbsp;</td></tr>
</form>
</table> </td>
</table></td>
<td width="70">&nbsp;</td></tr>
<tr><td>&nbsp;</td></tr>
</table>
</div>
</body>
</html>

O DOCTYPE na primeira linha do programa, que é usado em todos os programas deste trabalho, informa ao navegador o padrão de codificação para que o browser saiba como lidar com a página a ser carregada e a traçar compatibilidade com as folhas de estilo em cascata, CSS (Cascading Style Sheet).
Também, em todos os programas, é utilizado o arquivo "alunos.css" de folhas de estilo em cascata, com a codificação mostrada abaixo, cujas instruções podem ser copiadas e executadas a partir do Bloco de notas. A linguagem CSS não é alvo de estudo deste trabalho. O arquivo a seguir integra os programas deste projeto com a mera finalidade de formatação e sempre da mesma maneira:

alunos.css
body{
font-family:Verdana, Arial, Helvetica;
font-size:12px;
line-height:20px;
margin:0px;
margin-bottom:0px;
padding:0px;
}
#area_geral{
width:750px;
height:auto;
margin:auto;
}
.f1{
font-size:18px;
color:#000033;

 font:bold;
 text-decoration:underline;
 }
 .brco1{
 text-indent:30px;
 }
 .brco2{
 text-indent:60px;
 }
 .brco3{
 text-indent:90px;
 }

Neste e em outros programas foi utilizada a linguagem JavaScript para verificar se algum campo do formulário não fora preenchido pelo usuário. Neste caso, um alerta será emitido para que o usuário proceda o preenchimento do campo. Segue uma breve análise do JavaScript, embora não seja o escopo deste trabalho discutir esse assunto.
Os comandos entre as linhas <script language="JavaScript"> e </script> são interpretados pelo navegador como sendo da linguagem javaScript.

function validar(form1){
if (!document.form1.aluno.value){
alert("Informe o id do aluno")
document.form1.aluno.focus()
return false
}
...
}
O conjunto de instruções JavaScript à esquerda verifica se o campo aluno foi preenchido. Se estiver em branco, um alerta será exibido na tela com a mensagem "Informe o id do aluno". Quando o usuário clicar no botão OK da janela alerta, o cursor será posicionado no campo aluno, referenciado pelo método focus().
Para que a função validar(form1) seja executada ao clicar no botão "Enter" do formulário a tag <form> deve conter a cláusula onsumit.
Segue o código da tag form contido neste programa:

<form name="form1" method="post" action="admin_aluno.php" onsubmit="return validar(this);">

 

Submenu Alunos

Apresenta uma caixa de texto para receber a digitação do código do aluno e logo abaixo os botões de rádio, elementos de formulário, que permitem selecionar uma opção das três apresentadas: consulta (Cons), exclusão (Exc) e alteração (Alt) e o botão "Enter" para o usuário acionar o processo.

Começar-se-á a apresentação dos programas, iniciando no painel inferior do menu de Alunos onde aparecem os botões de execução "Incluir" e "Listar".

Botão Listar - este botão ativa o programa "lista_alunos.php" que exibe a listagem dos alunos cadastrados na tabela "alunos".

Relatório: Listagem de alunos

Programa: lista_alunos.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Lista alunos</title>
<link rel="stylesheet" href="alunos.css" type="text/css" />
</head>
<body bgcolor="#EEEEFF">
<div id=area_geral>
<table width="750" border="0" bgcolor="#000033"
cellspacing="0" cellpadding="0">
<tr><td>&nbsp;</td></tr>
<tr>
<td><font size="4" color="#FFFFFF"><strong>&nbsp;&nbsp;
Controle de Alunos </strong></font></td>
</tr>
<tr><td>&nbsp;</td></tr>
</table>
<table width="750" border="0" bgcolor="#6699FF">
<tr><td><input type="button" value=" &nbsp;Voltar&nbsp; "
onclick="window.location='index.html'"></td></tr>
<tr>
<td>
<table width="650" border="0" bgcolor="#DADDFE" align="center"
cellspacing="0" cellpadding="3" rules="cols">
<tr>
<td colspan="6" align="center" class="f1">Listagem de alunos</td>
</tr>
<tr><td colspan="6">&nbsp;</td></tr>
<tr align="center">
<td><a href="lista_alunos.php?ordem=id_aluno">
<strong>Código</strong></a></td>
<td><a href="lista_alunos.php?ordem=nome">
<strong>Nome</strong></a></td>
<td><a href="lista_alunos.php?ordem=sexo">
<strong>Sexo</strong></a></td>
<td><a href="lista_alunos.php?ordem=email">
<strong>E-mail</strong></a></td>
<td><a href="lista_alunos.php?ordem=data_matr">
<strong>Matrícula</strong></a></td>
<td><a href="lista_alunos.php?ordem=curso">
<strong>Curso</strong></a></td>
</tr>
<?php
if(isset($_GET["ordem"]))
$ordem=$_GET["ordem"];
else
$ordem="nome";
include("conecta.inc");
$sql="SELECT * FROM alunos ORDER BY $ordem";
$res=mysql_query($sql);
while($reg=mysql_fetch_row($res)) {
echo "<tr>";
echo "<td align='right'>$reg[0]</td>";
echo "<td>$reg[1]</td>";
echo "<td align='center'>$reg[2]</td>";
echo "<td>$reg[3]</td>";
$data=substr($reg[4],8,2)."/".
substr($reg[4],5,2)."/" .
substr($reg[4],0,4);
echo "<td align='center'>$data</td>";
echo "<td align='right'>$reg[5]</td>";
echo "</tr>";
}
mysql_close($conexao);
?>
</table></td>
</tr>
<tr><td>&nbsp;</td></tr>
</table>
</div>
</body>
</html>

Chegou o momento de integrar o PHP com o MySQL. Antes de começar a realizar operações, é preciso abrir uma conexão com o banco de dados. Para isso, é utilizado uma função de conexão e uma variável do PHP para referenciar essa conexão. Para fazer a conexão com o banco de dados MySQL é usada a função mysql_connect, cuja sintaxe básica é a seguinte:

$variável=mysql_connect("servidor", "usuário, "senha");

Após abrir a conexão, especifica-se através da função mysql_select_db qual o banco de dados que será utilizado. Depois disso já se pode efetuar operações com os dados do banco. Ao terminar o processamento realizado no banco de dados, pode-se e é recomendado fechar a conexão com o comando mysql_close($variável);

Para não repetir esses comandos de conexão e seleção nos diversos programas desse projeto exemplo, foi criada uma include para executar essa tarefa:
Arquivo: conecta.inc
<?php
$conexao = mysql_connect("localhost", "root", "");
mysql_select_db("alunosdb");
?>
Copie essas instruções e grave o arquivo com o nome conecta.inc, podendo utilizar o Bloco de Notas.
No projeto exemplo, para efetuar a conexão e a seleção do banco de dados é utilizado o arquivo acima através do comando:
include("conecta.inc");

O termo localhost é o nome do servidor local, root, o nome do usuário e senha, a expressão de acesso que está em branco ou não definida. Se o banco de dados for publicado na Internet, localhost deverá ser substituído pelo nome ou endereço IP do servidor, bem como, o nome do usuário e senha, que serão fornecidos pelo provedor de hospedagem.

Uma grande vantagem de utilizar includes nos programas é a que quando for necessário fazer alguma modificação, faz-se apenas em um único arquivo, em vez de alterar em cada um dos programas individualmente.

Depois de efetuada a conexão com o banco de dados podem ser utilizados os comandos SQL para fazer inclusões, alterações, exclusões e consultas. Para executar comandos SQL no banco de dados MySQL é utilizada a função mysql_query. No programa a acima, "lista_alunos.php", é utilizado o seguinte comando SQL:

$sql="SELECT * FROM alunos ORDER BY $ordem";
$res=mysql_query($sql);

$sql é o nome da variável que contém a instrução SQL. A instrução formada por "SELECT * FROM alunos ORDER BY $ordem"; significa dizer: selecione todos os registros da tabela alunos ordenado pelo conteúdo da variável $ordem. Após a execução do comando mysql_query, a variável $res conterá um ponteiro para o conjunto de registros retornados pelo comando SELECT representado pela variável $sql. O comando SELECT permite selecionar todas as linha de uma ou mais tabelas ou apenas uma parte delas. Sintaxe básica:

SELECT <lista de campos>FROM<lista de tabelas>[WHERE<condições>];

A <lista de campos> pode ser substituída por um * e, neste caso, todos os campos da tabela serão retornados. Para determinar quais registros devem ser retornados, utiliza-se a opção WHERE. Para ordenar os registros retornados por uma consulta é utilizada a cláusula ORDER BY seguida pelos nomes dos campos a serem ordenados.

Para processar os registros retornados pelo comando SQL, no programa acima, é utilizada a função mysql_fetch_row que guarda o registro atual do resultado em um array. No aludido programa é utilizado o comando:

while($reg=mysql_fetch_row($res)) {

Cada vez que esse comando é executado é armazenado na variável $reg um array constituído dos campos do registro ou da linha seguinte apontada pela variável $res. Um dos comandos de impressão contidos no laço do comando while, mostrado a seguir, imprime o conteúdo do campo id_aluno (primeiro campo da linha da tabela alunos) que deve ser indicado pelo índice [0] na variável $reg:
echo "<td align='right'>$reg[0]</td>";

O segundo campo da tabela deve ser referenciado pelo índice [1], o terceiro, pelo índice [2] e assim sucessivamente.

Há uma série de funções que se pode utilizar para tratar as informações retornadas pelos comandos SQL. As principais funções são:

 mysql_fetch_row  retorna a linha atual do resultado em um array enumerado
 mysql_num_rows  retorna o número de linhas de uma consulta
 mysql_fetch_array  retorna a linha atual do resultado em um array associativo
 mysql_affected_rows  retorna o número de linhas afetadas por uma operação
 mysql_num_fields  retorna o número de colunas de uma consulta
 mysql_field_name  retorna o nome de uma coluna em uma consulta
 mysql_result  retorna uma coluna do resultado

Sugestão para nomes de variáveis:
$con ou $conexão- ligação com o banco de dados
$sql ou $comsql - sentença SQL
$res ou $resultado - resultado da sentença SQL
$reg ou $registro - dados de um registro

Os primeiros comandos PHP do programa "lista_alunos.php" são:

if(isset($_GET["ordem"]))
$ordem=$_GET["ordem"];
else
$ordem="nome";

O primeiro comando if(isset($_GET["ordem"])) avalia se a chave associativa ["ordem"] do array $_GET existe ou se foi definida. Na primeira vez que o programa é carregado e executado ela não existe, sendo, por isso, necessário averiguar sua existência para poder atribuí-la à variável $ordem. Na primeira execução ou na inexistência de valor no array o relatório é ordenado pelo campo nome atribuído à variável $ordem ($ordem="nome";). Depois o usuário pode escolher o campo pelo qual pretende fazer a ordenação do relatório, clicando em um dos nomes do cabeçalho que funcionam como links. Ao clicar, por exemplo, no cabeçalho da coluna "Código", o PHP executa o comando da seguinte linha do programa:

<td><a href="lista_alunos.php?ordem=id_aluno"><strong>Código</strong></a></td>

Este comando efetua uma chamada a este mesmo programa, passando o parâmetro ordem=id_aluno via URL, que é visualizado na barra de endereço do navegador, (método GET) e relaciona os alunos por ordem do campo id_aluno.
O caractere ? após o nome do programa indica o início do parâmetro que é constituído do nome da variável e seu respectivo valor separados pelo caractere =.

Botão Incluir - Efetua a inclusão de novos alunos na tabela "alunos".

Formulário: Inclusão de aluno

A inclusão de aluno no banco de dados é realizada por dois programas: o primeiro exibe o formulário na tela mostrado acima para a entrada de dados do aluno e o segundo faz o cadastramento ou a inclusão propriamente dita.

Programa: inc_aluno.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>inclui aluno</title>
<link rel="stylesheet" href="alunos.css" type="text/css" />
</head>
<script language="JavaScript">
function validar(form1) {
if(!document.form1.alu_nome.value){
alert("Informe o nome")
document.form1.alu_nome.focus()
return false
}
if ((document.form1.sexo[0].checked) ||
(document.form1.sexo[1].checked)) {
var i=0 // sem efeito
}else{
alert("Informe o sexo")
return false
}
var jsEmail=document.form1.alu_email.value
if (!jsEmail) {
alert("Informe seu e-mail")
document.form1.alu_email.focus()
return false
}
var tstEmail
tstEmail=validarEmail(jsEmail)
if (tstEmail==false) {
alert("E-mail inválido")
document.form1.alu_email.focus()
return false
}
var jsNasc=document.form1.alu_matr.value
if(!jsNasc) {
alert("Informe a data de matrícula")
document.form1.alu_matr.focus()
return false
}
var tstData=true
tstData=validarData(jsNasc)
if (tstData==false) {
alert("Data incorreta")
document.form1.alu_matr.focus()
return false
}
if (document.form1.alu_curso.value=='selecione'){
alert("Slecione o curso!")
document.form1.alu_curso.focus()
return false
}
}
function validarEmail(email) {
var tstLogico=false
var tam=(email.length)
var i
for(i=0;i<=tam;i++) {
if ((email.substr(i,1)) == "@") {
tstLogico=true
break
}
}
if (tstLogico)
return true
else
return false
}
function validarData(data) {
var dia=data.substr(0,2)
var mes=data.substr(3,2)
var ano=data.substr(6,4)
if ((dia>"00") && (dia<=31) &&
(mes>"00") && (mes<=12) &&
(!(isNaN(ano))) && (ano>2009))
return true
else
return false
}
</script>
<body bgcolor="#EEEEFF">
<div id=area_geral>
<table width="750" border="0" bgcolor="#000033"
cellspacing="0" cellpadding="0">
<tr><td>&nbsp;</td></tr>
<tr>
<td><font size="4" color="#FFFFFF"><strong>&nbsp;&nbsp;
Controle de Alunos </strong></font></td>
</tr>
<tr><td>&nbsp;</td>
</tr>
</table>
<table width="750" border="0" bgcolor="#6699FF">
<tr><td><input type="button" value=" &nbsp;Voltar&nbsp; "
onclick="window.location='index.html'"></td></tr>
<tr>
<td>
<table width="400" border="0" bgcolor="#DADDFE" align="center"
cellspacing="0" cellpadding="3">
<tr>
<td>
<h3 align="center">Inclusão de aluno</h3>
<form id="form1" name="form1" method="POST" action="inc_aluno2.php"
onsubmit="return validar(this);">
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Nome:
<input name="nome" type="text" id="alu_nome" size="40"
maxlength="30" />
</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sexo:
<input name="sexo" type="radio" id="sexo_masc" value="m" />
<label for="sexo_masc">Masculino</label>
<input name="sexo" type="radio" id="sexo_fem" value="f" />
<label for="sexo_fem">Feminino</label>
</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;E-mail:
<input name="email" type="text" id="alu_email" size="40"
maxlength="30" />
</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Data de matrícula:
<input name="dat_matr" type="text" id="alu_matr" size="15"
maxlength="10" />dd/mm/aaaa
</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Curso:
<select size="1" id="alu_curso" name="curso">
<?php
include("conecta.inc");
$res=mysql_query("SELECT * FROM cursos");
while($reg=mysql_fetch_row($res)) {
$codigo=$reg[0];
$desc=$reg[1];
echo "<option value=\"$codigo\">$codigo - $desc</option>";
}
?>
<option selected>selecione</option>
</select><br />
</p>
<p align="right">
<input type="submit" name="envia" id="envia" value=" Enviar " />
&nbsp;
<input type="reset" value="Limpar"/> &nbsp;&nbsp;&nbsp;&nbsp;
</p>
</form>
</td></tr>
</table></td>
</tr>
<tr><td>&nbsp;</td></tr>
</table>
</div>
</body>
</html>

Este programa apresenta o formulário para cadastramento e efetua a leitura da tabela de "cursos" para montar uma lista drop down ou lista suspensa para que o usuário possa selecionar um dos cursos existentes. Além disso, executa uma validação dos dados através da linguagem JavaScript que é ativada a partir da cláusula onsubmit da seguinte tag form antes de acessar o programa inc_aluno2.php especificado na opção action:

<form id="form1" name="form1" method="POST" action="inc_aluno2.php" onsubmit="return validar(this);">

Os comandos, a seguir, contidos no programa acima, criam a lista suspensa com o código e descrição dos cursos existente na tabela de cursos:

<select size="1" id="alu_curso" name="curso">
<?php
include("conecta.inc");
$res=mysql_query("SELECT * FROM cursos");
while($reg=mysql_fetch_row($res)) {
$codigo=$reg[0];
$desc=$reg[1];
echo "<option value=\"$codigo\">$codigo - $desc</option>";
}
?>
<option selected>selecione</option>
</select>

Observe que a função mysql_query foi aplicada diretamente ao comando SELECT, uma forma alternativa a ser usada em procedimentos considerados simples. A repetição controlada pelo comando While retorna todos os registros de cursos para compor o menu suspenso do formulário contendo código e descrição, conforme o comando:

echo "<option value=\"$codigo\">$codigo - $desc</option>";

Barras e aspas no meio da string: Como o caractere aspa é o delimitador de texto, aspas no meio do texto devem ser precedidas do caractere de controle ou caractere de escape \ como no comando da linha acima. Outra forma de codificar a instrução acima, seria substituir as aspas internas do texto por apóstrofos ('), o que dispensaria o uso do caractere de escape.

Programa inc_aluno2.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>Inclui aluno na tabela de alunos</title>
<link rel="stylesheet" href="alunos.css" type="text/css" />
</head>
<body bgcolor="#EEEEFF">
<div id=area_geral>
<table width="750" border="0" bgcolor="#000033"
cellspacing="0" cellpadding="0">
<tr>
<td>&nbsp;</td>
</tr>
<tr>
<td><font size="4" color="#FFFFFF"><strong>&nbsp;&nbsp;
Controle de Alunos </strong></font></td>
</tr>
<tr>
<td>&nbsp;</td>
</tr>
</table>
<table width="750" border="0" bgcolor="#6699FF">
<tr><td><input type="button" value=" &nbsp;Voltar&nbsp; "
onclick="window.location='index.html'"></td></tr>
<tr>
<td>
<table width="400" border="0" bgcolor="#DADDFE" align="center"
cellspacing="0" cellpadding="3">
<tr>
<td>
<h3 align="center">Inclusão de aluno</h3>
<?php
$nome=$_POST['nome'];
$sexo=$_POST['sexo'];
$email=$_POST['email'];
$curso=$_POST['curso'];
$dat_matr=$_POST['dat_matr'];
$data= substr($dat_matr,6,4)."-".
substr($dat_matr,3,2)."-" .
substr($dat_matr,0,2);
include("conecta.inc");
$sql="INSERT INTO alunos (nome, sexo, email, data_matr, curso)"
."VALUES ('$nome','$sexo','$email','$data','$curso')";
mysql_query($sql);
echo "<p align='center'>(Aluno incluido com sucesso)</p>";
?>
</td></tr>
</table></td>
</tr>
<tr>
<td>&nbsp;</td>
</tr>
</table>
</div>
</body>
</html>

Este programa recebe os dados através do método POST. Os nomes dos campos do formulário do programa emissor são usados como chaves associativas dos arrays que armazenam os valores dos campos.

O comando INSERT, a seguir, é responsável pela inserção dos dados na tabela alunos:

$sql="INSERT INTO alunos (nome, sexo, email, data_matr, curso)"
."VALUES ('$nome','$sexo','$email','$data','$curso')";
mysql_query($sql);

Sintaxe básica do comando INSERT:

INSERT INTO <nome da tabela>(campo1, campo2,...,campon)
VALUES (valor1, valor2,...,valorn);

Cada campo nomeado da tabela recebe o valor correspondente à posição do valor na lista, ou seja, campo1 recebe valor1, campo2 recebe valor2 e assim sucessivamente.

Botão Enter - ao pressionar este botão é iniciado o processo que conduz à consulta, exclusão e alteração dos dados do aluno que tem o código informado na caixa de texto "Aluno". O programa "admin.aluno.php" efetua a consulta e a exclusão e se a opção for alteração ativa o programa "alt_aluno.php". O programa "admin_aluno.php" administra também as operações do botão Enter do submenu "Aluno-disciplinas" que será visto mais adiante.

Programa admin_aluno.php

<?php
if(isset($_POST['oper']))
$oper=$_POST['oper'];
else
$oper="";
if(isset($_POST['oper2']))
$oper2=$_POST['oper2'];
else
$oper2="";
if(isset($_POST['aluno']))
$cod_aluno=$_POST['aluno'];
if(isset($_POST['aluno2']))
$cod_aluno=$_POST['aluno2'];
if($oper2=="alt")
header("Location: alt_aluno_disc.php?aluno=$cod_aluno");
if($oper2=="exc")
header("Location: exc_aluno_disc.php?aluno=$cod_aluno");
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Administra aluno</title>
<link rel="stylesheet" href="alunos.css" type="text/css" />
</head>
<body bgcolor="#EEEEFF">
<div id=area_geral>
<table width="750" border="0" bgcolor="#000033"
cellspacing="0" cellpadding="0">
<tr><td>&nbsp;</td></tr>
<tr>
<td><font size="4" color="#FFFFFF"><strong>&nbsp;&nbsp;
Controle de Alunos </strong></font></td>
</tr>
<tr><td>&nbsp;</td></tr>
</table>
<table width="750" border="0" bgcolor="#6699FF">
<tr><td><input type="button" value=" &nbsp;Voltar&nbsp; "
onclick="window.location='index.html'"></td></tr>
<tr>
<td>
<table width="400" border="0" bgcolor="#DADDFE"
align="center" cellspacing="0" cellpadding="3">
<tr>
<td><h3 align="center">Administração de aluno</h3>
<?php
include("conecta.inc");
$sql="SELECT * FROM alunos WHERE id_aluno=$cod_aluno";
$res=mysql_query($sql);
$n=mysql_num_rows($res);
if($n==0){
echo "<p align='center'>(Aluno não cadastrado!)</p>";
exit;
}
if ($oper=="con"){
$registro=mysql_fetch_row($res);
echo "<p class='brco1'>Nome: $registro[1]
&nbsp;&nbsp;&nbsp; Código: $registro[0]</p>";
echo "<p class='brco1'>Sexo: $registro[2]</p>";
echo "<p class='brco1'>E-mail: $registro[3]</p>";
$data=substr($registro[4],8,2)."/".
substr($registro[4],5,2)."/" .
substr($registro[4],0,4);
echo "<p class='brco1'>Data de matrícula: $data</p>";
echo "<p class='brco1'>Curso: $registro[5]</p>";
}
elseif ($oper=="exc"){
$res2=mysql_query("DELETE FROM alunos WHERE id_aluno=$cod_aluno");
if(mysql_affected_rows()==1)
echo "<p align='center'>(Aluno excluído com sucesso!)</p>";
else
echo "<p align='center'>(Aluno não encontrado!)</p>";
}
else{
if($oper=="alt"){
header("Location: alt_aluno.php?ident_aluno=$cod_aluno");
}
}
mysql_close($conexao);
?>
</td></tr>
</table></td>
</tr>
<tr><td>&nbsp;</td></tr>
</table>
</div>
</body>
</html>

Este programa recepciona informações enviadas pelo programa "index.html", tanto as oriundas do menu "Alunos" como as do menu "Aluno-disciplinas" referentes aos paineis superiores da tela "Menu de administração".
Dados do formulário alunos: oper e aluno.
Dados do formulário aluno-disciplinas: oper2 e aluno2.

Observa-se, também, neste programa comandos de redirecionamento de páginas por meio da função header:
header("Location: alt_aluno_disc.php?aluno=$cod_aluno");

Neste caso, o navegador é reencaminhado para o programa "alt_aluno_disc.php", levando o parâmetro aluno=$cod_aluno via URL.

Para excluir registros de uma tabela de um banco de dados é utilizada a instrução DELETE da linguagem SQL:

$res2=mysql_query("DELETE FROM alunos WHERE id_aluno=$cod_aluno");
if(mysql_affected_rows()==1)
echo "<p align='center'>(Aluno excluído com sucesso!)</p>";
else
echo "<p align='center'>(Aluno não encontrado!)</p>";

A primeira instrução do conjunto acima exclui da tabela "alunos" o registro de código igual ao contido na variável $cod_aluno. Em seguida é avaliado o retorno da instrução DELETE através da função mysql_affected_rows para determinar o resultado da operação. Sintaxe básica da instrução DELETE:
DELETE FROM <nome da tabela>[WHERE condição];

Se a opção escolhida for Alt (alteração) na seção "Alunos" do "Menu de administração", a função predefinida header:
             if($oper=="alt"){
                   header("Location: alt_aluno.php?ident_aluno=$cod_aluno");

ativa o programa "alt_aluno.php" que abre a tela, a seguir, para permitir a modificação de dados do aluno informado.

Formulario: Alteração de aluno

Programa alt_aluno.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>altera aluno</title>
<link rel="stylesheet" href="alunos.css" type="text/css" />
</head>
<script language="JAVASCRIPT">
function validar(form1) {
if(!document.form1.alu_nome.value){
alert("Informe o nome")
document.form1.alu_nome.focus()
return false
}
var js_email=document.form1.alu_email.value
if (!js_email) {
alert("Informe seu e-mail")
document.form1.alu_email.focus()
return false
}
var tstEmail=true
tst_email=validarEmail(js_email)
if (tst_email==false) {
alert("E-mail inválido")
document.form1.alu_email.focus()
return false
}
var js_matr=document.form1.alu_matr.value
if(!js_matr) {
alert("Informe a data de matrícula")
document.form1.alu_matr.focus()
return false
}
var tst_data=true
tst_data=validarData(js_matr)
if (tst_data==false) {
alert("Data incorreta")
document.form1.alu_matr.focus()
return false
}
}
function validarEmail(email) {
var tst_logico=false
var tam=(email.length)
var i
for(i=0;i<=tam;i++) {
if ((email.substr(i,1)) == "@") {
tst_logico=true
break
}
}
if (tst_logico)
return true
else
return false
}
function validarData(data) {
var dia=data.substr(0,2)
var mes=data.substr(3,2)
var ano=data.substr(6,4)
if ((dia>"00") && (dia<=31) &&
(mes>"00") && (mes<=12) &&
(!(isNaN(ano))) && (ano>2009))
return true
else
return false
}
</script>
<body bgcolor="#EEEEFF">
<div id=area_geral>
<table width="750" border="0" bgcolor="#000033"
cellspacing="0" cellpadding="0">
<tr><td>&nbsp;</td></tr>
<tr>
<td><font size="4" color="#FFFFFF"><strong>&nbsp;&nbsp;
Controle de Alunos </strong></font></td>
</tr>
<tr><td>&nbsp;</td></tr>
</table>
<table width="750" border="0" bgcolor="#6699FF">
<tr><td>&nbsp;</td></tr>
<tr>
<td>
<table width="400" border="0" bgcolor="#DADDFE" align="center"
cellspacing="0" cellpadding="3">
<tr>
<td><h3 align="center">Alteração de aluno</h3>
<?php
$cod_aluno=$_GET['ident_aluno'];
include("conecta.inc");
$sql="SELECT * FROM alunos WHERE id_aluno=$cod_aluno";
$res=mysql_query($sql);
if(mysql_num_rows($res)==0){
echo "<p align='center'>(Aluno não cadastrado!)</p>";
exit;
}
else{
$registro=mysql_fetch_row($res);
$id_aluno=$registro[0];
$nome=$registro[1];
$sexo=$registro[2];
$email=$registro[3];
$data=substr($registro[4],8,2)."/".
substr($registro[4],5,2)."/" .
substr($registro[4],0,4);
$curso=$registro[5];
}
?>
<form name="form1" method="POST" action="alt_aluno2.php"
onsubmit="return validar(this);">
<input type="hidden" name="id_aluno" value="<?php echo $cod_aluno ?>" />
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Nome:
<input name="nome" type="text" id="alu_nome" value="<?php echo $nome ?>" />
&nbsp;&nbsp;&nbsp;&nbsp;
<input name="id_aluno" type="text" readonly="ler" size="4" id="alu_id"
value="<?php echo $id_aluno ?>" />
</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sexo:
<select name="sexo" id="alu_sexo">
<option value="<?php echo $sexo;?>" selected="selected">
<?php echo $sexo;?></option>
<option value="m">m</option>
<option value="f">f</option>
</select>
</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;E-mail:
<input name="email" type="text" id="alu_email"
value="<?php echo $email ?>" />
</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Data de matrícula:
<input name="dat_matr" type="text" id="alu_matr"
value="<?php echo $data ?>" /> dd/mm/aaaa
</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Curso:
<select size="1" name="curso">
<option value="<?php echo $curso;?>"
selected="selected"><?php echo $curso;?></option>
<?php
$res2=mysql_query("SELECT * FROM cursos");
while($registro2=mysql_fetch_row($res2)) {
$codigo=$registro2[0];
$desc=$registro2[1];
echo "<option value=\"$codigo\">$codigo - $desc</option>";
}
?>
</select>
</p>
<p align="right">
<input type="submit" name="envia" id="envia" value=" Enviar " /> &nbsp;
<input type="reset" name="limpa" value="Limpar" /> &nbsp;&nbsp;&nbsp;&nbsp;
</p>
</form>
</td></tr>
</table></td>
</tr>
<tr><td>&nbsp;</td></tr>
</table>
</div>
</body>
</html>

Este programa apresenta os dados do aluno indicado no formulário de alteração, a partir da tabela "alunos" e prepara a lista suspensa com os códigos dos cursos existentes na tabela de "cursos", executando a instrução SELECT em ambas as tabelas.

O usuário faz as modificações necessárias e envia o formulário, clicando no botão Enviar. Após a validação feita por intermédio do JavaScript o programa definido na opção action da tag form é ativado. Codificação da tag form:

<form name="form1" method="POST" action="alt_aluno2.php" onsubmit="return validar(this);">

Programa: alt_aluno2.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>Altera aluno na tabela de alunos</title>
<link rel="stylesheet" href="alunos.css" type="text/css" />
</head>
<body bgcolor="#EEEEFF">
<div id=area_geral>
<table width="750" border="0" bgcolor="#000033"
cellspacing="0" cellpadding="0">
<tr><td>&nbsp;</td></tr>
<tr>
<td><font size="4" color="#FFFFFF"><strong>&nbsp;&nbsp;
Controle de Alunos </strong></font></td>
</tr>
<tr><td>&nbsp;</td></tr>
</table>
<table width="750" border="0" bgcolor="#6699FF">
<tr><td><input type="button" value=" &nbsp;Voltar&nbsp; "
onclick="window.location='index.html'"></td></tr>
<tr>
<td>
<table width="400" border="0" bgcolor="#DADDFE" align="center"
cellspacing="0" cellpadding="3">
<tr>
<td><h3 align="center">Alteração de aluno</h3>
<?php
$id_aluno=$_POST['id_aluno'];
$nome=$_POST['nome'];
$sexo=$_POST['sexo'];
$email=$_POST['email'];
$curso=$_POST['curso'];
$dat_matr=$_POST['dat_matr'];
$data=substr($dat_matr,6,4)."-".
substr($dat_matr,3,2)."-" .
substr($dat_matr,0,2);
include("conecta.inc");
$sql="UPDATE alunos SET";
$sql=$sql." nome='$nome',sexo='$sexo',email='$email',data_matr='$data',";
$sql=$sql." curso='$curso' WHERE id_aluno='$id_aluno'";
$res=mysql_query($sql);
if(mysql_affected_rows() > 0)
echo "<p align='center'>(Aluno alterado com sucesso!)</p>";
else{
$erro=mysql_error();
echo "<p align='center'>(Erro na atualização: $erro!)</p>";
}
mysql_close($conexao);
?>
</td></tr>
</table></td>
</tr>
<tr><td>&nbsp;</td></tr>
</table>
</div>
</body>
</html>

Este programa obtém os dados enviados pelo usuário acessando o array predefinido $_POST e executa a atualização por meio do comando UPDATE como segue:

$sql="UPDATE alunos SET";
$sql=$sql." nome='$nome',sexo='$sexo',email='$email',data_matr='$data',";
$sql=$sql." curso='$curso' WHERE id_aluno='$id_aluno'";
$res=mysql_query($sql);

A instrução UPDATE foi dividida em três linhas para dispor adequadamente na largura da página. Observe que a concatenação da instrução preserva um espaço em branco antes da sentença, caso contrário um erro será retornado. (O operador ponto "." efetua a concatenação ou junção de strings ou cadeias de caracteres). Sinatxe básica da instrução UPDATE:

UPDATE <nome da tabela> SET campo1=valor1 [, campo2=valor2, ..., campon=valorn]
[WHERE <condição>];