domingo, 29 de março de 2009

PHP Fazer upload com pastas diferentes

Esse post é para fazer um upload seguindo a numeração id do banco de dados de sinistros, ou seja ele cria uma pasta, caso ela não exista, e faz o upload se o nome do arquivo não existir dentro da pasta.

<?php
/* Defina aqui o tamanho máximo do arquivo em bytes: */
if($arquivo_size > 10240000) {
print "<SCRIPT> alert('Seu arquivo não poderá ser maior que 10mb'); window.history.go(-1); </SCRIPT>\n";
exit;
}

/* Defina aqui o diretório destino do upload */
if (!empty($arquivo) and is_file($arquivo)) {
if (!$qw) $xQ = "bd/downloads";
else $xQ='downloads';
chdir("$xQ");
// pega o endereço do diretório
$diretorio = getcwd();
// abre o diretório
$ponteiro = opendir($diretorio);
// monta os vetores com os itens encontrados na pasta
while ($nome_itens = readdir($ponteiro)) {
$itens[] = $nome_itens;
}

// ordena o vetor de itens
sort($itens);
// percorre o vetor para fazer a separacao entre arquivos e pastas
foreach ($itens as $listar) {
// retira "./" e "../" para que retorne apenas pastas e arquivos
if ($listar!="." && $listar!=".."){

// checa se o tipo de arquivo encontrado é uma pasta
if (is_dir($listar)) {
// caso VERDADEIRO adiciona o item à variável de pastas
$pastas[]=$listar;
} else{
// caso FALSO adiciona o item à variável de arquivos
$arquivos[]=$listar;
}
}
}

// lista as pastas se houverem
if ($pastas != "" ) {
foreach($pastas as $listar){
//echo "Pasta:$listar<br>";
if ($listar==$id_sinistro) $vai_pasta=1;
}
}

if ($vai_pasta!=1) {
$pasta = "$id_sinistro";
mkdir ($pasta, 0755);
}

chdir("$id_sinistro");
// pega o endereço do diretório
$diretorio = getcwd();

// abre o diretório
$ponteiro = opendir($diretorio);
// monta os vetores com os itens encontrados na pasta
while ($nome_itens = readdir($ponteiro)) {
$itens[] = $nome_itens;
}

// ordena o vetor de itens
sort($itens);
// percorre o vetor para fazer a separacao entre arquivos e pastas
foreach ($itens as $listar) {
// retira "./" e "../" para que retorne apenas pastas e arquivos
if ($listar!="." && $listar!=".."){

// checa se o tipo de arquivo encontrado é uma pasta
if (is_dir($listar)) {
// caso VERDADEIRO adiciona o item à variável de pastas
$pastas[]=$listar;
} else{
// caso FALSO adiciona o item à variável de arquivos
$arquivos[]=$listar;
}
}
}
// lista os arquivos se houverem
if ($arquivos != "") {
foreach($arquivos as $listar){
//echo "Arquivo:$listar<br>";
if ($listar==$arquivo_name) $vai_arquivo=1;
}
}
if ($vai_arquivo==1) {
print "<h3><center>Arquivo não enviado!</center></h3>";
print "<h4><font color='#FF0000'><center>Já existe esse nome de arquivo favor alterar.</center></font></h4>";
if ($qw) print "<br><a href='javascript:history.go(-1)'>« voltar</a>";
exit;
}

$caminho=$caminho.$arquivo_name;

/* Defina aqui o tipo de arquivo suportado */
if ((eregi(".zip$", $arquivo_name)) || (eregi(".ZIP$", $arquivo_name)) || (eregi(".xls$", $arquivo_name)) ||
(eregi(".xlsx$", $arquivo_name)) || (eregi(".doc$", $arquivo_name)) || (eregi(".docx$", $arquivo_name)) ||
(eregi(".gif$", $arquivo_name)) || (eregi(".jpg$", $arquivo_name))) {
copy($arquivo,$caminho);
//print "<h1><center>Arquivo enviado com sucesso!</center></h1>";
}
else{
print "<h1><center>Arquivo não enviado!</center></h1>";
print "<h2><font color='#FF0000'><center>Caminho ou nome de arquivo Inválido!</center></font></h2>";
exit;
}
}

Ao selecionar mostrar campo oculto

Notar que o campo já esta programado para não aparecer de cara, comando initHide no Javascript.

Comandos para fazer "sumir/aparecer" campo:
<input type="radio" name="quem_refere" value="4" onClick="hide('1'); />Some<br>
<input type="radio" name="quem_refere" value="2" onClick="show('1'); />Aparece

Campo que "some/aparece":
<div id='faq1'>
OLA MUNDO... ou não...
</div>

<script language="Javascript">

var div = "faq" //DEFINE QUAL O NOME DOS DIV'S
var total = 1 //DEFINE O NUMERO DE DIV'S
initHide()

function show(id)
{
document.getElementById(div+id).style.display="block";
}

function hide(id)
{
document.getElementById(div+id).style.display = "none";
}

function initHide(){
for(i=1; i<=total; i++){
document.getElementById(div+i).style.display = "none";
}
}
</script>

Mascara centavos

Temos a função jquery para fazer essa mascara:

Faça o download dos arquivos em http://plentz.github.io/jquery-maskmoney/

Para usar:
<script src="js/jquery-1.6.4.min.js"></script> <-- testei do 1.6.4 para cima
<script src="js/jquery.maskMoney.js" type="text/javascript"></script>

<input type=text name='valor' id='valor' size='10' />
<script type="text/javascript">$("#valor").maskMoney({thousands:'', decimal:'.'});</script>


E temos o abaixo também:

<script type='text/javascript'>
/* Autor: Mario Costa */
function formatar_moeda(campo, separador_milhar, separador_decimal, tecla) {
var sep = 0;
var key = '';
var i = j = 0;
var len = len2 = 0;
var strCheck = '0123456789';
var aux = aux2 = '';
var whichCode = (window.Event) ? tecla.which : tecla.keyCode;

if (whichCode == 13) return true; // Tecla Enter
if (whichCode == 8) return true; // Tecla Delete
key = String.fromCharCode(whichCode); // Pegando o valor digitado
if (strCheck.indexOf(key) == -1) return false; // Valor inválido (não inteiro)
len = campo.value.length;
for(i = 0; i < len; i++) if ((campo.value.charAt(i) != '0') && (campo.value.charAt(i) != separador_decimal)) break; aux = ''; for(; i < len; i++) if (strCheck.indexOf(campo.value.charAt(i))!=-1) aux += campo.value.charAt(i); aux += key; len = aux.length; if (len == 0) campo.value = ''; if (len == 1) campo.value = '0'+ separador_decimal + '0' + aux; if (len == 2) campo.value = '0'+ separador_decimal + aux; if (len > 2) {
aux2 = '';

for (j = 0, i = len - 3; i >= 0; i--) {
if (j == 3) {
aux2 += separador_milhar;
j = 0;
}
aux2 += aux.charAt(i);
j++;
}

campo.value = '';
len2 = aux2.length;
for (i = len2 - 1; i >= 0; i--)
campo.value += aux2.charAt(i);
campo.value += separador_decimal + aux.substr(len - 2, len);
}

return false;
}

</script>

No html usar:

<input type=text name="valor" size=10 maxlength="10" onkeypress="return formatar_moeda(this,'','.',event);">

PHP Hora e data -> BR - SP

Para colocar em PHP a hora atual do Brasil - São Paulo

// para php + antigos --> date_default_timezone_set('Brazil/East');
date_default_timezone_set('America/Sao_Paulo'); // atualizado em 19/08/2013
$data_sistema = date('d/m/Y H:i');

sexta-feira, 27 de março de 2009

xml com php e mysql

Para gera xml a partir do mysql com php:

$arquivo = 'xml/menu.xml';

//ABRE O ARQUIVO(SE NÃO EXISTIR, CRIA)
$ponteiro = fopen($arquivo, "w");
//ESCREVE NO ARQUIVO XML
fwrite($ponteiro, "\n");
fwrite($ponteiro, "");
//SQL
$q = "select chamadaSP,tipo,cd from pacpas where tipo='$tipo' order by chamadaSP";
$res = mysql_query($q);
while ($row = mysql_fetch_array($res)):
$chamada = $row['chamadaSP'];
$tipo = $row['tipo'];
$cd = $row['cd'];
// a linha abaixo e necessaria por causa que no XML não pode ter o simbolo &
$output = str_replace("&", "ecomercial", $chamada);
//MONTA AS TAGS DO XML
$conteudo = "
<menu&rt;
<titulo>$output</titulo>
<linque>pacpas.php?ln=p</linque>
<tipo>$tipo</tipo>
<cd>$cd</cd>
</menu>
";
//ESCREVE NO ARQUIVO
fwrite($ponteiro, $conteudo);
endwhile;//FECHA WHILE
//FECHA A TAG MENU
fwrite($ponteiro, "</principal>");
//FECHA O ARQUIVO
fclose($ponteiro);


Para ler o que foi gravado:

<?php
$doc2 = new DOMDocument();
$doc2->load( "xml/menu.xml" );
$books = $doc2->getElementsByTagName( "menu" );
foreach( $books as $book )
{
$links = $book->getElementsByTagName( "linque" );
$link = $links->item(0)->nodeValue;
$titles = $book->getElementsByTagName( "titulo" );
$title = $titles->item(0)->nodeValue;
$tipos = $book->getElementsByTagName( "tipo" );
$tipo = $tipos->item(0)->nodeValue;
$cds = $book->getElementsByTagName( "cd" );
$cd = $cds->item(0)->nodeValue;
$output = str_replace("ecomercial", "&", $title);
echo "<dd><a href='$link&tipo="$tipo&cd=$cd&ln=$ln'>".utf8_decode($output)."</a>\n ";
}
?>

Contar caracteres limitando a textarea

<textarea name="ocorrencia" cols="70" rows="5"
onKeyUp='ContaTexto(ocorrencia,counter,240);'></textarea>
<input type="text" name="counter" size="3" value="240">
<script>
function ContaTexto(CampoMsg,CampoContador, TamMax) {
if (CampoMsg.value.length > TamMax) CampoMsg.value = CampoMsg.value.substring(0, TamMax);
else CampoContador.value = TamMax - CampoMsg.value.length; }
</script>

MySQL Dar saida na data do

No caso abaixo data e hora, que foram inseridas previamentes e estão no formato aaaa-mm-dd hh:mm


$q_registro = "select id, DATE_FORMAT(data_inicial, '%d/%m/%Y %H:%i') as dataC from nome_da_tabela order by id desc limit 1";
$r_registro = mysql_query($q_registro);
$linha_registro = mysql_fetch_array($r_registro);
$id_sinistro = $linha_registro['id'];
$data_sinistro = $linha_registro['dataC'];

Bloqueio de teclas Firefox, IE e Chrome

Testado nas versões IE 6, IE 7, FF 3.x e Chrome 1.x

A programação abaixo bloqueia a tecla ' --> aspas simples --> codigo 192

//firefox e chrome
if (navigator.appName.indexOf('Internet Explorer')<0) {
window.onkeydown=function(event){
if (event.keyCode==192) {event.preventDefault();}
}
}
else {
// IE
document.onkeydown=function(event) {
if (window.event.keyCode==192) {
alert("Favor não utilizar\naspas simples ou duplas");
window.event.keyCode=0; window.event.returnValue=false;
}
}
}