| |
Feb 11
Criei uma solução para adicionar HTML no form do Zend é simples e eficiente
Basta criar um classe no Library com o nome Htmlform.php e adicionar o código
<?php
class Htmlform extends Zend_Form_Element_Xhtml {
public $helper = 'formNote';
}
?>
Agora no Formulário você irá chamar ela usando.
$html = new Htmlform('nome_do_elemento');
$html->setValue('<strong>teste</strong>');
$this->addElement($html);
Caso tenha alguma duvida deixe um comentário que terei prazer em ajudar.
Comentários são bem vindos assim posso melhorar a qualidade dos tutoriais aqui apresentados.
Tags: Form, Framework, HTML, Zend
Feb 08
Desde semana passada o antigo webservice dos correios parou de funcionar com PAC.
Foi feita a correção do código e agora o PAC esta funcionando novamente.
Sistema para Calcular Frete 1.1
Documentação para utilizar o webservice dos Correios para efetuar o calculo de forma personalizada.
SCPP_Manual_Implementacao_Calculo_Remoto_de_Precos_e_Prazos
Abaixo segue o código para manipular os dados do webservice usando o PHP.
Segue o exemplo 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&nCdServico=" . CODIGO_SERVICO . "&nVlPeso=" . PESO . "&sCepOrigem=" . CEP_ORIGEM . "&sCepDestino=" . CEP_DESTINO . "&nCdFormato=1&nVlComprimento=" . COMPRIMENTO . "&nVlAltura=" . ALTURA . "&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&nCdServico=" . CODIGO_SERVICO . "&nVlPeso=" . PESO . "&sCepOrigem=" . CEP_ORIGEM . "&sCepDestino=" . CEP_DESTINO . "&nCdFormato=1&nVlComprimento=" . COMPRIMENTO . "&nVlAltura=" . ALTURA . "&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 comentário que terei prazer em ajudar.
Comentários são bem vindos assim posso melhorar a qualidade dos tutoriais aqui apresentados.
Tags: CEP, correios, Frete, manual, PAC, Sedex, webservice
Oct 16
Assim como hoje não é mais necessário você desenvolver um Blog por causa do Wordpress acredito que criar um Chat de suporte para seu site também esta deixando de ser graças ao LiveZilla.
Neste tutorial vou mostrar como instalar o LiveZilla usando MySQL, PHP e WinXP.
O processo é rápido é vai deixar seu chefe e cliente contentes.
O primeiro passo é baixar o LiveZilla aqui (http://livehelp.livezilla.net/downloads/en/).
Tenha o MySql e PHP instalado recomendo usar o Wamp para efetuar o teste (http://www.wampserver.com/en/).
Para instalar não tem segredo é next, next finish.
Depois de instalar ele vai criar dois atalhos na área de trabalho o LiveZilla Client e o LiveZilla Server Admin.
Vamos abrir o LiveZilla Server Admin para configurar nosso Chat.
Selecione “Create new LiveZilla Server” e clique no botão Next.

Vai surgir uma tela para você criar uma conta Admin no sistema.
Preencha os campos como no exemplo e clique no botão Next.

Na próxima tela mostra um formulário para criar o primeiro grupo de suporte para o Chat. Depois é possível criar mais grupos de suporte.
Preencha os campos como no exemplo e clique no botão Next.

Agora chegou a hora de gerar os arquivo PHP do Chat.
Você tem a opção de enviar via FTP ou extrair localmente.
Eu no exemplo uso o Wamp então enviei direto para meu dir www/livezilla.
Escolha sua opção e clique em Next.

Apos enviar o arquivo surge a tela para testar a instalação do LiveZilla.
Basta informar o nome da conexão com o server e sua URL.
Clique no botão Server Test se estiver ok

Agora clique no botão test e digite o nome de usuário e senha que foi criado para o Admin e clique no botão Ok para iniciar o teste.

Se o teste ocorreu com sucesso clique no botão Serverpage e você verá esta pagina.

Feche a janela de Test e clique em Next para configurar o MySQL.
Preencha os campos como no exemplo e clique no botão Create Tables.
Caso tenha algum ao criar as tabelas clique no link Show SQL Dump e execute direto no seu BD.

Se a conexão estiver correta clique em Next e para finalizar a configuração.

Agora vamos clicar no atalho LiveZilla Client para iniciar o atendimento do Chat.
Entre com o nome de usuário e senha criados para o Admin e seu Chat já esta funcionando.

Abra o navegador e digite a URL do ser LiveZilla no meu caso http://localhost/livezilla/
Clique no link Start Demo Chat.
Preencha os campos como no exemplo e clique em iniciar Chat.

Agora no LiveZilla Client vai surgir uma solicitação para iniciar o Chat.
Clique em Accept Request e iniciar.

A instalação esta feita agora basta explorar o LiveZilla pois existem muitas opções para facilitar o trabalho do pessoal do suporte.
Em um post futuro irei comentar estas funções.
Caso tenha alguma duvida ou sugestão deixe um comentário que terei prazer em ajudar.
Comentários são bem vindos assim posso melhorar a qualidade dos tutoriais aqui apresentados.
É isso pessoal uma ótimo final de semana e até o próximo post.
Tags: Chat, LiveZilla, Suporte
Oct 14
Olá pessoal depois de um tempo sem postar surgiu uma necessidade de rastrear minhas encomendas nos Correios.
Como não gosto de ficar apertando F5 no site dos Correios que vive com problemas resolvi fazer a consulta via Ajax. O codigo é simples e aproveitei a ideia do sistema para calcular frete.
Segue exemplo funcionando.
</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 sugestão deixe um comentário que terei prazer em ajudar.
Comentários são bem vindos assim posso melhorar a qualidade dos tutoriais aqui apresentados.
É isso pessoal uma ótima semana e até o próximo post.
Tags: correios, entregas, rastrear
Sep 10
Olá pessoal este semana esta com dificuldades para importar um arquivo CSV pegando o nome das colunas ou setando elas em um array para adaptar o nome das colunas com o mesmo nome dos meus fields no BD então com um pouco de pesquisa e paciência criei esta função.
O uso é simples basta indicar o caminho do arquivo e o tipo de separador que o CSV usa. O padrão é vírgula 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 sugestão deixe um comentário que terei prazer em ajudar.
Comentários são bem vindos assim posso melhorar a qualidade dos tutoriais aqui apresentados.
É isso pessoal uma ótima semana e até o próximo post.
Sep 01
Hoje estou apresentando novamente uma solução para quando for popular
um select dentro de um formulário usando um array de dados no esquema
valor => nome.
Vamos ao problema e a solução.
Digamos que eu queria validar este select para ver se foi marcado algo e eu não
posso alterar o HTML ou DB onde pego este array.
Se não tiver um valor nulo no select ele ira pegar o primeiro item do array no
caso o Admin.
$array_atual = array('1' => 'Admin','2'=>'Usuário');
Se usar a função array_unshift(); posso adicionar
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 adicionar uma chave nula é usar
$array_atual = array('1'=>'Admin','2'=>'Usuário');
$array_atual = array(''=>'Selecione') + $array_atual;
Existem varias maneiras de resolver este problema mas esta foi a mais simples que encontrei.
Caso tenha alguma duvida ou sugestão deixe um comentário que terei prazer em ajudar.
Comentários são bem vindos assim posso melhorar a qualidade dos tutoriais aqui apresentados.
É isso pessoal uma ótima semana e até o próximo post.
Aug 25
Seguindo outros tutoriais sobre como importar dados, desta vez vamos fazer um script para capturar dados de uma pagina HTML e gerar um SQL de insert. Nesta pesquisa estou procurando por links dentro de uma determinada Tag. Estou usando o ID dos elementos como referência. Veja a importância de não repetir os IDs dos elementos. Chega de conversa 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 comentário que terei prazer em ajudar.
Comentários são bem vindos assim posso melhorar a qualidade dos tutoriais aqui apresentados.
É isso pessoal tenham uma ótima semana e até o próximo post.
Aug 14
Não é possível fazer upload de arquivo via Ajax porem alguém encontrou a solução usando iframe. Vamos chamar de fake upload via Ajax. No AJAX F1 tem um tutorial de como fazer este sistema de AJAX file upload.
Um leitor do solicitou uma ajuda com a listagem do itens após o upload do arquivo e também para remover ele. Resolvi criar um sistema baseado no AJAX F1 e disponibilizar.
O sistema esta bem crú então conforme for passando o tempo vou melhorar o código.
Aqui esta o link para o dowload do exemplo com css e imagens.
No exemplo aqui postado esta sem o css para o código fica menor.
Vamos criar um arquivo index.php e colocar 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á solicitar 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á remover 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 comentário que terei prazer em ajudar.
Comentários são bem vindos assim posso melhorar a qualidade dos tutoriais aqui apresentados.
Jul 09
Duas ERs simples mas que na hora de validar um campo vindo de um GET ou POST podem salvar sua vida.
Eu usei uma destas ER no post Sistema para Calcular Frete SEDEX e PAC a partir de CEP informado. para remover o “-” do CEP e ter certeza que ira apenas numeros na pesquisa. Existem funções prontas em JavaScript para fazer este filtro do lado do cliente mas é sempre bom proteger a validação do código no lado do servidor para evitar ataques dos Injection da vida (HTML Injection 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 comentário que terei prazer em ajudar.
Comentários são bem vindos assim posso melhorar a qualidade dos tutoriais aqui apresentados.
Jul 02
Dando continuidade ao ultimo post Pegar dados via POST e inserir no banco de dados MySQL com PHP.
Agora vamos mostrar os dados inseridos. Desta vez usei CSS para que o resultado fique um pouco melhor para visualizar.
Crie um arquivo com o nome listar.php e insira o código abaixo.
<?php
// Fazendo a conexão com o servidor MySQL
// mysql_pconnect("server", "login", "senha")
$conexao = mysql_pconnect("localhost","root","root") or die('falha ao conectar');
// Seleciona o banco de dados.
mysql_select_db("test",$conexao) or die('falha ao selecionar db');
// Executa Query.
$sql = 'SELECT codigo, nome, preco, quantidade FROM tb_produtos';
$result = mysql_query($sql);
?>
<html>
<head>
<title>Formulario de Produtos</title>
<style type="text/css">
table caption {
color:#1E398D;
padding:5px 0;
text-align:left;
text-transform:uppercase;
}
table thead {
border:1px solid #D2D2D2;
}
table tbody {
border:1px solid #D2D2D2;
}
table thead th {
background:#EEECCC;
border-left:1px solid #F0F0F0;
height:45px;
padding:5px;
text-transform:uppercase;
}
table tbody td, table tbody th {
font-family:Verdana,Arial,Helvetica,sans-serif;
font-size:10px;
padding:5px;
text-transform:uppercase;
}
</style>
</head>
<body>
<table cellspacing="0" summary="Resultados da lista de produtos." >
<caption>Produtos</caption>
<thead>
<tr>
<th>Código</th>
<th>Nome</th>
<th>Preço</th>
<th>Quantidade</th>
</tr>
</thead>
<tbody>
<?php // Verifico se existe registros no banco.
if(mysql_num_rows($result) > 0) {
// Aqui é feita a busca de cada registro encontrado jogando o resultado em um array por nome de campo da tabela.
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
// É possivel verificar todos os valores do usando a função var_dump($row);
// Basta tirar o comentario # para debugar.
// a tag pre serve para pre formatar o texto - irá manter a quebra de linha e espaços. Facilita na hora de debugar.
#echo '<pre>';
#var_dump($row);
#echo '</pre>';
?>
<tr>
<td><?php echo $row['codigo']; ?></td>
<td><?php echo $row['nome']; ?></td>
<td><?php echo $row['preco']; ?></td>
<td><?php echo $row['quantidade']; ?></td>
</tr>
<?php
}
} else { ?>
<tr>
<td colspan="4"><p>Nenhum registro encontrado.</p></td>
</tr>
<?php
}
// Libera toda a memória associada ao result.
mysql_free_result($result);
?>
</tbody>
</table>
</body>
</html>
Caso tenha alguma duvida deixe um comentário que terei prazer em ajudar.
Comentários são bem vindos assim posso melhorar a qualidade dos tutoriais aqui apresentados.
|
|
Comentários Recentes