Como descompactar arquivo zipado no Dreamhost

PHP View Comments Marcelo Korjenioski

Faz muito tempo que tenho pro­blema com o Dre­amhost para des­com­pac­tar arqui­vos. Já que o gen­re­ci­a­dor de arqui­vos da Dre­amhost não fun­ci­ona. Ten­tei usar SSH e dar coman­dos mas
tam­bem não con­se­guir fazer ao meu gosto.
Depois de muito pen­sar veio uma solu­ção sim­ples.
Crie um arquivo cha­mado unzip.php e colo­que o con­teudo tro­cando o nome do arquivo.zip para o nome do seu arquivo.zip.


<? exec("unzip arquivo.zip"); ?>

Depois basta subir unzip.php no mesmo dire­to­rio do arquivo zipado e exe­cu­tar ele pela url www.dominio.com/unzip.php.
Só feli­ci­dade agora :)

Tags: , , , , , ,

Adicionar HTML no ZEND Form de maneira rapida e limpa

HTML, PHP, Zend Framework View Comments Marcelo Korjenioski

Criei uma solu­ção para adi­ci­o­nar HTML no form do Zend é sim­ples e efi­ci­ente
Basta criar um classe no Library com o nome Htmlform.php e adi­ci­o­nar o código

<?php
class Htmlform extends Zend_Form_Element_Xhtml {
public $helper = 'formNote';
}
?>

Agora no For­mu­lá­rio você irá cha­mar ela usando.

$html = new Htmlform('nome_do_elemento');
$html->setValue('<strong>teste</strong>');
$this->addElement($html);

Caso tenha alguma duvida deixe um comen­tá­rio que terei pra­zer em aju­dar.
Comen­tá­rios são bem vin­dos assim posso melho­rar a qua­li­dade dos tuto­ri­ais aqui apresentados.

Tags: , , ,

Sistema e manual para Calcular Frete SEDEX, e-SEDEX e PAC dos Correios (versão 1.1)

Ferramentas, Javascript, JQuery, PHP, XML View Comments Marcelo Korjenioski

Desde semana pas­sada o antigo web­ser­vice dos cor­reios parou de fun­ci­o­nar com PAC.
Foi feita a cor­re­ção do código e agora o PAC esta fun­ci­o­nando novamente.

Sis­tema para Cal­cu­lar Frete 1.1

Docu­men­ta­ção para uti­li­zar o web­ser­vice dos Cor­reios para efe­tuar o cal­culo de forma personalizada.

SCPP_Manual_Implementacao_Calculo_Remoto_de_Precos_e_Prazos

Abaixo segue o código para mani­pu­lar os dados do web­ser­vice usando o PHP.

Segue o exem­plo do código abaixo funcionando.

<?php
/**
* Faz consulta no webservice dos correios e gera array dos valores.
* @copyright  Phaneronsoft
* @author Marcelo Korjenioski - faleconosco@phaneronsoft.com
* @see http://www.phaneronsoft.com
* @filesource correios.php
* @version 1.0
*/

// PESO: Peso total do pacote em Quilos, caso seja menos de 1Kg, ex.: 300g, coloque 0.300
define('PESO',0.300);
// COMPRIMENTO: comprimento do volume em centímetros - somente número de 16 a 60
define('COMPRIMENTO',30);
// ALTURA: altura do volume em centímetros - somente número de 2 a 60
define('ALTURA',15);
// LARGURA: largura do volume em centimetros - somente número de 5 a 60
define('LARGURA',20);
// CODIGO_SERVICO: É possivel fazer mais de uma consulta ao mesmo tempo, basta separar os códigos por virgula.
// Neste caso PAC 41106 e SEDEX 40010
define('CODIGO_SERVICO','41106,40010');
// CEP_ORIGEM: seu CEP com 8 dígitos - somente números
define('CEP_ORIGEM','81010210');
// CEP_DESTINO: CEP do seu cliente com 8 dígitos - somente números
define('CEP_DESTINO','60245965');

// Crio um objeto para manipular o XML.
$doc = new DomDocument;
// Carrega o arquivo XML com um arquivo DOMDocument
$doc->Load("http://shopping.correios.com.br/wbm/shopping/script/CalcPrecoPrazo.aspx?StrRetorno=xml&amp;nCdServico=" . CODIGO_SERVICO . "&amp;nVlPeso=" . PESO . "&amp;sCepOrigem=" . CEP_ORIGEM . "&amp;sCepDestino=" . CEP_DESTINO . "&amp;nCdFormato=1&amp;nVlComprimento=" . COMPRIMENTO . "&amp;nVlAltura=" . ALTURA . "&amp;nVlLargura=" . LARGURA);
// Defino o nome do elemento pai (root).
$root = $doc->getElementsByTagName('cServico');

// Carrega o arquivo XML com um arquivo DOMDocument
$correios = "http://shopping.correios.com.br/wbm/shopping/script/CalcPrecoPrazo.aspx?StrRetorno=xml&amp;nCdServico=" . CODIGO_SERVICO . "&amp;nVlPeso=" . PESO . "&amp;sCepOrigem=" . CEP_ORIGEM . "&amp;sCepDestino=" . CEP_DESTINO . "&amp;nCdFormato=1&amp;nVlComprimento=" . COMPRIMENTO . "&amp;nVlAltura=" . ALTURA . "&amp;nVlLargura=" . LARGURA;
// Defino o nome do elemento pai (root).
$root = $doc->getElementsByTagName('cServico');

// Defino o nome dos elementos filhos no arquivo XML que eu desejo.
$children = array('Valor','PrazoEntrega');

// Faço um loop para pegar todos os elementos pai (root) encontrados.
$valor = array();
for ($i=0; $i < $root->length; $i++) {
// Pega o valor do atributo do elemento pai  (root).
    $id =  $root->item($i)->getElementsByTagName('Codigo')->item(0)->nodeValue;

// Busca por elementos filhos (child) definidos no array
    foreach ($children as $child) {
        $valor[$id][$child] = $root->item($i)->getElementsByTagName($child)->item(0)->nodeValue;
    }
}
echo '<pre>';
var_dump($valor);

Caso tenha alguma duvida deixe um comen­tá­rio que terei pra­zer em aju­dar.
Comen­tá­rios são bem vin­dos assim posso melho­rar a qua­li­dade dos tuto­ri­ais aqui apresentados.

Tags: , , , , , ,

Como efetuar a instalação do LiveZilla usando MySQL

Ferramentas, MySQL, PHP View Comments Marcelo Korjenioski

Assim como hoje não é mais neces­sá­rio você desen­vol­ver um Blog por causa do Word­Press acre­dito que criar um Chat de suporte para seu site tam­bém esta dei­xando de ser gra­ças ao LiveZilla.

Neste tuto­rial vou mos­trar como ins­ta­lar o Live­Zilla usando MySQL, PHP e WinXP.
O pro­cesso é rápido é vai dei­xar seu chefe e cli­ente con­ten­tes.
O pri­meiro passo é bai­xar o Live­Zilla aqui (http://livehelp.livezilla.net/downloads/en/).
Tenha o  MySql e PHP ins­ta­lado reco­mendo usar o Wamp para efe­tuar o teste (http://www.wampserver.com/en/).

Para ins­ta­lar não tem segredo é next, next finish.
Depois de ins­ta­lar ele vai criar dois ata­lhos na área de tra­ba­lho o Live­Zilla Cli­ent e o Live­Zilla Ser­ver Admin.

Vamos abrir o Live­Zilla Ser­ver Admin para con­fi­gu­rar nosso Chat.
Sele­ci­one “Cre­ate new Live­Zilla Ser­ver” e cli­que no botão Next.

LiveZilla Server Admin

Vai sur­gir uma tela para você criar uma conta Admin no sis­tema.
Pre­en­cha os cam­pos como no exem­plo e cli­que no botão Next.

criar_admin

Na pró­xima tela mos­tra um for­mu­lá­rio para criar o pri­meiro grupo de suporte para o Chat. Depois é pos­sí­vel criar mais gru­pos de suporte.
Pre­en­cha os cam­pos como no exem­plo e cli­que no botão Next.

criar_grupo_suporte

Agora che­gou a hora de gerar os arquivo PHP do Chat.
Você tem a opção de enviar via FTP ou extrair local­mente.
Eu no exem­plo uso o Wamp então enviei direto para meu dir www/livezilla.
Esco­lha sua opção e cli­que em Next.

exportar_arquivos_chat

Apos enviar o arquivo surge a tela para tes­tar a ins­ta­la­ção do Live­Zilla.
Basta infor­mar o nome da cone­xão com o ser­ver e sua URL.
Cli­que no botão Ser­ver Test se esti­ver ok

testar_chat

Agora cli­que no botão test e digite o nome de usuá­rio e senha que foi cri­ado para o Admin e cli­que no botão Ok para ini­ciar o teste.

server_test

Se o teste ocor­reu com sucesso cli­que no botão Ser­ver­page e você verá esta pagina.

pagina_livezilla

Feche a janela de Test e cli­que em Next para con­fi­gu­rar o MySQL.

Pre­en­cha os cam­pos como no exem­plo e cli­que no botão Cre­ate Tables.
Caso tenha algum ao criar as tabe­las cli­que no link Show SQL Dump e exe­cute direto no seu BD.

data_management

Se a cone­xão esti­ver cor­reta cli­que em Next e para fina­li­zar a configuração.

wizard_completd

Agora vamos cli­car no ata­lho Live­Zilla Cli­ent para ini­ciar o aten­di­mento do Chat.
Entre com o nome de usuá­rio e senha cri­a­dos para o Admin e seu Chat já esta funcionando.

client_login

Abra o nave­ga­dor e digite a URL do ser Live­Zilla no meu caso http://localhost/livezilla/
Cli­que no link Start Demo Chat.
Pre­en­cha os cam­pos como no exem­plo e cli­que em ini­ciar Chat.

usario_login_chat

Agora no Live­Zilla Cli­ent vai sur­gir uma soli­ci­ta­ção para ini­ciar o Chat.
Cli­que em Accept Request e iniciar.

usario_login_chat_request

A ins­ta­la­ção esta feita agora basta explo­rar o Live­Zilla pois exis­tem mui­tas opções para faci­li­tar o tra­ba­lho do pes­soal do suporte.

Em um post futuro irei comen­tar estas fun­ções.
Caso tenha alguma duvida ou suges­tão deixe um comen­tá­rio que terei pra­zer em aju­dar.
Comen­tá­rios são bem vin­dos assim posso melho­rar a qua­li­dade dos tuto­ri­ais aqui apre­sen­ta­dos.
É isso pes­soal uma ótimo final de semana e até o pró­ximo post.

Tags: , , ,

Sistema para rastrear entregas nos Correios.

PHP View Comments Marcelo Korjenioski

Olá pes­soal depois de um tempo sem pos­tar sur­giu uma neces­si­dade de ras­trear minhas enco­men­das nos  Correios.

Como não gosto de ficar aper­tando F5 no site dos Cor­reios que vive com pro­ble­mas resolvi fazer a con­sulta via Ajax. O codigo é sim­ples e apro­vei­tei a ideia do sis­tema para cal­cu­lar frete.

Segue exem­plo fun­ci­o­nando.

</p>
<?php
if($_POST) {
header("Content-Type: text/html; charset=ISO-8859-1");
$p_cod_lis = $_POST['P_COD_LIS'];
if($p_cod_lis == '') {
echo '<center>Código não informado</center>';
}
$url = "http://websro.correios.com.br/sro_bin/txect01$.Inexistente?P_LINGUA=001&P_TIPO=002&P_COD_LIS=$p_cod_lis";

$conecurl = @fopen("$url","r") or die ('<center>erro na conexão</center>');
while(!feof($conecurl)) {
$lin .= fgets($conecurl,4096);
}
fclose($conecurl);

$lin = strtolower($lin);

$rest = substr($lin,0);
$nprimetable = strpos($rest,'<table ');
$fechatable = strpos($rest,'<hr ');
$quantopula = $fechatable - $nprimetable ;
$conteudo = substr($lin, $nprimetable ,$quantopula);

function get_anchor($html)
{
$er = "/<td.*?>.*?<\/td>/";
preg_match_all($er,$html,$links);
$link = $links[0];
return $link;
}

function get_label($url)
{
$label = str_replace("</td>","",preg_replace("/^<td.*?>/","",$url));
return $label;
}

echo $conteudo;

} else {
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<link href="http://demo.phaneronsoft.com/img/favicon.ico" rel="shortcut icon" type="image/x-icon" />
<title>Sistema para rastrear entregas no correio. | Phaneronsoft</title>
<style type="text/css">
* {
font-family:"Trebuchet MS","Lucida Grande",Verdana,Tahoma,Helvetica,Arial,sans-serif;
font-size:12px;
font-style:normal;
font-variant:normal;
font-weight:normal;
line-height:normal;
}

body {
background:#FFFFFF none repeat scroll 0 0;
height:100%;
margin:0;
margin-top:20px;
width:100%;
}

div#wrapper {
margin:auto;
position:relative;
width:390px;
z-index:0;
}

.select {
text-transform:uppercase;
width:99%;
border:1px solid #B6B6B6;
display:block;
}

.formSearch fieldset {
border:1px solid #CCCCCC;
margin:0;
padding:0 10px;
}

label {
display:block;
/*float:left;*/
margin-right:4px;
padding-bottom:5px !important;
}

legend {
color:#1E398D;
font-family:"Legacy Sans ITC TT Bold","Trebuchet MS","Lucida Grande",Verdana,Tahoma,Helvetica,Arial,sans-serif;
font-size:1.5em;
padding:10px 5px;
}

.button {
background:#F5EED3;
border:1px solid #CCCCCC;
color:#666666;
cursor:pointer;
font-size:12px;
font-weight:bold;
letter-spacing:1px;
margin:10px 0 0;
overflow:visible;
text-transform:uppercase;
width:150px;
}

.formMain .inline {
margin:15px 0 0 !important;
}

.text,  .select,  .textarea, .password {
border:1px solid #B6B6B6;
display:block;
text-transform:uppercase;
}

fieldset span.nameField {
color:#666666;
text-transform:uppercase;
}

h3 {
border-bottom:1px solid #F58220;
margin:0;
padding:0;
}

h3 span {
-x-system-font:none;
color:#1E398D;
font-family:"Legacy Sans ITC TT Bold","Trebuchet MS","Lucida Grande",Verdana,Tahoma,Helvetica,Arial,sans-serif;
font-size:1.5em;
font-style:normal;
font-variant:normal;
font-weight:bold;
line-height:normal;
}

#value {
-x-system-font:none;
font-family:"Legacy Sans ITC TT Bold","Trebuchet MS","Lucida Grande",Verdana,Tahoma,Helvetica,Arial,sans-serif;
font-size:1.5em;
font-style:normal;
font-variant:normal;
font-weight:bold;
line-height:normal;
text-transform:capitalize;
}

#value table {
margin:0;
padding:0;
border:0;
}

#rastrear {
padding-top:30px;
}

#loading {
display:none;
color:#9B0000;
font-family:"Legacy Sans ITC TT Bold","Trebuchet MS","Lucida Grande",Verdana,Tahoma,Helvetica,Arial,sans-serif;
font-size:1.5em;
font-style:normal;
font-variant:normal;
font-weight:bold;
line-height:normal;
text-transform:capitalize;
}

</style>
</head>
<body>

<div id="wrapper">
<h3>
<span>Rastrear pedido</span>
</h3>

<form method="post" action="" name="rastreamentohome" onsubmit="submitForm(this); return false;">
<fieldset>
<legend>Identificador do objeto:</legend>
<label for="P_COD_LIS">
<textarea cols="48" id="P_COD_LIS" rows="3" name="P_COD_LIS"></textarea>
</label>
<label for="pesquisar">
<input type="submit" id="pesquisar" name="pesquisar" value="pesquisar" tabindex="3" />
</label>
</fieldset>
</form>

<span id="value"></span>
<span id='loading'>Pesquisando...</span>
</div>
<script src="http://ajax.googleapis.com/ajax/libs/prototype/1.6.0.3/prototype.js" type="text/javascript"></script>
<script type="text/javascript">
function submitForm(form) {
/*
usa metodo request() da classe Form da prototype, que serializa os campos
do formulario e submete (por POST como default) para a action especificada no form
*/
function mostrarLoading(){
$('loading').style.display = 'block';
$('value').innerHTML = ' ';
}

form.request({
onLoading:mostrarLoading,
onComplete: function(transport){
/*
se o retorno for diferente de -1, entende-se que nao houve problemas, entao apaga-se
os campos do formulario usando o metodo reset() da classe Form
*/
if(transport.responseText !=-1)  {
$('loading').style.display = 'none';
$('value').innerHTML = transport.responseText;
} else {
form.reset();
$('loading').style.display = 'none';
$('value').innerHTML = 'Erro ao consultar';
}
}

});
return false;
}
</script>
</body>
</html>
<?php } ?>

Caso tenha alguma duvida ou suges­tão deixe um comen­tá­rio que terei pra­zer em aju­dar.
Comen­tá­rios são bem vin­dos assim posso melho­rar a qua­li­dade dos tuto­ri­ais aqui apresentados.

É isso pes­soal uma ótima semana e até o próximo post.

Tags: , ,

Função para Converter de CSV para Array no PHP

CSV, PHP View Comments Marcelo Korjenioski

Olá pes­soal este semana esta com difi­cul­da­des para impor­tar um arquivo CSV pegando o nome das colu­nas ou setando elas em um array para adap­tar o nome das colu­nas com o mesmo nome dos meus fields no BD então com um pouco de pes­quisa e paci­ên­cia criei esta função.

O uso é sim­ples basta indi­car o cami­nho do arquivo e o tipo de sepa­ra­dor que o CSV usa. O padrão é vír­gula porem no Office usa ponto e vírgula.

Crie um arquivo com o nome produtos.csv e insira o código abaixo.


codigo;nome;preco;quantidade
1;lapis;1.20;2
2;borracha;0.50;10
3;caneta;1.50;20

Agora crie um arquivo converte.php e insira o código.


<?php
$caminho = "produtos.csv";

$campos = array('codigo','nome','preco','quantidade</code></span></span>');

$cvs_array = CVStoArray($caminho,$campos);
echo '<pre>';
var_dump($cvs_array);

function CVStoArray($arquivo,Array $campos=null,$separador=';') {
$ponteiro = fopen($arquivo, "r"); // Abro o arquivo para somente leitura
$colunas_nome = fgetcsv($ponteiro, 1000, $separador); // Pego a primeira linha onde tem os nomes dos campos
$numero_colunas = count($colunas_nome);// Vejo quantas colunas o CSV tem para comparar com os $campos.

if(count($campos) != $numero_colunas)
$campos = $colunas_nome;

// executo um looping até pegar todos os registros.

while($valor = fgetcsv($ponteiro, 1000, $separador)) {
$valores[] = $valor;
}
fclose($ponteiro); // fecho a conexão.
$x = 0;
$y = 0;

// Aqui eu pego as colunas e linhas e vou adicionando os valores no $array.

foreach($valores as $i) {
foreach($campos as $z) { // looping para pegar as colunas de acordo com o nome dos campos informados.
$array[$x][$z] = $i[$y];
$y++; // incremento o valor para ir para a próxima coluna.
}
$y = 0; // zero o ponteiro das colunas para ir para a próxima linha.
$x++; // incremento o valor da linha para o próximo registro
}
return $array;
}

?>

Caso tenha alguma duvida ou suges­tão deixe um comen­tá­rio que terei pra­zer em aju­dar.
Comen­tá­rios são bem vin­dos assim posso melho­rar a qua­li­dade dos tuto­ri­ais aqui apresentados.

É isso pes­soal uma ótima semana e até o próximo post.

Adicionar um novo item no inicio do Array com chave nula.

HTML, PHP View Comments Marcelo Korjenioski

Hoje estou apre­sen­tando nova­mente uma solu­ção para quando for popu­lar
um select den­tro de um for­mu­lá­rio usando um array de dados no esquema
valor => nome.

Vamos ao pro­blema e a solução.

Diga­mos que eu que­ria vali­dar este select para ver se foi mar­cado algo e eu não
posso alte­rar o HTML ou DB onde pego este array.
Se não tiver um valor nulo no select ele ira pegar o pri­meiro item do array no
caso o Admin.

$array_atual = array('1' => 'Admin','2'=>'Usuário');

Se usar a fun­ção array_unshift(); posso adi­ci­o­nar
no iní­cio do array um novo item porem ele terá uma chave int e eu quero um nula.

$array_atual = array('1' => 'Admin','2'=>'Usuário');
array_unshift($array_atual, 'Selecione');

Então a solu­ção para adi­ci­o­nar uma chave nula é usar

$array_atual = array('1'=>'Admin','2'=>'Usuário');
$array_atual = array(''=>'Selecione') + $array_atual;

Exis­tem varias manei­ras de resol­ver este pro­blema mas esta foi a mais sim­ples que encon­trei.
Caso tenha alguma duvida ou suges­tão deixe um comen­tá­rio que terei pra­zer em aju­dar.
Comen­tá­rios são bem vin­dos assim posso melho­rar a qua­li­dade dos tuto­ri­ais aqui apresentados.

É isso pes­soal uma ótima semana e até o pró­ximo post.

Importar dados apartir de uma URL e gerar SQL para inserir dados em BD MySQL ou PostgreSQL

Expressões Regulares, HTML, MySQL, PHP, Sites, SQL View Comments Marcelo Korjenioski

Seguindo outros tuto­ri­ais sobre como impor­tar dados, desta vez vamos fazer um script para cap­tu­rar dados de uma pagina HTML e gerar um SQL de insert.  Nesta pes­quisa estou pro­cu­rando por links den­tro de uma deter­mi­nada Tag. Estou usando o ID dos ele­men­tos como refe­rên­cia. Veja a impor­tân­cia de não repe­tir os IDs dos ele­men­tos.  Chega de con­versa e vamos direto ao ponto.


<?php
header("Content-Type: text/html; charset=UTF-8");
// URL que irei pegar os links
$url = "http://pt.wikipedia.org/wiki/Categoria:Especialidades_m%C3%A9dicas";
$conteudo = null;
// Abro conexão de leitura.
$conecurl = @fopen("$url","r") or die ('<center>erro na conexão<br><b>informe o administrador erro 15 </b></center>');
while(!feof($conecurl)) {
$conteudo .= fgets($conecurl,4096);
}
// Fecho conexão.
fclose($conecurl);
// Aqui vou informar a primeira tag para o filtro do HTML eu peguei um elemento com id por ser unico no HTML.
$inicio = strpos($conteudo,'<div id="mw-subcategories">');
// Pego outro elemento com id para finalizar o range de busca.
$fim = strpos($conteudo,'<div id="mw-pages">');
// Pegamos a posição final menos a inicial para ver quanto iremos pular.
$quantopula = $fim - $inicio ;
$conteudo = substr($conteudo, $inicio ,$quantopula);

function pegaLink($html){
// ER para pegar todas as tags de links.
$er = "/<a.*?href=(\".*?\"|[A-Za-z0-9_]*?).*?>.*?<\/a>/";
preg_match_all($er,$html,$links);
$link = $links[0];
return $link;
}

function pegaNomeLink($url){
// ER para pegar o nome da tag de link.
$label = str_replace("</a>","",preg_replace("/^<a.*?>/","",$url));
return $label;
}
// Pego um array com todos os links
$links = pegaLink($conteudo);
$query = NULL;
// Inicio da query.
$query .= "insert into especialidades (nome) values ";
// Faço um loop para fazer o insert de cada item.
foreach ($links as $value) {
$item = '(';
// Removo o link e pego apenas o nome.
$item .= "'".pegaNomeLink($value)."'";
$item .= ')';
$values[] = $item;
}
// Transformo o Array em uma String.
$query .= implode(',', $values);
echo $query;
?>

Caso tenha alguma duvida deixe um comen­tário que terei pra­zer em aju­dar.
Comen­tários são bem vin­dos assim posso mel­ho­rar a qual­i­dade dos tuto­ri­ais aqui apresentados.

É isso pes­soal tenham uma ótima semana e até o pró­ximo post.

Upload e Remoção de arquivo via AJAX

CSS, HTML, Javascript, PHP, Sites View Comments Marcelo Korjenioski

Não é pos­sí­vel fazer upload de arquivo via Ajax porem alguém encon­trou a solu­ção usando iframe.  Vamos cha­mar de fake upload via Ajax. No AJAX F1 tem um tuto­rial de como fazer este sis­tema de AJAX file upload.

Um lei­tor do soli­ci­tou uma ajuda com a lis­ta­gem do itens após o upload do arquivo e tam­bém para remo­ver ele. Resolvi criar um sis­tema base­ado no AJAX F1 e disponibilizar.

O sis­tema esta bem crú então con­forme for pas­sando o tempo vou melho­rar o código.

Aqui esta o link para o dowload do exem­plo com css e imagens.

No exem­plo aqui pos­tado esta sem o css para o código fica menor.

Vamos criar um arquivo index.php e colo­car o código abaixo


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Enviar e Remover Arquivos</title>
<link href="style/style.css" rel="stylesheet" type="text/css" />

<script language="javascript" type="text/javascript">
<!--
function startUpload(){
// Quando inicia o Upload o elemento a mensagem de progreso fica visível e o formulário é ocultado.
document.getElementById('f1_upload_process').style.visibility = 'visible';
document.getElementById('f1_upload_form').style.visibility = 'hidden';
return true;
}

function stopUpload(success,file){
var result = '';
if (success == 1){
// Caso o retorno do envio do arquivo vindo do iframe seja 1 ele adiciona o arquivo na lista.
result = '<span>O arquivo foi enviado com sucesso!<\/span><br/><br/>';
adicionar(file);
}
else {
// Se ocorrer erro mostra a mensagem.
result = '<span>Ocorreu um erro na hora de enviar o arquivo!<\/span><br/><br/>';
}
document.getElementById('f1_upload_process').style.visibility = 'hidden';
document.getElementById('f1_upload_form').innerHTML = result + '<label>File: <input name="myfile" type="file" size="30" /><\/label><label><input type="submit" name="submitBtn" value="Upload" /><\/label>';
document.getElementById('f1_upload_form').style.visibility = 'visible';

return true;
}

// Remove elementos
function removeElement(id) {
// Declara variável lista que indica  onde o elemento será removido.
var lista    = document.getElementById('lista');
// Declara variavel elemento que indica qual elemento será removido.
var elemento = document.getElementById(id);

// Função removeChild irá procurar elementos que estão dentro da variável lista com o valor
// da variavel elemento para remover.
lista.removeChild(elemento);
}

// Adiciona elementos basedo no valor do file input
function adicionar(id) {
// Pega a id do item da lista criado baseado no nome do arquivo
var valor   = id;

// Cria uma variavel com referencia ao Id do Elemento
var lista    = document.getElementById('lista');

// É criado uma tag <li> que contem informação do elemento adicionado.
// Também é adicionado um <input> do tipo hidden com o nome do arquivo.
// Estou usando o nome do arquivo como ID na lista criada.
var dado = '<li id="element_' + valor + '">'
+ '<form action="delete.php" method="post" target="delete_target">'
+ '<label for="file">' + valor + '</label>'
+ '<input name="file" value="' + valor +'" type="hidden"/>'
+ '<input id="item_' + valor + '" type="submit" value="Remover" name="Remover"/></form></li>';

// Pega o código HTML dentro da lista e adiciona novos registros.
lista.innerHTML = lista.innerHTML + dado;
return true;
}

//-->
</script>
</head>

<body>
<div id="container">
<div id="header"><div id="header_left"></div>
<div id="header_main">Enviar e Remover Arquivos</div><div id="header_right"></div></div>
<div id="content">
<form action="upload.php" method="post" enctype="multipart/form-data" target="upload_target" onsubmit="startUpload();" >
<!-- Mensagem de progresso de envio do arquivo -->
<p id="f1_upload_process">Carregando...<br/><img src="loader.gif" /><br/></p>
<p id="f1_upload_form" align="center"><br/>
<label>Arquivo:
<input name="myfile" id="myfile" type="file" size="30" />
</label>
<label>
<input type="submit" name="submitBtn" value="Enviar" />
</label>
</p>

<iframe id="upload_target" name="upload_target" src="#" style="width:0;height:0;border:0px solid #fff;"></iframe>
</form>
</div>

<div id="arquivos">
<fieldset>
<legend>Arquivos</legend>
<div>
<!--  Lista onde será adicionado a relação dos arquivos enviados -->
<ul id="lista"></ul>
</div>
<iframe id="delete_target" name="delete_target" src="#" style="width:0;height:0;border:0px solid #fff;"></iframe>
</fieldset>
</div>

<div id="footer">
<a href="http://www.ajaxf1.com" target="_blank">Powered by AJAX F1</a> /
<a href="http://www.phaneronsof.com" target="_blank">Powered by Phaneronsoft</a>
</div>
</div>

</body>

Agora vamos criar um arquivo php que o iframe irá soli­ci­tar para enviar o arquivo. Vamos nomear de upload.php


<?php
// Modifique o endereço do upload aqui
$destination_path = getcwd().DIRECTORY_SEPARATOR;
$result = 0;
$target_path = $destination_path . basename( $_FILES['myfile']['name']);
// Pega o nome do arquivo para devolver para a lista HTML via Javascript.
$file_name = $_FILES['myfile']['name'];
if(@move_uploaded_file($_FILES['myfile']['tmp_name'], $target_path)) {
//Caso o arquivo seja enviado com sucesso retorna 1.
$result = 1;
}
sleep(1);
?>
<!-- Quando este arquivo é solicitado no Iframe ele irá enviar para a função da pagina index.php o resultado php passando  para a função em JS -->
<script language="javascript" type="text/javascript">window.top.window.stopUpload(<?php echo $result; ?>,'<?php echo $file_name; ?>');</script>

E por ultimo criar um arquivo com o nome delete.php que irá remo­ver o arquivo que foi enviado.


<?php
// Modifique o endereço do upload aqui
$destination_path = getcwd().DIRECTORY_SEPARATOR;
// Pega o nome do arquivo para devolver para a lista HTML via Javascript ara ser removido da lista.
// Estou usando o nome do arquivo como ID na lista.
$file = $_POST['file'];
$target_path = $destination_path. $_POST['file'];
@unlink($target_path);
sleep(1);
?>
<!-- Quando este arquivo é solicitado no Iframe ele irá enviar para a função da pagina index.php o resultado php passando  para a função em JS -->
<script language="javascript" type="text/javascript">window.top.window.removeElement('element_<?php echo $file; ?>');</script>

Caso tenha alguma duvida deixe um comen­tário que terei pra­zer em aju­dar.
Comen­tários são bem vin­dos assim posso mel­ho­rar a qual­i­dade dos tuto­ri­ais aqui apresentados.

Tags: ,

Retornar somente números ou letras. Expressão Regular (ER)

Expressões Regulares, PHP View Comments Marcelo Korjenioski

Duas ERs sim­ples mas que na hora de vali­dar um campo vindo de um GET ou POST podem sal­var sua vida.

Eu usei uma des­tas ER no post Sis­tema para Cal­cu­lar Frete SEDEX e PAC a par­tir de CEP infor­mado. para remo­ver o “-” do CEP e ter cer­teza que ira ape­nas nume­ros na pes­quisa. Exis­tem fun­ções pron­tas em JavaS­cript para fazer este fil­tro do lado do cli­ente mas é sem­pre bom pro­te­ger a vali­da­ção do código no lado do ser­vi­dor para evi­tar ata­ques dos Injec­tion da vida (HTML Injec­tion e SQL Injection).


$string = 'a12AAAZZZAAasd4f6as4d5';
// Retorno somente números.
$filtro = eregi_replace('([^0-9])','',$string);
echo $filtro , '<br />';
// Retorna somente letras.
$filtro = eregi_replace('([^a-z])','',$string);
echo $filtro , '<br />';

Caso tenha alguma duvida deixe um comen­tá­rio que terei pra­zer em aju­dar.
Comen­tá­rios são bem vin­dos assim posso melho­rar a qua­li­dade dos tuto­ri­ais aqui apresentados.

Designed by NattyWP Wordpress Themes.
Images by desEXign.