Lições de PHP - Lição 3.3 - Trabalhando com Banco de Dados MySQL. Atualizando Dados UPDATE.
Já conhecemos operadores MySQL como SELECT, INSERT INTO, agora é hora de aprender a atualizar dados já inseridos no banco de dados. Para isso, usaremos o operador SQL UPDATE. Mas primeiro, vamos alterar nosso arquivo index.php e adicionar o processamento de outro caminho. Encontre este código:
if( $_GET['admin'] == 1 ){ // se houver uma variável admin na URL
print $obj->display_admin(); // se houver a variável, exibir o formulário
}else{
print $obj->display_public(); // se não houver variável, exibir mensagens
}
E substitua pelo seguinte código:
switch ($_GET['admin']){
case 'add':
print $obj->display_admin(); // se a variável for add, exibir o formulário de adição
break;
case 'update':
print $obj->display_update(); // se a variável for update, exibir o formulário de edição
break;
default:
print $obj->display_public(); // se não houver variável, exibir mensagens
}
Troquei o operador condicional if por outro operador switch, que permite usar vários valores de seleção para a variável $_GET['admin'], depois teremos delete. Por enquanto, troquei 1 por add e adicionei outra opção de update. Como mudei 1 para add, preciso alterar a saída de links no arquivo simpleCMS.php:
$content .= '<p><a href="/index.php?admin=1">Adicionar mensagem</a></p>';
Mude para:
$content .= '<p><a href="/index.php?admin=add">Adicionar mensagem</a></p>';
Também precisamos adicionar um novo método display_update(), que chamaremos quando houver uma variável admin com o valor update na solicitação get. Adicionamos um novo método display_update():
public function display_update(){
}
Bem, criamos o processamento do caminho que resulta em chamar nosso novo método display_update(), resta adicionar links à página de chamada do método e implementar o método display_update().
Primeiro, vamos pensar em como vamos implementar a atualização de registros. Precisaremos enviar uma consulta específica ao banco de dados com uma condição WHERE para que possamos dizer definitivamente que este é o registro que precisa ser atualizado. Isso pode ser feito com precisão se especificarmos o id deste registro, que para nós é a coluna mid. Portanto, você precisará passar o valor mid ao chamar o método display_update(). Como você pode fazer isso? Você pode passar o valor na consulta get junto com admin=update, por exemplo assim:
http://teste/index.php?admin=update&mid=3
Ou você pode usar um parâmetro no método display_update(), por exemplo assim:
public function display_update($mid){
}
E então chame o método da seguinte forma:
switch ($_GET['admin']){
case 'add':
print $obj->display_admin(); // se a variável for add, exibir o formulário de adição
break;
case 'update':
$mid = 1; //ou você pode colocar $_GET['mid'] aqui
print $obj->display_update($mid); // se a variável for update, exibir o formulário de edição
break;
default:
print $obj->display_public(); // se não houver variável, exibir mensagens
}
De qualquer forma, você precisará passar o valor mid e provavelmente através da solicitação get, então vamos usar a primeira opção, porque é mais simples.
public function display_update(){
$message_id = $_GET['mid'];
}
Assim passamos o valor de mid, mas e se este valor não estiver na solicitação get? Isso precisa ser verificado.
public function display_update(){
$message_id = $_GET['mid']; //gravar mid em uma variável
if(!empty($message_id)){
}else{
$content .= '<p>Nenhum valor de mid!</p>';
$content .= '<p><a href="/index.php">Voltar à página principal</a></p>';
}
return $content;
}
Agora se tivermos admin=update na solicitação get, mas o valor de mid não estiver presente, iremos para uma página com um link para a página principal.
http://teste/index.php?admin=update
Bem, chegamos ao ponto em que precisamos de links para as páginas de edição. Você precisará corrigir o método display_public() para exibi-los:
public function display_public() { // método de exibição de mensagens
$content = '';
$sql = 'SELECT * FROM Messages ORDER BY mid DESC'; //consulta de seleção
$result = mysql_query($sql) or die(mysql_error()); // armazenamos o resultado de execução da consulta de seleção em uma variável
while($row = mysql_fetch_array($result)){ // a variável da consulta de seleção deve ser processada com a função especial mysql_fetch_array()
$content .= '<div class="post">'; // div envolvendo o registro
$content .= '<span class="time">#' . $row['mid'] . ' de ' . date('d-m-Y', $row['created']) . '</span><h2>' . $row['title'] . '</h2>'; // exibir hora e título
$content .= '<p>' . $row['bodytext'] . '</p>'; // exibir texto de mensagem
$content .= '<p><a href="/index.php?admin=update&mid=' . $row['mid'] . '">Editar mensagem</a>'; // adicionar link para editar mensagem
$content .= '</div>'; // fim do div envolvente
}
$content .= '<p><a href="/index.php?admin=add">Adicionar mensagem</a></p>';
return $content;
}
Agora sob cada mensagem haverá um link para sua edição. O formulário de edição de mensagem será exibido através do nosso método display_update(). Então vamos escrever o código para este método. O formulário em si será pouco diferente do formulário de adição, exceto que preencheremos os valores existentes da mensagem do banco de dados e adicionaremos um campo oculto com o valor de mid.
[Seção contém descrição detalhada da implementação de UPDATE com exemplos de código e explicações de lógica de negócio...]