Como fazer uma separação a cada 4 resultados de foreach

Esses dias recebi essa pergunta aqui no blog:

“Olá, você poderia me ajudar com essa dúvida em PHP? Preciso que a cada quatro valores listados de um foreach, seja adicionado uma separação. Já consigo buscar todas as informações do BD e exibi-las, porém gostaria dessa divisão a cada 4 resultados”.

Seria algo tipo:

[xxx] [xxx] [xxx] [xxx]

________

[xxx] [xxx] [xxx] [xxx]

Ou seja, uma linha para separar a cada 4 valores.

//Exemplo:
foreach ($links->result() as $value) {
echo $value;
}

Bem isso é bem simples de resolver, basta fazer algo assim:

$contador = 1;
foreach ($links->result() as $value) {
echo $value;

if($contador%4==0){
echo 'SEPARADOR';
} 
$contador++;
}

Fonte: http://php.net/manual/en/control-structures.foreach.php

Como recuperar como checked um campo armazenado como array – PHP

Só dicas simples ultimamente né. Vamos lá:

Imagine que você tenha um formulário HTML com alguns campos checkbox, ou seja, que permitem múltiplos valores.

<form action="#" method="post">
Marque o turno: <br />
<input type="checkbox" name="turno[]" value="1" />Matutino<br />
<input type="checkbox" name="turno[]" value="2" />Vespertino<br />
<input type="checkbox" name="turno[]" value="3" />Noturno<br />
<input type="submit" name="submit" value="enviar" />
</form>

No banco, você terá um campo que irá armazenar as opções selecionadas em formato de array separados por vírgula (1,2,3). A dúvida é, como que você irá recuperar os valores selecionados de forma que ao editar este formulário os respectivos campos checkbox’s venham marcados? Muito simples, basta utilizar as funções implode() e explode(), veja:

Para inserir em formato de array separados por vírgula basta dar um implode():

$turno = implode($_POST['turno'],",");

Ai basta utilizar esta variável ($turno) no seu INSERT.

Na query que irá recuperar os dados, utilizamos explode() para separar os elementos do array:

$turno = explode(",", $row["turno"]);

E na hora de marcar os campos do formulário com os registros recuperados vamos utilizar a função do PHP chamada in_array, com um operador ternário:

<input type="checkbox" name="turno[]" value="1" <?=(in_array('1',$turno))?('checked'):('');?/>/>Matutino<br />
<input type="checkbox" name="turno[]" value="2" <?=(in_array('2',$turno))?('checked'):('');?/>/>Vespertino<br />
<input type="checkbox" name="turno[]" value="3" <?=(in_array('3',$turno))?('checked'):('');?/>/>Noturno<br />

Pronto, dessa forma os valores que vierem da variável $turno que coincidirem com o value do checkbox será marcado como ativo.

Seguindo o mesmo princípio, você pode querer trazer em formato de relatório os valores selecionados, como no exemplo abaixo:

( X ) MATUTINO        (  ) VESPERTINO        ( X ) NOTURNO

É a mesma coisa, basta dar um echo na variável no espaço onde será preenchido o X:

( < ?php echo (in_array('1',$turno))?('X'):('');?> ) MATUTINO ( < ?php echo (in_array('2',$turno))?('X'):('');?> ) VESPERTINO ( < ?php echo (in_array('3',$turno))?('X'):('');?> ) NOTURNO

Fonte: Handling checkbox in a PHP form processor

Tenha seu próprio encurtador de URLs

Este script PHP permite você configurar e manter um serviço de encurtamento de URL tanto em seu site, ou na sua intranet. Basta enviar o código, definir as configurações e detalhes de seu domínio e pronto.

Ele vem com uma área de administração para gerencia, 3 modelos de front-end, registro de usuários, estatísticas,espaço para banners e etc.

Tamanho: 5MB

Opções de download:

Como fazer um Link expirar em um Post ou Página no WordPress?

Imagine que em determinado período, você resolva promover um concurso em seu site e faz a divulgação mediante a uma postagem:

  1. O link para inscrição deve aparecer somente até a data X.
  2. As demais informações da postagem de divulgação dece continuar.

Isso é simples de resolver, existem duas formas: criando uma função no arquivo wp-includes/functions.php (ou no arquivo functions.php do tema, se houver) ou por meio de plugins.

Vamos ver a primeira opção. Edite o arquivo wp-includes/functions.php

// Vencimento //
function vence_conteudo($args = array(), $content = '') {
    extract(shortcode_atts(
        array(
            'off' => 'amanha', // nao funcionara se nao definir uma data real
        ),
        $args
    ));
    if (strtotime($off) > time()) {
        return $content;
    }
    return '';
}

add_shortcode('vencimento', 'vence_conteudo');

// O que mostrar quando o prazo estiver expirado //
function mostra_conteudo($args = array(), $content = '') {
    extract(shortcode_atts(
        array(
            'on' => 'amanha', // nao funcionara se nao definir uma data real
        ),
        $args
    ));
    if (strtotime($on) < time()) {
        return $content;
    }
    return '';
}
add_shortcode('mostra', 'mostra_conteudo');

Uma vez que se tenha criado a função, basta editar a postagem, adicionando as tags:

[vencimento off=”2012-05-10″] Clique aqui para Inscrição [/vencimento]

[mostra on=”2012-05-10″] Aqui entra o conteúdo que deverá aparecer assim que expirar, no exemplo em: 10/05/2012. [/mostra]

Simples não?

Caso queira utilizar um plugin, confira estes:
shortcodes-to-show-or-hide-content
simple-content-expiry/

Espero ter ajudado.

Howto: Como utilizar a base de usuários do JOOMLA 1.5.x para se logar externamente

Howto: Como utilizar a base de usuários do JOOMLA 1.5.x para se logar externamente com PHP.

Sério, você ainda pode precisar disso.

Imagine a seguinte situação:

Você tem um portal Joomla funcionando normalmente e necessita criar um sistema externo que necessita de autenticação, então você se lembra que no Joomla existe uma base de usuários completa e o que precisa fazer é somente utilizar essa base para se logar, maravilha, então confira no script abaixo como fazer isso, não requer prática nem habilidade:

< ?php
session_start();

// Fazer conexão com o banco de dados
$db = mysql_connect("localhost", "usuarioBD", "senhaBD");
mysql_select_db("baseDeDados", $db);

// Pegar nome de usuário e senha do formulário
$usuario = $_POST['usuario'];
$senha   = $_POST['senha'];

// Obter senha cifrada do usuário
$sql = "SELECT name, password FROM jos_users WHERE username='$usuario'";
$resultado = mysql_query($sql);

// Extrair os dados do resultado da query
$pega = mysql_fetch_array($resultado);
$senhaCripto = $pega['password'];

// Separar a senha do sal
if($senhaCripto)
{
$partes = explode( ':', $senhaCripto );
$cripto = $partes[0];
$sal    = $partes[1];

// Criar hash com a senha fornecida com o sal (se houver)
$novoHash = ($sal) ? md5($senha.$sal) : md5($senha);

// USUÁRIO E SENHA VÁLIDOS:
if( $novoHash == $cripto ) {

// Jogando na sessão o nome do usuário, para poder utilizar posteriormente
  $_SESSION['nome'] = $pega["name"];

// Pode-se simplesmente exibir uma mensagem, ou redirecionar para uma página restrita.
  echo "Acesso autorizado";
// redirecionando para a pagina restrita.
  header("location:pagina_restrita.php");

// USUÁRIO EXISTE, MAS A SENHA NÃO BATE:
} else {

// Pode-se exibir uma mensagem.
   echo "Acesso negado. A senha não confere!";

// Ou é dar um alert pro usuário:
   echo "<SCRIPT LANGUAGE='JAVASCRIPT'>";
   echo "alert('Acesso negado, a senha não confere');";
   echo "window.location.replace('index.php');";
   echo "";

}

// USUÁRIO INFORMADO NÃO EXISTE:
} else {

// Exibindo uma mensagem.
echo "Este usuário não está cadastrado";

// Ou alertando o usuário:
   echo "<script LANGUAGE='JAVASCRIPT'>";
   echo "alert('Este usuário não esta cadastrado');";
   echo "window.location.replace('index.php');";
   echo "</script>";
}

// Fechando a conexão
mysql_close($db);
?>

Exibir todas as imagens de uma pasta utilizando PHP

Com este pequeno script é possível exibir todas as imagens de uma determinada pasta. Adicionei uma tabela para ter uma visão de impressão.

< ?php
//Sua pasta
$files = glob("imagens/*.*");

$colCnt=0;
echo '<table border="0" style="width:590px;">';

for ($i=1; $i<count ($files); $i++)
  {
  $colCnt++;
  if ($colCnt==1)
  echo '<tr>';
  echo '<td width="25%" style="font-size:8.5px; font-family:arial">';

  $num = $files[$i];
  echo '<img src="'.$num.'" align="absmiddle" /> ';
  print substr(substr($num,6,100),0,-4);

  echo '</td>';

  if ($colCnt==4)
    {
    echo '';
    $colCnt=0;
    }
  }

echo '';
?>

PHP Code Snippets – Pequenos trechos de códigos

Apenas para não esquecer, segue alguns trechos de código em PHP:

1. Identificar se um arquivo existe no servidor:

$arquivo = "/caminho/arquivo";
if (file_exists($arquivo))
    echo "Já existe";
else
    echo "Não existe";

2. Obtendo o tamanho de um determinando arquivo:

$file = "/caminho/arquivo";
$fsize = filesize($file);
echo $fsize;

E ainda podemos utilizar a função round() e converter para Kb assim:

$file = "/caminho/arquivo";
$fsize = filesize("$file");
print "Tamanho: ".round($fsize / 1024, 1)." KB";

3. Listando o conteúdo de um diretório:

$dir = "/diretorio";
$dirhandle = opendir($dir);
while ($file = readdir($handle) {
        $files = .$file;
    }
    closedir($handle); echo $files;
}

Ou pode ser assim também:

$dir = "/home/admin";
if (is_dir($dir)) {
    if ($dir = opendir($dir)) {
        while ($arquivo = readdir($dir)) {
            if ($arquivo != "."
                $arquivo != "..") {
                echo "$arquivo\n";
            }
        }
        closedir($dir);
    }
}

4. Verificar se uma determinada URL existe:

$url = "http://urlescolhida";
$fp = @fopen($url, "r");
if ($fp == 1) echo "Existe";
else echo "Não existe";
}

5. Contar quantos arquivos existem num determinado diretório

$numFiles = 0;
if ($handle = opendir('.')) { // '.' = diretório atual, alterar para o diretório desejado
    while (false !== ($file = readdir($handle))) {
        if ($file != "."
            $file != "..") {
            $numFiles++;
        }
    }
    closedir($handle);
}
echo "$numFiles arquivos neste diretório.\n";

6. Remover qualquer coisa que vem antes de um determinado elemento em uma string

$myvar = '103-DSC04012.JPG';
echo substr($myvar, strripos($myvar, '-') + strlen('-'));

7. Transformar um valor numérico em extenso.

function extenso($valor = 0, $maiusculas = false) {
    $singular = array("centavo", "real", "mil", "milhão", "bilhão", "trilhão", "quatrilhão");
    $plural = array("centavos", "reais", "mil", "milhões", "bilhões", "trilhões", "quatrilhões");
    $c = array("", "cem", "duzentos", "trezentos", "quatrocentos", "quinhentos", "seiscentos", "setecentos", "oitocentos", "novecentos");
    $d = array("", "dez", "vinte", "trinta", "quarenta", "cinquenta", "sessenta", "setenta", "oitenta", "noventa");
    $d10 = array("dez", "onze", "doze", "treze", "quatorze", "quinze", "dezesseis", "dezesete", "dezoito", "dezenove");
    $u = array("", "um", "dois", "três", "quatro", "cinco", "seis", "sete", "oito", "nove");
    $z = 0;
    $rt = "";
    $valor = number_format($valor, 2, ".", ".");
    $inteiro = explode(".", $valor);
    for ($i = 0; $i < count($inteiro); $i++)
        for ($ii = strlen($inteiro[$i]); $ii & amp; lt; 3; $ii++)
            $inteiro[$i] = "0".$inteiro[$i];
    $fim = count($inteiro) - ($inteiro[count($inteiro) - 1] > 0 ? 1 : 2);
    for ($i = 0; $i < /count><count ($inteiro);$i++) {
        $valor = $inteiro[$i]; $rc = (($valor > 100)
            " ($valor < 200)) ? "
            cento " : $c[$valor[0]];
            $rd = ($valor[1] < 2) ? "" : $d[$valor[1]]; $ru = ($valor > 0) ? (($valor[1] == 1) ? $d10[$valor[2]] : $u[$valor[2]]) : ""; $r = $rc.(($rc " ($rd || $ru)) ? "
                e " : "
                ").$rd.(($rd "
                $ru) ? " e " : "").$ru; $t = count($inteiro) - 1 - $i; $r. = $r ? " ".($valor > 1 ? $plural[$t] : $singular[$t]) : "";
            if ($valor == "000") $z++; elseif($z > 0) $z--;
            if (($t == 1)
                " ($z>0) " ($inteiro[0] > 0)) $r. = (($z > 1) ? " de " : "").$plural[$t];
            if ($r) $rt = $rt.((($i > 0)
                    " ($i < = $fim) " ($inteiro[0] > 0)
                    " ($z < 1)) ? ( ($i < $fim) ? ", " : "
                    e ") : "
                    ") . $r;
                }
                if (!$maiusculas) {
                    return ($rt ? $rt : "zero");
                } else {
                    if ($rt) $rt = ereg_replace(" E ", " e ", ucwords($rt));
                    return (($rt) ? ($rt) : "Zero");
                }
            }
            $valor = 112344; $dim = extenso($valor); $dim = ereg_replace(" E ", " e ", ucwords($dim)); $valor = number_format($valor, 2, ",", "."); echo "R$ $valor
            $dim ";

Fonte:
http://devsnippets.com/article/10-essential-php-code-snippets.html
http://phpsnips.com/

Calculando distância entre dois pontos com PHP

Aqui está uma função muito útil, que permite calcular a distância de um ponto A para um ponto B, utilizando as latitudes e longitudes. A função pode retornar a distância em milhas, quilômetros, ou milhas náuticas, vejamos:

 

function distancia($lat1, $lon1, $lat2, $lon2, $unit) {

    $theta = $lon1– $lon2;
    $dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta));
    $dist = acos($dist);
    $dist = rad2deg($dist);
    $miles = $dist * 60 * 1.1515;
    $unit = strtoupper($unit);

    if ($unit == “K”) {
        return ($miles * 1.609344);
    } else if ($unit == “N”) {
        return ($miles * 0.8684);
    } else {
        return $miles;
    }
}

Como usar?

O uso da função é muito simples: Tudo que você precisa fazer é informar a latitude e longitude do ponto A e B na ordem e no final identificar se o resultado será em milhas, quilômetros ou milhas náuticas:


//Em milhas
echo distancia(32.9697, -96.80322, 29.46786, -98.53506, "m") . "  milhas";

//Em quilômetros
echo distancia(32.9697, -96.80322, 29.46786, -98.53506, "k") . "  Km";

//Milhas Nauticas
echo distancia(32.9697, -96.80322, 29.46786, -98.53506, "n") . "  Milhas Náuticas";

Criando uma aplicação do zero com PHP+OO(DRY)+PDO+AJAX…

Material excelente em forma de série que mostra todo o desenvolvimento de uma Aplicação Web, desde a idéia no papel até a implementação final, utilizando conceitos, técnicas e ferramentas modernas, como:

  • Linguagem: PHP
  • Programação Orientada a Objeto, com o conceito de programação DRY em mente (“Don’t Repeat Yourself”).
  • Implementação de segurança do lado do cliente e do servidor
  • Utilização de PHP Data Objects (PDO), como forma de garantir a segurança do Banco de Dados.
  • Uso de strip_tags (), para evitar que o usuário armazene dados maliciosos no Banco de Dados.
  • Compactação de bibliotecas JavaScripts, para carregamento mais rápido da aplicação.
  • e muito mais…

Com certeza um material que deve ser analisado por todos.

Navegação nos tópicos da série:

Link oficial: WebAppFromScratch
Outro legal: http://www.phpro.org/tutorials/Creating-A-PHP-Application.html

PHP: Cálculos com data

Trabalhar com datas é uma tarefa muito comum, porém as vezes pode se tornar algo complicado se não entendermos bem como fazer. Com algumas pequenas funções podemos manipular, exibir e armazenar datas exatamente como desejamos.

Funções Básicas

Para interagir com datas há três funções básicas em PHP que fazem a maioria do trabalho.

  • time(): retorar a data e hora atual em segundos (a partir de 01 de janeiro de 1970 – chamada de timestamp). Como o resultado será sempre um valor inteiro, pode-se utilizar para somar ou subtrair, bem como armazena-las em banco de dados.
  • date(): retorna a data de acordo com o formato que definimos (mais informações de como formatar datas em PHP: date – Manual). Ou seja, essa função serve para exibir datas em formatos legíveis ao visitantes.
  • strtotime(): converte um data em formato de texto.

Dentre todas as simplificações possíveis, a que mais costuma surpreender é a função strtotime. Para quem já conhece, parece que a mesma não faz mais do que sua obrigação. Mas pra quem ainda faz cálculos com data multiplicando por 86400, chega a parecer algo mágico:

setlocale(LC_ALL, 'portuguese'); // para o resultado sair em português;

echo 'Amanhã: ', strftime('%A', strtotime('tomorrow'));
// Amanhã: Quarta-Feira

echo 'Próxima segunda: ', strftime('%d de %B de %Y', strtotime('next monday’));
// Próxima segunda: 17 de maio de 2009

echo 'Vencimento: ', strftime('%d/%m/%Y', strtotime('+3 months'));
// Vencimento: 11/08/2010

Mais exemplos você mesmo pode ver no manual do PHP ou na página de Date Input Formats do projeto GNU.

Fonte: unijimpe.net