O cadastro de livros agora precisa ser alterado, pois os dados foram inseridos e precisam ser acessíveis para possíveis alterações de erros ou outras informações.
PHP 5 e MySQL 5 e Ajax
O código a seguir unirá muitos dos conhecimento adquiridos no PHP 5:<?php
//conecta ao banco de dados
$conexao=mysql_connect("localhost","edson","integrator"); //acessa o banco de dados desejado
$banco=mysql_select_db("livraria");
//método que verifica se os campos estão preenchidos function preenchido( )
{
//verifica o número de argumentos $numargs = func_num_args( ); //pega os argumentos passados $arg_list = func_get_args( );
//no loop verifica se os argumentos estão vazios com empty for ($i = 0; $i < $numargs; $i++){
if(empty($arg_list[$i]))
return false;//retorna false caso estejam }
return true;//retorna true caso não estejam }
//método que coloca aspas nas strings para execução da instrução SQL function valor_string($valor)
{
//verifica se está ativo as cotas mágicas //se não estiver, usa addslashes
$valor = (!get_magic_quotes_gpc( )) ? addslashes($valor) : $valor; $valor = ($valor != "") ? "'" . $valor . "'" : "NULL";
return $valor; }
//captura os dados vindos do formulário HTML $isbn=trim($_REQUEST['isbn']);
$titulo=trim($_POST['titulo']); $edicao=trim($_POST['edicao']);
$publicacao=trim($_POST['publicacao']); $descricao=trim($_POST['descricao']);
//verifica se foi postado o formulário de atualização if(isset($_POST['bt_atu'])){
try{
//verifica se os dados recebidos não são vazios
if( !preenchido($titulo,$edicao,$publicacao,$descricao) ){ //se forem vazios dispara uma exceção e encerra a execução //pulando para a cláusula catch
throw new Exception('Você não preencheu os campos corretamente<br />');
}
//com sprintf você pode trabalhar com strings //essa função retorna string formatado
PHP 5 e MySQL 5 e Ajax
PHP 5 & MySQL 5 for Web – www.integrator.com.br/php
$query=sprintf("UPDATE livros SET titulo = %s, edicao_num = %s, ano_publicacao = %s, descricao = %s WHERE isbn=%s", valor_string($titulo), valor_string($edicao), valor_string($publicacao), valor_string($descricao), valor_string($isbn)); $update=mysql_query($query);
//verifica se o resultado dado é falso dispara uma exceção e encerra if($update===FALSE) {
throw new Exception("Erro na atualização... " . mysql_error() . "<br />");
} else{
$msg= "Foi atualizada " . mysql_affected_rows() . " linha<br />"; //destrói as variáveis criadas para receber os dados
unset($isbn,$titulo,$edicao,$publicacao,$descricao); }
}
catch (Exception $e) {
//caso haja uma exceção à mensagem é capturada e atribuída a $msg $msg = $e->getMessage( );
} }
$rs=mysql_query("SELECT * FROM livros"); ?>
<!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>Atualização de Livros</title>
</head> <body> <?php
//verifica se existe a variável $msg if(isset($msg))
echo $msg;
?> <p>
<table width="489" border="1" cellspacing="0" cellpadding="0"> <tr>
<th width="109" align="left">ISBN</th> <th width="202" align="left">Título</th>
PHP 5 e MySQL 5 e Ajax
<th width="82" align="left">Edição N.º </th><th width="96" align="left">Publicado em: </th> <th width="96" align="left">Atualizar </th> </tr>
<?php
//varre todos os dados da tabela
while($row=mysql_fetch_array($rs)){ ?>
<tr>
<td><?php echo $row['isbn']?></td> <td><?php echo $row['titulo']?></td>
<td align="center"><?php echo $row['edicao_num']?></td> <td align="center"><?php echo $row['ano_publicacao']?></td> <td align="center">
<a href="<?php echo $_SERVER['PHP_SELF']?>?isbn= <?php echo urlencode($row['isbn'])?>"> Clique aqui </a> </td> </tr> <?php }//end if?> </table> </p> <?php
//verifica se você clicou no link e se não está vazio o valor de isbn if( ( !empty($_SERVER['QUERY_STRING']) && !empty($isbn) ) ) : try{
$result=mysql_query("SELECT * FROM livros WHERE isbn='$isbn'"); //se a query resultar em um erro dispara essa exceção
if($result===FALSE) {
throw new Exception("Erro na consulta... " . mysql_error( ) . "<br />"); }
//se o resultado for igual a zero, ou seja, não existir o ISBN //dispara essa exceção
if(mysql_num_rows($result)==0)
throw new Exception("Não existem dados no ISBN procurado"); $row = mysql_fetch_assoc($result);
?>
<form id="form1" name="form1" method="post"
action="<?php echo $_SERVER['PHP_SELF']?>">
<table width="259" border="0" cellspacing="2" cellpadding="0"> <tr> <th colspan="2">Atualização de Livros </th> </tr> <tr> <td width="87" align="right">ISBN:</td> <td width="166">
PHP 5 e MySQL 5 e Ajax
PHP 5 & MySQL 5 for Web – www.integrator.com.br/php
<input name="isbn" type="hidden" id="isbn" value="<?php echo $row['isbn']?>" /> </td>
</tr> <tr>
<td align="right">Título:</td> <td>
<input name="titulo" type="text" id="titulo" value="<?php echo $row['titulo']?>" /> </td>
</tr> <tr>
<td align="right">Edição N.º;: </td> <td>
<input name="edicao" type="text" id="edicao" value="<?php echo $row['edicao_num']?>" /> </td>
</tr> <tr>
<td align="right">Publicação:</td> <td>
<input name="publicacao" type="text" id="publicacao" value="<?php echo $row['ano_publicacao']?>" /> </td>
</tr> <tr>
<td align="right" valign="top">Descrição:</td> <td>
<textarea name="descricao" rows="5" id="descricao"> <?php echo $row['descricao']?> </textarea> </td> </tr> <tr> <td colspan="2" align="center">
<input name="bt_atu" type="submit" id="bt_cad" value="Atualizar" /> </td> </tr> </table> </form> <?php }
catch (Exception $e) {
//caso haja uma exceção à mensagem é ecoada na tela echo "<strong>{$e->getMessage( )}</strong>"; }
endif; ?>
PHP 5 e MySQL 5 e Ajax
</body></html>
atu_livros.php
Dois métodos foram criados no começo do código, sendo o primeiro chamado de preenchido( ). O método preenchido( ) foi desenvolvido para receber diversos argumentos, não possuindo um número exato. Se algum desses argumentos passados estiverem vazios, o método retorna FALSE.
O método valor_string( ) verifica se as cotas mágicas estão habilitadas no PHP.INI, através de get_magic_quotes_gpc( ). Caso não estejam, o método utilizará addslashes().
Em seguida, a variável recebe os strings ‘aspas simples’ para que seja possível usar mais adiante na instrução SQL.
A manipulação de exceção ocorre quando você utiliza o bloco try...catch. O bloco try é o responsável por verificar se existem um problema ocorrendo. É nesse ponto que você tem um IF verificando se não estão preenchidos os valores vindos do formulário de atualização. Se não estiverem, uma exceção é disparada em throw new Exception( ).
Caso haja um disparo, imediatamente o código muda para o bloco catch e exibe o valor disparado.
Caso não haja um erro, o código segue, onde é executada a instrução SQL UPDATE, que dessa vez fora chamada com a função sprintf, que captura os strings e os retorna formatados.
Na execução da QUERY, novamente uma verificação é feita para evitar erros, que se houver, dispara também uma EXCEÇÃO. Caso não dispare, uma mensagem é dada ao usuário indicando que os dados foram atualizados com sucesso.
Abaixo da TABELA é feita uma verificação para que seja exibido ou não o FORMULÁRIO. A verificação é feita através de $_SERVER['QUERY_STRING'] e pelo valor da variável $isbn. Se você se lembrar, QUERY_STRING exibe os resultados passados pelo cabeçalho HTTP, usados após o símbolo de consulta ‘?’. Esse é o método usado para o envio do código ISBN do livro para executar a atualização. Um outro método aparecera, chamado de mysql_num_rows( ), capaz de capturar o número de linhas vindos de uma instrução SQL SELECT. O método mysql_affected_rows( ) não foi utilizado porque ele não funciona com a instrução SELECT. Se o resultado for igual a ZERO, quer dizer que não existe o ISBN procurado, fazendo com que seja disparada uma exceção.