CRUD em PHP

As vezes nos perguntamos, “Porque utilizar o CRUD em PHP e como utilizar?”, nos deparamos com respostas as complexas demais ou muito simples.

Mas porque não utilizar POO com PHP? Porque não utilizar um padrão? Porque não seguir o manual php?

Até hoje não utilizei nenhum framework em PHP, zend, cake, etc… Não, não sou conservador, se em algum momento necessitar realizar bom uso desses frameworks certamente irei utilizar. Hoje dou muito foco a utilização do manual PHP www.php.net e é nele que nosso gerador de código está sendo baseado.

Seguindo alguns padrões de projeto utilizamos o BE (ou VO) e o DAO, além disso utilizamos o Singleton, isso mesmo em PHP podemos utilizar o Singleton, para quem não conhece, sugiro que realize esse dever de casa.

Como estamos utilizando o Business Entity ou Value Object em nosso projeto?
– Basicamente utilizamos para realizar o mapeamento de nosso banco de dados, teremos mapeado neles as nossas colunas e tabelas de nosso banco de dados, exemplo: nossa tabela usuario, seria o nosso UsuarioBE e nossos campos o que seria? Basicamente seriam nossos atributos e propriedades desses atributos. Exemplo:

class UsuarioBE{

private $idUsuario;

private $nomeUsuario;

 

public setIdUsuario($idUsuario){

$this->idUsuario = $idUsuario;

}

public getIdUsuario(){

return $this->idUsuario;

}

}

 

Nosso DAO, estariam os nossos CRUD´s básico, seriam Inserir, Excluir, Obter e ObterTodos, nesse caso acredito que não deva entrar em tantos detalhes, todos sabem o que representa isso, correto?

A nossa próxima versão de nosso projeto teremos também o BO (Business Object), onde deveremos implementar todas as nossas regras de negócio, ou seja, nossa interface irá chamar sempre o nosso BO, hoje nossa interface está chamando direto nosso DAO, não é correto, tão pouco seguro ou legível.

Vamos melhorando nosso projeto até termos todos os padrões devidamente implementados.

Quem quiser sugerir algo, basta entrar em contato e vamos melhorando nossa aplicação.

<span class="entry-utility-prep entry-utility-prep-cat-links">Posted in</span> MySQL, PHP | <span class="entry-utility-prep entry-utility-prep-tag-links">Tagged</span> , , , , , | Leave a comment

Gerador de Código PHP – CRUD

Com a evolução da linguagem, o CTASoftware decidiu lançar um produto que de alguma forma ajude no desenvolvimento PHP.

Com o conceito de Orientação a Objetos decidimos criar o gerador de código CRUD.

O que ele irá gerar?

  • BE ou VO – Value Object
  • DAO – Data Access Object

Como poderá ajudar ao desenvolvedor?

Instalando a aplicação o desenvolvedor poderá passar as informações do seu banco de dados MySQL e ele irá gerar o BE ou o DAO em uma pasta especifica.

Benefícios:

  1. Evitar ataques SQL Injection com a utilização do prepared statement;
  2. Código mais legível;
  3. Utilização do conceito OO;

Ainda estamos na versão inicial 1.0.1.0, provavelmente teremos várias evoluções a realizar no sistema.

Aguardamos sugestões de melhorias.

Download em Gerador de Código PHP

<span class="entry-utility-prep entry-utility-prep-cat-links">Posted in</span> PHP | <span class="entry-utility-prep entry-utility-prep-tag-links">Tagged</span> , , | 3 Comments

Lendo um Feed RSS em PHP

Surgiu uma necessidade de ler um feed de notícias em um site PHP. A princípio achei que teria dificuldades em PHP para realizar essa funcionalidade, mas para a minha felicidade graças ao PHP 5 e o SimpleXML foi tudo muito mais simples que imaginava.

< ?php
$feed = file_get_contents(‘http://www.rootsbrasil.com.br/rss.php’);
$rss = new SimpleXmlElement($feed);

foreach($rss->channel->item as $noticia) {
echo ‘<p><a href=”‘ . $noticia->link . ‘” title=”‘ . $noticia->title . ‘”>’ . $noticia->title . ‘</a></p>’;
}
?>

 

No código a cima pego todo conteúdo do feed de notícias do site rootsbrasil faço um foreach percorrendo todos os <item> dentro do <channel> que representa cada notícia de um rss.

Em nosso loop temos a variável $noticia que representa um objeto que contem os dados de cada <item> do RSS que pode ser title, description, link, etc.

 

Ainda tem dificuldades em ler RSS com PHP 5? =]

<span class="entry-utility-prep entry-utility-prep-cat-links">Posted in</span> PHP | <span class="entry-utility-prep entry-utility-prep-tag-links">Tagged</span> | Leave a comment

Remover Último Caractere PHP

As vezes precisamos concactenar strings em PHP separando por vírgulas ou outros caracteres, o engraçado é que sempre sobra um valor no final ao qual queremos remove, dentre outras situações que precisamos remover um valor específico de nossa string antes de exibir para o usuário.

 

Vamos lá…

$resultado = substr($valor,0,-1);

O que estamos fazendo? Removemos o último caractere da variável $valor, se quisermos remover uma quantidade maior, basta alterarmos o “-1” para o total que queremos.

Fácil fácil =]

<span class="entry-utility-prep entry-utility-prep-cat-links">Posted in</span> PHP | <span class="entry-utility-prep entry-utility-prep-tag-links">Tagged</span> | Leave a comment

Comando MySQL para converter timestamp em datetime e vice-versa

Essa é uma dúvida de muitos usuários do MySQL. Sempre esquecemos desse comando fácil, prático e pouco utilizado.

Converter unix timestamp em datetime (from_unixtime):
SELECT from_unixtime(‘1349391600’) field_datetime ;

Converter datetime em unix timestamp (unix_timestamp):
SELECT unix_timestamp(“2010-06-12 17:10:00”);

<span class="entry-utility-prep entry-utility-prep-cat-links">Posted in</span> MySQL | <span class="entry-utility-prep entry-utility-prep-tag-links">Tagged</span> | Leave a comment

Concatenar String Crystal Reports

Um post bem rápido de uma informação bem simples que as vezes esquecemos.

Como concatenar string no Crystal Reports? Simples e prático.

String-ou-variavel & string-ou-variavel

Dessa maneira estaremos contatenando

string contatenado = string1 & string2;

resultado: string1string2;

Como disse, simples e prático =]

<span class="entry-utility-prep entry-utility-prep-cat-links">Posted in</span> .NET | Leave a comment

Como Verificar o tipo do objeto em C#

Este é um POST um tanto simples, mas não tão trivial para os programadores.

Melhor dizendo e se você recebe um objeto o qual você não sabe o tipo? Ou se você estiver consumindo um serviço (WebService, WCF, etc…), mas e tiver em sua especificação que o tipo do objeto pode ser mudado? Pois bem, segue uma boa referência.

if(objeto.GetType() == typeof(String))

{

//Verifique se a variável é do tipo string e faça….

}

 

Se você tiver uma abstração você pode também utilizar esse mesmo conceito para verificar se DBNull exemplo…

if(objeto.GetType() == typeof(System.DBNull))

{

//Verifique se a variável é do tipo string e faça….

}

 

Para quem quer tratar de abstração de banco recomendo também uma leitura sobre PropertyInfo

 

<span class="entry-utility-prep entry-utility-prep-cat-links">Posted in</span> .NET | <span class="entry-utility-prep entry-utility-prep-tag-links">Tagged</span> , | Leave a comment

Classe para exportar GridView para Excel

Essa semana tive que exportar os dados de uma GridView para uma planilha Excel, bom… sabia que não era algo muito complicado, mas também nunca tinha feito, sendo assim realizei uma busca no grande mestre Google e encontrei uma classe que me atendeu muito bem. Fácil e descomplicado.

using

using System;

using System.Data;

using System.Configuration;

using System.IO;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

namespace SGM.CTA.Web.UI

{

publicclassGridViewExportUtil

{

///<summary>

/// Realiza a exportao de grid para Excell

///</summary>

///<param name=”fileName”>Nome do Arquivo</param>

///<param name=”gv”>GridView preenchida com os dados necessrios</param>

publicstaticvoid Export(string fileName, GridView gv)

{

HttpContext.Current.Response.Clear();

HttpContext.Current.Response.AddHeader(

“content-disposition”, string.Format(“attachment; filename={0}”, fileName));

HttpContext.Current.Response.ContentType =

“application/ms-excel”;

using (StringWriter sw = newStringWriter())

{

using (HtmlTextWriter htw = new HtmlTextWriter(sw))

{

//  Create a form to contain the grid

Table table =

new Table();

//  add the header row to the table

if (gv.HeaderRow != null)

{

//adiciona a cor

gv.HeaderRow.BackColor = System.Drawing.Color.AliceBlue;

//Prepara informao header

GridViewExportUtil.PrepareControlForExport(gv.HeaderRow);

table.Rows.Add(gv.HeaderRow);

}

//  add each of the data rows to the table

foreach (GridViewRow row in gv.Rows)

{

GridViewExportUtil.PrepareControlForExport(row);

table.Rows.Add(row);

}

//  add the footer row to the table

if (gv.FooterRow != null)

{

GridViewExportUtil.PrepareControlForExport(gv.FooterRow);

table.Rows.Add(gv.FooterRow);

}

//  render the table into the htmlwriter

table.RenderControl(htw);

//  render the htmlwriter into the response

HttpContext.Current.Response.Write(sw.ToString());

HttpContext.Current.Response.End();

}

}

}

///<summary>

/// Replace any of the contained controls with literals

///</summary>

///<param name=”control”></param>

privatestaticvoid PrepareControlForExport(Control control)

{

for (int i = 0; i < control.Controls.Count; i++)

{

Control current = control.Controls[i];

if (current is LinkButton)

{

control.Controls.Remove(current);

control.Controls.AddAt(i,

new LiteralControl((current as LinkButton).Text));

}

elseif (current is ImageButton)

{

control.Controls.Remove(current);

control.Controls.AddAt(i,

new LiteralControl((current as ImageButton).AlternateText));

}

elseif (current is HyperLink)

{

control.Controls.Remove(current);

control.Controls.AddAt(i,

new LiteralControl((current as HyperLink).Text));

}

elseif (current is DropDownList)

{

control.Controls.Remove(current);

control.Controls.AddAt(i,

new LiteralControl((current as DropDownList).SelectedItem.Text));

}

elseif (current is CheckBox)

{

control.Controls.Remove(current);

control.Controls.AddAt(i,

new LiteralControl((current as CheckBox).Checked ? “True” : “False”));

}

if (current.HasControls())

{

GridViewExportUtil.PrepareControlForExport(current);

}

}

}

}

}

 

Para utilizar no seu evento do botão você pode adicionar

GridViewExportUtil.Export(“Usuarios.xls”, this.nome_da_gridview);

 

Dúvidas, entrem em contato

PS: Dificil postar um código aqui no WordPress, ficou um tanto confuso, mas nada dificil de entender!

 

<span class="entry-utility-prep entry-utility-prep-cat-links">Posted in</span> .NET | <span class="entry-utility-prep entry-utility-prep-tag-links">Tagged</span> , | Leave a comment

Como ativar o “Salvar e Sair” abas no Firefox

À partir do Firefox 4 o navegador da Mozilla deixou de exibir uma função interessante que era usada por alguns usuários: quando tentávamos fechar várias abas de uma vez o navegador exibia a possibilidade de “Salvar e Sair”.

Felizmente o salvamento de abas no Firefox não foi removido, apenas desativado por padrão. Para “devolver” tal função ao navegador digite na barra de endereços about:config e dê ENTER.

Clique em “Serei cuidadoso, prometo!” e em localizar digite browser.showQuitWarning

Clique com o botão direito do mouse sobre o arquivo encontrado, selecione “Inverter valor” e pronto.

Logo após fechar a página de configuração a modificação já entra em vigor.

<span class="entry-utility-prep entry-utility-prep-cat-links">Posted in</span> Sem categoria | <span class="entry-utility-prep entry-utility-prep-tag-links">Tagged</span> | Leave a comment

WebService de CEP dos Correios PHP e JQuery

Necessário download do JQuery no link http://code.google.com/p/jqueryjs/downloads/detail?name=jquery-1.2.6.js&can=2&q=

 

<html>
<head>
<title>WebService CEP</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<!-- Insere o jquery -->
<script type="text/javascript" src="jquery-1.2.6.js"></script>

<script type="text/javascript" >

    $(document).ready(function(){
                //Preenche os campos na a&#231;&#227;o "Blur" (mudar de campo)
                $("#cep").blur(function(){
                        $("#rua").val("...")
                $("#bairro").val("...")
            $("#cidade").val("...")
                $("#uf").val("...")

            // seta a variavel requisitada no campo cep
        consulta = $("#cep").val()

                //Realiza a consulta
                /*Realiza a consulta atrav&#233;s do toolsweb passando o cep como parametro
                  e informando que vamos consultar no tipo javascript
                */
                $.getScript("http://www.ctasoftware.com.br/webservice/clienteWebService.php?cep="+consulta+"&formato=javascript", function(){

                        //unescape - Decodifica uma string codificada com o m&#233;todo escape.
                        rua=unescape(resultadoCEP.logradouro)
                        bairro=unescape(resultadoCEP.bairro)
                        cidade=unescape(resultadoCEP.cidade)
                        uf=unescape(resultadoCEP.uf)

                        // preenche os campos
                        $("#rua").val(rua)
                        $("#bairro").val(bairro)
                        $("#cidade").val(cidade)
                        $("#uf").val(uf)

                        });
                });
        });

</script>

</head>

<body>

  <form id="form1" name="form1" method="get" action="">
    <table width="100%" border="0">
      <tr>
        <td>CEP:</td>
        <td><input name="cep" type="text" id="cep" value="" size="15" maxlength="8" /></td>
      </tr>
      <tr>
        <td>RUA:</td>
        <td><input name="rua" type="text" id="rua" size="60" /></td>
      </tr>
      <tr>
        <td>BAIRRO:</td>
        <td><input name="bairro" type="text" id="bairro" size="60" /></td>
      </tr>
      <tr>
        <td>CIDADE:</td>
        <td><input name="cidade" type="text" id="cidade" size="60" /></td>
      </tr>
      <tr>
        <td>ESTADO:</td>
        <td><input name="uf" type="text" id="uf" size="2" /></td>
      </tr>
    </table>
    </form>
</body>
</html>
<span class="entry-utility-prep entry-utility-prep-cat-links">Posted in</span> PHP | <span class="entry-utility-prep entry-utility-prep-tag-links">Tagged</span> | 2 Comments