Tratamento chave estrangeira
Outro recurso importante é o tratamento de chave estrangeira. Para explicitar vamos ver a estrutura da tabela alunos que criamos no início da Unidade D. Veja abaixo que a tabela possui um campo chamado cidade que é do tipo int(11). O valor do campo cidade faz referência a chave primária da tabela cidades (campo id).
CREATE TABLE IF NOT EXISTS alunos ( |
Pensando no formulário de alunos, podemos fazer a seleção da cidade conforme mostra a figura D.24, buscando os dados da tabela cidades e mostrando em um menu de lista.
O menu de lista seria montado com as opções da forma apresentada abaixo, onde mostra o nome da cidade, mas o valor correspondente ao nome da cidade é o identificador (id):
<select name='cidade'> |
Para montar este menu de lista, a biblioteca ADODB possui um método chamado GetMenu. Por isso, no arquivo funcoes.php criamos a função lista_cidades() como exemplo para tratar chave estrangeira com o GetMenu. Vamos dar uma olhada no código conforme figura D.25:
- linha 19 – definição da função lista_cidades() que recebe dois parâmetros: a instância da conexão e o nome da cidade que deve ser mostrado no menu de lista por padrão;
- linha 21 – monta o SQL para buscar os dados da cidade. Importante a ordem dos campos no select, deve sempre primeiro vir a descrição e depois o campo que é chave primária;
- linha 22 – executa o SQL e atribui o resultado para $rs;
- linha 23 – testa se chegou um valor no parâmetro $nome. Se chegou valor significa que é uma alteração, senão uma inclusão. O menu de lista é montado de forma diferente para cada situação.
- linha 24 – retorna o menu montado. O menu se chamará cidade, virá selecionado por padrão a cidade cujo nome é igual ao valor de $nome, e não possui um primeiro valor do menu em branco;
- linha 26 – retorna o menu montado. O menu se chamará cidade, virá selecionado com a primeira opção em branco;
|
||||
|
||||
|
Abaixo segue um exemplo de chamada da função no formulário dentro da coluna que se deseja mostrar o menu de lista:
<td><?php echo lista_cidades($con, $rs->fields['cidade_nome']); ?></td> |