sexta-feira, 27 de maio de 2011

Algumas funções úteis em php

Mesmo depois de utilizar o PHP por anos, nos deparamos com funções e características que nós não conhecemos. Algumas destas podem ser bastante úteis, mas não devidamente aproveitadas. Com isso em mente, eu compilei uma lista com algumas funções extremamente úteis do PHP e recursos que você deve ficar familiarizado.


1- Função sem parâmetros

Você já deve saber que o PHP permite que você defina as funções com parâmetros opcionais. Mas também um método para permitir um número qualquer de parâmetros.Vamos utilizar func_get_args ():


1-funcao_sem_parametros.php:
<?php
// FUNÇAO SEM PARAMETROS
function foo() {

    // retorna um array de todos os parametros passados
    $args = func_get_args();

    foreach ($args as $k => $v) {
        echo "arg".($k+1).": $v\n"."<br />";
    }

}

foo();
/* nao mostra nada */

foo('Olá');
/* mostra
arg1: Olá
*/

foo('Olá', 'mundo', 'mais uma vez');
/* mostra
arg1: Olá
arg2: mundo
arg3: mais uma vez
*/
?>


2-  Usando Glob() para encontrar arquivos

Muitas funções PHP têm nomes longos e descritivos. No entanto, pode ser difícil dizer o que é uma função chamada glob ()  faz a menos que você já esteja familiarizado com esse termo de outro lugar.
Pense nisso como uma versão mais capaz da
função scandir (). Permite que você pesquise arquivos usando padrões:

2-usando_glob.php
<?php
//USANDO GLOB() PARA ENCONTRAR ARQUIVOS
// pega todos os arquivos .php da pasta atual
$arquivos = glob('*.php');

print_r($arquivos);
/* mostra todos os arquivos em um array:
Array
(
    [0] => teste.php
    [1] => teste2.php
    [2] => teste3.php   
)
*/

echo "<br /><br />";

$caminho = array_map('realpath',$arquivos); 

print_r($caminho);
/* mostra todos os caminhos de todos os arquivos em um array:
Array
(
    [0] => C:\wamp\www\teste.php
    [1] => C:\wamp\www\teste2.php
)
*/

?>


3- Informções sobre o uso de memória

Ao observar o uso de memória de seus scripts, você poderá otimizar o seu código melhor.
O PHP tem um gerenciador de memória muito complexo. A quantidade de memória que está sendo usada pelo seu script pode ir para cima e para baixo durante a execução de um script. Para obter o atual uso de memória, podemos usar o memory_get_usage () função, e para obter a maior quantidade de memória usada em qualquer ponto, podemos usar o memory_get_peak_usage () função:



3-uso_de_memoria.php:
<?php
//INFORMAÇÕES SOBRE O USO DE MEMÓRIA
echo "Inicial: ".memory_get_usage()." bytes \n"."<br />";
/* mostra
Inicial: 361400 bytes
*/

// Vamos usar um pouco de memória
for ($i = 0; $i < 100000; $i++) {
    $array []= md5($i);
}

// vamos remover metade do array
for ($i = 0; $i < 100000; $i++) {
    unset($array[$i]);
}

echo "Final: ".memory_get_usage()." bytes \n"."<br />";
/* mostra
Final: 885912 bytes
*/

echo "Pico: ".memory_get_peak_usage()." bytes \n"."<br />";
/* mostra
Pico: 13687072 bytes
*/

?>


4- Um pouco de constantes

O PHP fornece constantes úteis para buscar o número da linha atual (__LINE__), caminho do arquivo (__FILE__), caminho do diretório (__DIR__), nome da função (__FUNCTION__), nome da classe (__CLASS__), nome do método (__METHOD__) e espaço (__NAMESPACE__).

Nós não abordaremos cada uma dessas neste artigo, mas vou mostrar-lhe alguns casos de uso:

4-constantes.php:
<?php
//CONSTANTES
// algum código
// ...

echo "Caminho desse arquivo: ".__FILE__."<br /><br />";

function debugando($mensagem, $linha) {
    echo "Linha $linha: $mensagem\n"."<br /><br />";
}

debugando("mensagem de debug", __LINE__);
/* mostra
Linha 4: mensagem de debug
*/

// mais algum código
// ...
debugando("outra mensagem de debug", __LINE__);
/* mostra
Linha 11: mensagem de debug
*/

?>


5- Gerando IDs únicos


Pode haver situações onde você precisa gerar uma cadeia exclusiva. Muitas pessoas usam a função md5 () para isso, mesmo que ela não seja exatamente para essa finalidade.
realmente uma função do PHP chamada uniqid () que se destina a ser usada para isso.
Você pode notar que, apesar dos resultados únicos, eles possuem os primeiros caracteres semelhantes. Isso ocorre porque a seqüência gerada está relacionada ao tempo do servidor. Isso realmente tem um bom efeito colateral, como todo novo id gerado vem depois em ordem alfabética, para que eles possam ser classificados.
Para reduzir as chances de obter uma segunda via, você pode passar um prefixo, ou o segundo parâmetro para aumento de entropia:

5-gerar_id.php:
<?php
//GERANDO IDs ÚNICOS
// gerar string unica
echo "Gerar string unica: ".md5(time() . mt_rand(1,1000000))."<br /><br />";

// gerar string unica
echo "Gerar string unica: ".uniqid()."<br /><br />";
/* mostra
4bd67c947233e
*/

// com prefixo
echo "Com prefixo: ".uniqid('prefixo_')."<br /><br />";;
/* mostra
foo_4bd67d6cd8b8f
*/

// com mais entropia
echo "Com mais entropia: ".uniqid('',true)."<br /><br />";
/* mostra
4bd67d6cd8b926.12135106
*/

// ambos
echo "Ambos: ".uniqid('prefixooo_',true)."<br /><br />";
/* mostra
bar_4bd67da367b650.43684647
*/
?>

 

6- Comprimindo Strings

Quando se fala de compressão, geralmente pensamos sobre os arquivos, como arquivos ZIP. É possível comprimir longas seqüências em PHP, sem envolver qualquer arquivo desse tipo.
No exemplo a seguir vamos utilizar as
funções gzcompress () e gzuncompress ().
Assim conseguiremos alcançar uma redução de quase 50% do tamanho. Com as
funções gzencode() e gzdecode() também é possível conseguir resultados semelhantes, usando um algoritmo de compressão diferente:

6-comprimindo_string.php:
<?php
// COMPRIMIR STRING
$string =
"Lorem ipsum dolor sit amet, consectetur
adipiscing elit. Nunc ut elit id mi ultricies
adipiscing. Nulla facilisi. Praesent pulvinar,
sapien vel feugiat vestibulum, nulla dui pretium orci,
non ultricies elit lacus quis ante. Lorem ipsum dolor
sit amet, consectetur adipiscing elit. Aliquam
pretium ullamcorper urna quis iaculis. Etiam ac massa
sed turpis tempor luctus. Curabitur sed nibh eu elit
mollis congue. Praesent ipsum diam, consectetur vitae
ornare a, aliquam a nunc. In id magna pellentesque
tellus posuere adipiscing. Sed non mi metus, at lacinia
augue. Sed magna nisi, ornare in mollis in, mollis
sed nunc. Etiam at justo in leo congue mollis.
Nullam in neque eget metus hendrerit scelerisque
eu non enim. Ut malesuada lacus eu nulla bibendum
id euismod urna sodales. ";

$comprimido = gzcompress($string);

echo "Tamanho original : ". strlen($string)."\n"."<br /><br />";
/* mostra
Tamanho original: 794
*/

echo "Tamanho comprimido: ". strlen($comprimido)."\n"."<br /><br />";
/* mostra
Tamanho comprimido: 415
*/

// descomprimindo
$original = gzuncompress($comprimido);

?>


Baixar arquivos do artigo

Esse artigo foi útil para você? Por favor, compartilhe conosco nos comentários. E obrigado pela leitura!
See you later guys!

CRUD COMPETO EM PHP E MYSQL

CRUD COMPETO COM PHP E MYSQL



Em 1º lugar vamos a uma breve descrição de o que é CRUD:

CRUD é o acrônimo ("sigla") da expressão em língua Inglesa Create, Retrieve, Update e Delete, usada para definir quatro operações básicas usadas em bancos de dados.

A abreviação CRUD mapeada para o padrão ISO/SQL:
Create INSERT
Retrieve (Read) SELECT
Update UPDATE
Destroy (Delete) DELETE


As operações CRUD também são relevantes em interfaces para usuários de vários níveis. Por exemplo, em um programa de Catálogo de Endereços, uma entrada de um contato individual pode ser considerada a unidade básica de persistência. As operações mínimas para este tipo de programa são:

Create Criar ou adicionar novas entradas
Retrieve (Read) Ler, recuperar ou ver entradas existentes
Update Atualizar ou editar entradas existentes
Destroy (Delete) Remover entradas existentes

Bom, agora que todos já sabem o conceito de CRUD, vamos colocá-lo em prática.

Em nosso tutorial, vamos usar como exemplo um cadastro de produtos.

Sem mais blá-blá-blá e mãos a obra...


CRIANDO O BANCO DE DADOS


Um script simples para criação do banco 'Crud' com a tabela 'produto' que tem apenas 2 campos: nome e descrição.



CREATE DATABASE IF NOT EXISTS crud;
USE crud;

DROP TABLE IF EXISTS `produto`;
CREATE TABLE `produto` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `nome` varchar(45) NOT NULL,
  `descricao` varchar(45) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1;







ESTABELECENDO CONEXÃO COM O BANCO DE DADOS

Crie uma pasta chamada 'config' dentro de seu projeto , nessa pasta iram os arquivos de configuração do nosso projeto.Nessa mesma pasta criaremos o 'conexao.class.php' para a conexão com o banco de dados.


conexao.class.php:
<?php

class conexao
{

    /*
        Altere as variaveis a seguir caso necessario
    */

    private $db_host = 'localhost'; // servidor
    private $db_user = 'root'; // usuario do banco
    private $db_pass = ''; // senha do usuario do banco
    private $db_name = 'crud'; // nome do banco

    private $con = false;

 
    public function connect() // estabelece conexao
    {
        if(!$this->con)
        {
            $myconn = @mysql_connect($this->db_host,$this->db_user,$this->db_pass);
            if($myconn)
            {
                $seldb = @mysql_select_db($this->db_name,$myconn);
                if($seldb)
                {
                    $this->con = true;
                    return true;
                }
                else
                {
                    return false;
                }
            }
            else
            {
                return false;
            }
        }
        else
        {
            return true;
        }
    }

 
    public function disconnect() // fecha conexao
    {
    if($this->con)
    {
        if(@mysql_close())
        {
                        $this->con = false;
            return true;
        }
        else
        {
            return false;
        }
    }
    }
    
}

?>


Com essa simples classe podemos efetuar conexão com o banco de dados, agora podemos partir para o próximo passo.


PREPARANDO AS OPERAÇÕES BÁSICAS DE ACESSO AO BANCO DE DADOS


Vamos criar mais uma classe que servira para algumas operações de nosso sistema CRUD , o crud.class.php.


crud.class.php:
<?php

/** Classe CRUD - Create, Recovery, Update and Delete
  * @author - Rodolfo Leonardo Medeiros
  * @date - 25/09/2009
  * Arquivo - codigo.class.php
  * @package crud
  */
 
  class crud
  {
    private $sql_ins="";
    private $tabela="";
    private $sql_sel="";

    // Caso pretendamos que esta classe seja herdada por outras, então alguns atrubutos podem ser protected

    /** Método construtor
      * @method __construct
      * @param string $tabela
      * @return $this->tabela
      */            
      public function __construct($tabela) // construtor, nome da tabela como parametro
      {
          $this->tabela = $tabela;
        return $this->tabela;
    }
        
    /** Método inserir
      * @method inserir
      * @param string $campos
      * @param string $valores
      * @example: $campos = "codigo, nome, email" e $valores = "1, 'João Brito', 'joao@joao.net'"
      * @return void
      */        
    public function inserir($campos, $valores) // funçao de inserçao, campos e seus respectivos valores como parametros
    {
        $this->sql_ins = "INSERT INTO " . $this->tabela . " ($campos) VALUES ($valores)";
        if(!$this->ins = mysql_query($this->sql_ins))
        {
            die ("<center>Erro na inclusão " . '<br>Linha: ' . __LINE__ . "<br>" . mysql_error() . "<br>
                <a href='index.php'>Voltar ao Menu</a></center>");
        }else{
            print "<script>location='index.php';</script>";
        }
    }

    public function atualizar($camposvalores, $where = NULL) // funçao de ediçao, campos com seus respectivos valores e o campo id que define a linha a ser editada como parametros
    {
        if ($where)
        {
            $this->sql_upd = "UPDATE  " . $this->tabela . " SET $camposvalores WHERE $where";          
        }else{
            $this->sql_upd = "UPDATE  " . $this->tabela . " SET $camposvalores";
          }
        
        if(!$this->upd = mysql_query($this->sql_upd))
        {
            die ("<center>Erro na atualização " . "<br>Linha: " . __LINE__ . "<br>" .mysql_error() . "<br>
                <a href='index.php'>Voltar ao Menu</a></center>");
        }else{
            print "<center>Registro Atualizado com Sucesso!<br><a href='index.php'>Voltar ao Menu</a></center>";
        }
    }    

    /** Método excluir
      * @method excluir
      * @param string $where
      * @example: $where = " codigo=2 AND nome='João' "
      * @return void
      */        
    public function excluir($where = NULL) // funçao de exclusao, campo que define a linha a ser editada como parametro
    {
        if ($where)
        {
            $this->sql_sel = "SELECT * FROM " . $this->tabela . " WHERE $where";
            $this->sql_del = "DELETE FROM " . $this->tabela . " WHERE $where";
        }else{
            $this->sql_sel = "SELECT * FROM " . $this->tabela;
            $this->sql_del = "DELETE FROM " . $this->tabela;
          }
          $sel=mysql_query($this->sql_sel);
        $regs=mysql_num_rows($sel);
      
      if ($regs > 0){
        if(!$this->del = mysql_query($this->sql_del))
        {
            die ("<center>Erro na exclusão " . '<br>Linha: ' . __LINE__ . "<br>" .mysql_error() ."<br>
                <a href='index.php'>Voltar ao Menu</a></center>" );
        }else{
            print "<center>Registro Excluído com Sucesso!<br><a href='index.php'>Voltar ao Menu</a></center>";
        }
      }else{
            print "<center>Registro Não encontrado!<br><a href='index.php'>Voltar ao Menu</a></center>";
      }
    }    
      
 }        
    
?>




LISTANDO ITENS DA TABELA


Agora vamos listar os cadastros da tabela de maneira simples.


index.php:
<?php
    require_once 'config/conexao.class.php';
    require_once 'config/crud.class.php';

    $con = new conexao(); // instancia classe de conxao
    $con->connect(); // abre conexao com o banco
?>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title></title>
    </head>
    <body>
        <?php
            //apenas testando a conexao
            if($con->connect() == true){
                echo 'Conectou';
            }else{
                echo 'Não conectou';
            }
        ?>
        <a href="formulario.php">
            Novo
        </a>
        <table style="border: 1px solid red;">
            <thead>
                <tr>
                    <th>
                        Nome
                    </th>
                    <th>
                        Descri&ccedil;&atilde;o
                    </th>
                </tr>
            </thead>
            <tbody>
                <?php
                    $consulta = mysql_query("SELECT * FROM produto"); // query que busca todos os dados da tabela PRODUTO
                    while($campo = mysql_fetch_array($consulta)){ // laço de repetiçao que vai trazer todos os resultados da consulta
                ?>
                    <tr>
                        <td>
                            <?php echo $campo['nome']; // mostrando o campo NOME da tabela ?>
                        </td>
                        <td>
                            <?php echo $campo['descricao']; // mostrando o campo DESCRICAO da tabela ?>
                        </td>
                        <td>
                            <a href="formulario.php?id=<?php echo $campo['id']; //pega o campo ID para a ediçao ?>">
                                Editar
                            </a>
                        </td>
                        <td>
                            <a href="excluir.php?id=<?php echo $campo['id'];  //pega o campo ID para a exclusao ?>">
                                Excluir
                            </a>
                        </td>
                    </tr>
                <?php } ?>
            </tbody>
        </table>
    </body>
</html>
<?php $con->disconnect(); // fecha conexao com o banco ?>




FORMULÁRIO PARA CADASTRO E EDIÇÃO


Podemos usar o mesmo formulário para cadastro e edição, apenas com algum código a mais, vale a pena dependendo do caso.


formulario.php:
<?php
    require_once 'config/conexao.class.php';
    require_once 'config/crud.class.php';

    $con = new conexao(); // instancia classe de conxao
    $con->connect(); // abre conexao com o banco
    @$getId = $_GET['id'];  //pega id para ediçao caso exista
    if(@$getId){ //se existir recupera os dados e tras os campos preenchidos
        $consulta = mysql_query("SELECT * FROM produto WHERE id = + $getId");
        $campo = mysql_fetch_array($consulta);
    }
   
    if(isset ($_POST['cadastrar'])){  // caso nao seja passado o id via GET cadastra
        $nome = $_POST['nome'];  //pega o elemento com o pelo NAME
        $descricao = $_POST['descricao']; //pega o elemento com o pelo NAME
        $crud = new crud('produto');  // instancia classe com as operaçoes crud, passando o nome da tabela como parametro
        $crud->inserir("nome,descricao", "'$nome','$descricao'"); // utiliza a funçao INSERIR da classe crud
        header("Location: index.php"); // redireciona para a listagem
    }

    if(isset ($_POST['editar'])){ // caso  seja passado o id via GET edita
        $nome = $_POST['nome']; //pega o elemento com o pelo NAME
        $descricao = $_POST['descricao']; //pega o elemento com o pelo NAME
        $crud = new crud('produto'); // instancia classe com as operaçoes crud, passando o nome da tabela como parametro
        $crud->atualizar("nome='$nome',descricao='$descricao'", "id='$getId'"); // utiliza a funçao ATUALIZAR da classe crud
        header("Location: index.php"); // redireciona para a listagem
    }

?>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title></title>
    </head>
    <body>
        <form action="" method="post"><!--   formulario carrega a si mesmo com o action vazio  -->
           
            <label>Nome:</label>
            <input type="text" name="nome" value="<?php echo @$campo['nome']; // trazendo campo preenchido caso esteja no modo de ediçao ?>" />
            <br />
            <br />
            <label>Descri&ccedil;&atilde;o:</label>
            <input type="text" name="descricao" value="<?php echo @$campo['descricao']; // trazendo campo preenchido caso esteja no modo de ediçao ?>" />
            <br />
            <br />
            <?php
                if(@!$campo['id']){ // se nao passar o id via GET nao está editando, mostra o botao de cadastro
            ?>
                <input type="submit" name="cadastrar" value="Cadastrar" />
            <?php }else{ // se  passar o id via GET  está editando, mostra o botao de ediçao ?>
                <input type="submit" name="editar" value="Editar" />   
            <?php } ?>
        </form>
    </body>
</html>
<?php $con->disconnect(); // fecha conexao com o banco ?
>


EXCLUINDO REGISTRO DA TABELA


Na listagem existe um link para excluir cada registro, esse link leva para o 'excluir.php' que deleta o registro selecionado da tabela


excluir.php:
<?php
    require_once 'config/conexao.class.php';
    require_once 'config/crud.class.php';

    $con = new conexao();  // instancia classe de conxao
    $con->connect(); // abre conexao com o banco

    $crud = new crud('produto'); // instancia classe com as operaçoes crud, passando o nome da tabela como parametro
    $id = $_GET['id']; //pega id para exclusao caso exista
    $crud->excluir("id = $id"); // exclui o registro com o id que foi passado

    $con->disconnect(); // fecha a conexao

    header("Location: index.php"); // redireciona para a listagem
?
>

Baixar arquivos do projeto

Assim finalizamos nosso tutorial CRUD com PHP e MYSQL.Aqui utilizamos orientação a objetos de uma maneira simples e útil.É isso ai galera, em breve volto com mais tutoriais, valeu e até a próxima.

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | cna certification