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, coloque 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?

Um amigo me indagou, imagine que em determinado período você resolva promover um concurso em seu site, porém na data X o link para inscrição deve ser desativado, pois já expirou o prazo para inscrição. Somente deve ser desativado o link, não a página com as demais informações, como fazer?

Isso é simples de resolver, existem duas formas: criando uma função no arquivo wp-includes/functions.php 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 tenha criado a função, basta direto no editor, entrar com o conteúdo dentro das tags: [vencimento off="2012-05-10"]Aqui entra o conteúdo, com link para inscrição e etc[/vencimento] [mostra on="2012-05-10"]Aqui entra om conteúdo que devera 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:

[code=’php’]
$arquivo = “/caminho/arquivo”;
if (file_exists($arquivo))
echo “Já existe”;
else
echo “Não existe”;
[/code]

2. Obtendo o tamanho de um determinando arquivo:

$file = &amp;quot;/caminho/arquivo&amp;quot;;
$fsize = filesize($file);
echo $fsize;

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

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

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

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

Ou pode ser assim também:

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

4. Verificar se uma determinada URL existe:

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

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 != &amp;quot;.&amp;quot; $file != &amp;quot;..&amp;quot;) {
$numFiles++;
}
}
closedir($handle);
}
echo &amp;quot;$numFiles arquivos neste diretório.\n&amp;quot;;

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) &amp;&amp; ($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 &amp;&amp; ($rd || $ru)) ? " e " : "").$rd.(($rd &amp;&amp; $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) &amp;&amp; ($z>0) &amp;&amp; ($inteiro[0] > 0)) $r .= (($z>1) ? " de " : "").$plural[$t];
		if ($r) $rt = $rt . ((($i > 0) &amp;&amp; ($i < = $fim) &amp;&amp; ($inteiro[0] > 0) &amp;&amp; ($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";


Valeu Thiago!!

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:

[code=”php”]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;
}
}
[/code]

Como usar?

O uso da função é muito simples: Tudo que você precisa fazer é chamar. Os parâmetros são: Ponto A (origem) e Ponto B (destino), basta informar  a Latitude e Longitude.

[code=”php”]//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 Nauticas
“;
[/code]

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

Pra não esquecer: query_posts paginando por categoria (WordPress)

Todo mundo sabe o poder que a tag query_posts do WordPress possui, o exemplo abaixo é utilizado para paginar o resultado (pra usar o plugin wp_page_numbers ou wp_navi), pegando a categoria direto pela URL, no caso, utilizando o archive.php.

< ?php
global $more;
$more = 0;
$numposts = 3;
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
query_posts('showposts='.$numposts.'&paged='.$paged.'&cat='.get_query_var('cat')); 
?>

ou pode-se fazer assim também:

< ?php
global $more;
$more = 0;
$numposts = 3;
$categories = get_the_category(); //pega todas as categorias
//echo 'primeira categoria: ' .$categories[0]->cat_ID; 
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
query_posts('showposts='.$numposts.'&paged='.$paged.'&cat='.$categories[0]->cat_ID); 
?>