• Nenhum resultado encontrado

Alterando o cadastro de livros

No documento 035_apostila-completa-de-php5-mysql-e-ajax (páginas 123-128)

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.

No documento 035_apostila-completa-de-php5-mysql-e-ajax (páginas 123-128)

Documentos relacionados