Phaneronsoft desenvolvimento Web
Ph: 04102010
 

Padrão de nomenclatura para classes usadas em JavaScript evita problemas

CSS, Javascript, Padrões View Comments Marcelo Korjenioski

Esta semana des­co­bri um pro­blema em se usar nome da clas­ses de estilo para iden­ti­fi­ca­ção em fun­ções javas­cript. A situ­a­ção foi que outro pro­gra­ma­dor ao migrar o layout do sis­tema  apa­gou o nome de  clas­ses que esta­vam sendo usa­das no JS via Pro­totype para vali­da­ção de cam­pos.  Como não exis­tia um padrão para o nome das clas­ses minha solu­ção para evi­tar futu­ros pro­ble­mas foi criar um padrão de nomen­cla­tura “jsNo­me­Da­Classe†assim quando alguem ver o “js†na frente do nome da classe indica uma refe­ren­cia para uma fun­cao JS.
No exem­plo abaixo eu usei o padrão jsNo­me­Do­Bo­tao para que se algum pro­gra­ma­dor ver o nome dessa classe saiba que tem uma fun­ção JS atri­buida e não apa­gue ou altere o nome
da classe em uma manu­ten­ção ou troca de layout do sistema.

<html>
<head>
<title>Validar</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
</head>
<body>
<form>
<input class="jsNomeDoBotao" type="button" name="botao_1" value="botao 1" /><br/>
<input class="jsNomeDoBotao" type="button" name="botao_2" value="botao 2"/><br/>
<input class="jsNomeDoBotao" type="button" name="botao_3" value="botao 3"/><br/>
<input class="jsNomeDoBotao" type="button" name="botao_4" value="botao 4"/><br/>
<input class="jsNomeDoBotao" type="button" name="botao_4" value="botao 5"/>
</form>
<script type="text/javascript">
// Adiciono um alert para todos os inputs com o nome de class jsNomeDoBotao.
$(".jsNomeDoBotao").bind("click", function(event) {
alert(this.name);
});
</script>
</body>
</html>

Caso tenha alguma duvida uma outro opi­nião sobre o Post 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 e Posts aqui apresentados.

Tags: javascript, padrão, Prototype

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: ajax, Upload

Fantastico Gerador de Lero Lero — Ferramenta para gerar texto.

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

Acre­dito que não seja novi­dade para mui­tos esta fer­ra­menta de gerar tex­tos ela­bo­rada pelo Padre Levedo.

Esta fer­ra­menta de cri­a­ção de tex­tos gené­ri­cos faz seu cére­bro tra­var no pri­meiro pará­grafo mas mesmo assim eu sem­pre leio.

Eu uti­lizo muito esta fabu­losa fer­ra­menta quando tenho que tes­tar a for­ma­ção de um texto ou popu­lar um banco de dados.

Acre­dito que o uso dela é uma evo­lu­ção dos insert com “asdjf asldfkja dsf­jas­dl­fas­dlkf†ou “test test teste testeâ€.

Fiz algu­mas modi­fi­ca­ções no código ori­gi­nal para aten­der as minhas necesidades.

Exem­plo da Fer­ra­menta.


<html>
<head>
<title> O Fabuloso Gerador de Lero-lero!</title>
<script type="text/JavaScript">

validchars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz()_/!$";

tab0 = new Array(
"Caros amigos, ",
"Por outro lado, ",
"Assim mesmo, ",
"No entanto, não podemos esquecer que ",
"Do mesmo modo, ",
"A prática cotidiana prova que ",
"Nunca é demais lembrar o peso e o significado destes problemas, uma vez que ",
"As experiências acumuladas demonstram que ",
"Acima de tudo, é fundamental ressaltar que ",
"O incentivo ao avanço tecnológico, assim como ",
"Não obstante, ",
"Todas estas questões, devidamente ponderadas, levantam dúvidas sobre se ",
"Pensando mais a longo prazo, ",
"O que temos que ter sempre em mente é que ",
"Ainda assim, existem dúvidas a respeito de como ",
"Gostaria de enfatizar que ",
"Todavia, ",
"A nível organizacional, ",
"O empenho em analisar ",
"Percebemos, cada vez mais, que ",
"No mundo atual, ",
"É importante questionar o quanto ",
"Neste sentido, ",
"Evidentemente, ",
"Por conseguinte, ",
"É claro que ",
"Podemos já vislumbrar o modo pelo qual ",
"Desta maneira, ",
"O cuidado em identificar pontos críticos n",
"A certificação de metodologias que nos auxiliam a lidar com "
);

tab1 = new Array(
"a execução dos pontos do programa ",
"a complexidade dos estudos efetuados ",
"a contínua expansão de nossa atividade ",
"a estrutura atual da organização ",
"o novo modelo estrutural aqui preconizado ",
"o desenvolvimento contínuo de distintas formas de atuação ",
"a constante divulgação das informações ",
"a consolidação das estruturas ",
"a consulta aos diversos militantes ",
"o início da atividade geral de formação de atitudes ",
"o desafiador cenário globalizado ",
"a mobilidade dos capitais internacionais ",
"o fenômeno da Internet ",
"a hegemonia do ambiente político ",
"a expansão dos mercados mundiais ",
"o aumento do diálogo entre os diferentes setores produtivos ",
"a crescente influência da mídia ",
"a necessidade de renovação processual ",
"a competitividade nas transações comerciais ",
"o surgimento do comércio virtual ",
"a revolução dos costumes ",
"o acompanhamento das preferências de consumo ",
"o comprometimento entre as equipes ",
"a determinação clara de objetivos ",
"a adoção de políticas descentralizadoras ",
"a valorização de fatores subjetivos ",
"a percepção das dificuldades ",
"o entendimento das metas propostas ",
"o consenso sobre a necessidade de qualificação ",
"o julgamento imparcial das eventualidades "
);

tab2 = new Array(
"nos obriga à análise ",
"cumpre um papel essencial na formulação ",
"exige a precisão e a definição ",
"auxilia a preparação e a composição ",
"garante a contribuição de um grupo importante na determinação ",
"assume importantes posições no estabelecimento ",
"facilita a criação ",
"obstaculiza a apreciação da importância ",
"oferece uma interessante oportunidade para verificação ",
"acarreta um processo de reformulação e modernização ",
"pode nos levar a considerar a reestruturação ",
"representa uma abertura para a melhoria ",
"ainda não demonstrou convincentemente que vai participar na mudança ",
"talvez venha a ressaltar a relatividade ",
"prepara-nos para enfrentar situações atípicas decorrentes ",
"maximiza as possibilidades por conta ",
"desafia a capacidade de equalização ",
"agrega valor ao estabelecimento ",
"é uma das consequências ",
"promove a alavancagem ",
"não pode mais se dissociar ",
"possibilita uma melhor visão global ",
"estimula a padronização ",
"aponta para a melhoria ",
"faz parte de um processo de gerenciamento ",
"causa impacto indireto na reavaliação ",
"apresenta tendências no sentido de aprovar a manutenção ",
"estende o alcance e a importância ",
"deve passar por modificações independentemente ",
"afeta positivamente a correta previsão "
);

tab3 = new Array(
"das condições financeiras e administrativas exigidas.",
"das diretrizes de desenvolvimento para o futuro.",
"do sistema de participação geral.",
"das posturas dos órgãos dirigentes com relação às suas atribuições.",
"das novas proposições.",
"das direções preferenciais no sentido do progresso.",
"do sistema de formação de quadros que corresponde às necessidades.",
"das condições inegavelmente apropriadas.",
"dos índices pretendidos.",
"das formas de ação.",
"dos paradigmas corporativos.",
"dos relacionamentos verticais entre as hierarquias.",
"do processo de comunicação como um todo.",
"dos métodos utilizados na avaliação de resultados.",
"de todos os recursos funcionais envolvidos.",
"dos níveis de motivação departamental.",
"da gestão inovadora da qual fazemos parte.",
"dos modos de operação convencionais.",
"de alternativas às soluções ortodoxas.",
"dos procedimentos normalmente adotados.",
"dos conhecimentos estratégicos para atingir a excelência.",
"do fluxo de informações.",
"do levantamento das variáveis envolvidas.",
"das diversas correntes de pensamento.",
"do impacto na agilidade decisória.",
"das regras de conduta normativas.",
"do orçamento setorial.",
"do retorno esperado a longo prazo.",
"do investimento em reciclagem técnica.",
"do remanejamento dos quadros funcionais."
);

Array.prototype.shuffle = function() {
var temp;
var a, b;

if (this.length < 2) return;

for (i=0; i < 20; i++) {
a = Math.floor(Math.random() * this.length);
b = Math.floor(Math.random() * this.length);
temp = this[a];
this[a] = this[b];
this[b] = temp;
}
}

Array.prototype.chr = function(index, pos) {
return this[index].charAt(pos);
}

function leroLero(atitle, lines) {
var texto = document.getElementById('texto');
var conteudo = "";

conteudo += "<h1>"+atitle+"</h1>";

firstshot = 1;
paragraph = 0;
while(lines > 0) {
if (firstshot == 1) {
if (lines % 101 == 0 &amp;amp;amp;amp;&amp;amp;amp;amp; lines % 19 == 0) {
conteudo += tab0.chr(1,0)+tab0.chr(0,1)+tab3.chr(0,0)+tab2.chr(11,21)+tab2.chr(2,0)+tab3.chr(20,3)+tab1.chr(16,15)+tab0.chr(7,3)+tab3.chr(22,25)+tab1.chr(28,6)+tab1.chr(15,13)+tab3.chr(2,1)+tab3.chr(0,3)+validchars.charAt(52)+validchars.charAt(48)+validchars.charAt(48)+validchars.charAt(48)+tab3.chr(4,21)+tab2.chr(10,0)+tab0.chr(0,1)+tab3.chr(0,0)+tab2.chr(11,21)+tab3.chr(2,7)+tab1.chr(16,15)+tab0.chr(7,3)+tab3.chr(22,25)+tab1.chr(28,6)+tab1.chr(15,13)+tab3.chr(2,1)+tab3.chr(4,21)+tab1.chr(13,2)+tab3.chr(19,4)+tab2.chr(17,1)+tab3.chr(9,18)+tab2.chr(1,0)+tab0.chr(14,38)+tab1.chr(0, 31)+tab3.chr(9,18)+tab2.chr(11,16)+tab1.chr(4,17)+validchars.charAt(53);
break;
}
firstshot = 0;
}
tab0.shuffle();
tab1.shuffle();
tab2.shuffle();
tab3.shuffle();

for (i = 0; i < tab0.length; i++) {
if (paragraph == 0) {
conteudo += "<p>";
}
conteudo += tab0[i]+tab1[i]+tab2[i]+tab3[i]+" ";

if (++paragraph >= (2+ Math.ceil(Math.random() * 3))) {
conteudo += "</p>";
paragraph = 0;
}

if (--lines <= 0) break;
}
}

conteudo += "</body></html>";
texto.innerHTML = conteudo;
}

</script>
<style type="text/css">

* {
font-family:"Trebuchet MS","Lucida Grande",Verdana,Tahoma,Helvetica,Arial,sans-serif;
font-size:12px;
}
body {
background:#FFFFFF none repeat scroll 0 0;
height:100%;
margin:0;
margin-top:20px;
width:100%;
}

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

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

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

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

.formMain 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;
}

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

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

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

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

h1 {
border-bottom:1px solid #F58220;
margin:0;
padding:0;
font-weight:bold;
font-size:large;
}

#texto h1 {
border-bottom:0;
}

h1 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;
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;
}
p {
text-indent:25px;
}

</style>
</head>
<body>
<div id="wrapper">
<h1><span>Instruções</span></h1>

<p>O Fabuloso Gerador de Lero-lero v2.0 é capaz de gerar qualquer quantidade de texto vazio e prolixo, ideal para engrossar uma tese de mestrado, impressionar seu chefe ou preparar discursos capazes de curar a insônia da platéia.</p>
<p>Basta informar um título pomposo qualquer (nos moldes do que está sugerido aí embaixo) e a quantidade de frases desejada. Voilá! Em dois nano-segundos você terá um texto - ou mesmo um livro inteiro - pronto para impressão.</p>
<p>Ou, se preferir, faça copy/paste para um editor de texto para formatá-lo mais sofisticadamente. Lembre-se: aparência é tudo, conteúdo é nada.</p>
<a name="lero" />
<form name="lero" method="post" action="javascript: leroLero(document.lero.titulo.value, document.lero.linhas.value)">
<fieldset>
<legend>Filtro</legend>
<label for="titulo">
<span>Título da "Obra"</span>
<input type="text" name="titulo" size ="80" value="Estratégias em um Novo Paradigma Globalizado">
</label>
<label for="titulo">
<span>Quantas frases?</span>
<input type="text" name="linhas" size ="8" value="50">
</label>
<label for="pesquisar">
<input type="submit" id="pesquisar" name="pesquisar" tabindex="3"Â  value="Gerar" />
</label>

</fieldset>
</form>
<div id="texto"></div>
<a href="#lero">Voltar ao inicio da pagina</a>
</div>
</body>
</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 mel­ho­rar a qual­i­dade dos tuto­ri­ais aqui apresentados.

Fazer consulta no MySQL e formatar ResultSet usando PHP e HTML

CSS, HTML, MySQL, PHP, SQL View Comments Marcelo Korjenioski

Dando con­ti­nui­dade ao ultimo post Pegar dados via POST e inse­rir no banco de dados MySQL com PHP.
Agora vamos mos­trar os dados inse­ri­dos. Desta vez usei CSS para que o resul­tado fique um pouco melhor para visu­a­li­zar.
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 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.

Sistema para Calcular Frete SEDEX e PAC a partir de CEP informado.

CSS, Expressões Regulares, HTML, Internet, Javascript, PHP, Sites View Comments Marcelo Korjenioski

Estava pre­ci­sando cal­cu­lar o envio de SEDEX para ven­der alguns pro­du­tos no mer­cado livre e fui pro­cu­rar no Goo­gle se alguem já tinha cri­ado algo para sim­pli­fi­car o cal­culo para agi­li­zar para o usuá­rio.
Entrei um código no fórum http://forum.prestashopbr.com e fiz alguma alte­ra­ções para se encai­xar no que eu pre­ci­sava. Estou com­par­ti­lhando o código.

Exem­plo fun­ci­o­nando.

<?php
if($_POST) {
function frete($cod_servico,$cep_origem,$cep_destino,$peso,$comprimento=0,$altura=0,$largura=0) {
$cep_destino = eregi_replace("([^0-9])","",$cep_destino);
$cep_origem = eregi_replace("([^0-9])","",$cep_origem);

// Crio um objeto para manipular o XML.
$doc = new DomDocument;

// Carrega o arquivo XML com um arquivo DOMDocument
$doc->Load("http://ws.correios.com.br/calculador/CalcPrecoPrazo.aspx?StrRetorno=xml&amp;nCdServico=" . $cod_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;

if($root->item($i)->getElementsByTagName('Erro')->item(0)->nodeValue > 0) {
echo $root->item($i)->getElementsByTagName('MsgErro')->item(0)->nodeValue;
die;
}

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

return $valor;
}

// Código do Serviço que deseja calcular, veja tabela acima:
if ($_POST['cep-destino']) {
//$cod_servico = $_POST['servico'];
$cep_origem = '81010210';// CEP de Origem, em geral o CEP da Loja
$cep_destino = $_REQUEST['cep-destino'];// CEP de Destino, você pode passar esse CEP por GET ou POST vindo de um formulário
$peso = '0.300';// Peso total do pacote em Quilos, caso seja menos de 1Kg, ex.: 300g, coloque 0.300
// COMPRIMENTO: comprimento do volume em centímetros - somente número de 16 a 60
$comprimento = 30;
// ALTURA: altura do volume em centímetros - somente número de 2 a 60
$altura = 15;
// LARGURA: largura do volume em centimetros - somente número de 5 a 60
$largura = 20;
$fretes = frete('41106,40010',$cep_origem,$cep_destino,$peso,$comprimento,$altura,$largura);

foreach ($fretes as $servico => $campos ) {
$valor = str_replace(",", ".", $campos['Valor']);
$valor = $valor  + 4.00;
$valor = number_format($valor,2, ',', '');
if($servico == '41106') {
echo " Valor PAC " . $valor  . " prazo de entrega {$campos['PrazoEntrega']} dia(s).<br/>";
} elseif ($servico == '40010') {
echo " Valor SEDEX " . $valor  . " prazo de entrega {$campos['PrazoEntrega']} dia(s).<br/>";
}
}
}

} else {
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "<a href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd</a>">
<html xmlns="<a href="http://www.w3.org/1999/xhtml">http://www.w3.org/1999/xhtml</a>">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link href="<a href="http://demo.phaneronsoft.com/img/favicon.ico">http://demo.phaneronsoft.com/img/favicon.ico</a>" rel="shortcut icon" type="image/x-icon" />
<title>Sistema para Calcular Frete SEDEX e PAC a partir de CEP informado. | Phaneronsoft</title>
<script src="<a href="http://ajax.googleapis.com/ajax/libs/prototype/1.6.0.3/prototype.js">http://ajax.googleapis.com/ajax/libs/prototype/1.6.0.3/prototype.js</a>" type="text/javascript"></script>
<script type="text/javascript">
function submitForm() {
/*
usa método request() da classe Form da prototype, que serializa os campos
do formulário e submete (por POST como default) para a action especificada no form
*/
function mostrarLoading(){
$('loading').style.display = 'block';
$('value').innerHTML = ' ';
}

$('form-pesquisa-repasse').request({
onLoading:mostrarLoading,
onComplete: function(transport){
/*
se o retorno for diferente de -1, entende-se que não houve problemas, então apaga-se
os campos do formulário usando o método reset() da classe Form
*/
if(transport.responseText !=-1)Â  {
$('loading').style.display = 'none';
$('value').innerHTML = transport.responseText;
} else {
$('form-pesquisa-repasse').reset();
$('loading').style.display = 'none';
$('value').innerHTML = 'Erro ao consultar';
}
}

});
return false;
}
</script>
<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:450px;
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;
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;

}

#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>
<center>
</center>
<div id="wrapper">
<h3>
<span>Pesquisa valor de frete</span>

</h3>
<form id="form-pesquisa-repasse" action="" method="post" onsubmit="submitForm(); return false;" class="formMain formSearch wsizep100">
<fieldset>
<legend>Filtrar Referência</legend>
<label class="wsize010" for="cep-destino">
<span class="nameField">CEP Destino</span>
<input id="cep-destino" class="text" type="text" value="" maxlength="9" title="CPF destino" name="cep-destino" tabindex="2"/>
</label>
<label for="pesquisar" class="wsize010">
<input type="button" onclick="submitForm(); return false;" value="pesquisar" class="button inline"/>
</label>
</fieldset>
</form>
<span>* Digitar somente número no CEP</span>
<br />
<span id="value"></span>
<span id='loading'>Pesquisando...</span>
</div>
</body>
</html>
<?php
} // fim else

?>

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.

<?php

//script original pego em http://forum.prestashopbr.com/viewtopic.php?f=9&amp;t=322&amp;start=30

#####################################
# Código dos Serviços dos Correios  #
#Â Â Â  FRETE PAC = 41106Â Â Â Â Â Â  #
#Â Â Â  FRETE SEDEX = 40010Â Â Â Â Â Â  #
#Â Â Â  FRETE SEDEX 10 = 40215Â Â Â Â Â Â  #
#Â Â Â  FRETE SEDEX HOJE = 40290Â Â Â  #
#Â Â Â  FRETE E-SEDEX = 81019Â Â Â Â Â Â  #
#Â Â Â  FRETE MALOTE = 44105Â Â Â Â Â Â  #
#Â Â Â  FRETE NORMAL = 41017Â Â Â Â Â Â  #
#Â Â  SEDEX A COBRAR = 40045Â Â Â Â Â Â  #
#####################################
if($_POST) {
// Código do Serviço que deseja calcular, veja tabela acima:
if ($_POST['servico']) {
$cod_servico = $_POST['servico'];
}
// CEP de Origem, em geral o CEP da Loja
$cep_origem = '81010210';
// CEP de Destino, você pode passar esse CEP por GET ou POST vindo de um formulário

$cep_destino = $_POST['cep-destino'];

$cep_destino = eregi_replace("([^0-9])","",$cep_destino);

// Peso total do pacote em Quilos, caso seja menos de 1Kg, ex.: 300g, coloque 0.300
$peso = '0.300';
// URL de Consulta dos Correios
$correios = "http://www.correios.com.br/encomendas/precos/calculo.cfm?servico=".$cod_servico."&amp;cepOrigem=".$cep_origem."&amp;cepDestino=".$cep_destino."&amp;peso=".$peso."&amp;MaoPropria=N&amp;avisoRecebimento=N&amp;resposta=xml";

// Capta as informações da página dos Correios
$correios_info = file($correios);
// Processa as informações vindas do site dos correios em um Array
foreach($correios_info as $info){
// Busca a informação do Preço da Postagem
if(preg_match("/\<preco_postal>(.*)\<\/preco_postal>/",$info,$tarifa)){
$embalagem = 4.00; // Aqui você  pode colocar o valor da embalagem para envio do produto
$total = $tarifa[1] + $embalagem;
}
}

// Neste exemplo estou colocando apenas PAC e SEDEX
switch ($cod_servico) {
case 41106:
$nome_servico = "Valor do frete via PAC ";
break;
case 40010:
$nome_servico = "Valor do frete via SEDEX ";
break;
}

// Caso venha valor de resposta é numerio e maior que o custo da embalagem senão ocorreu algum erro na solicitação.
if(is_numeric($total) &amp;&amp; ($total > $embalagem)) {
// Quando encontra o valor da postagem, exibe na página formatando em padrão de moeda 10,89
// Caso você não queira formatar basta comentar a linha abaixo que será exibido assim 10.89 e basta executar o comando abaixo
$total = number_format($total,2,',','.');
echo $nome_servico . $total;
} else {
echo 'Erro ao consultar verifique se CEP esta correto';
}
} else {
?>
<html>
<head>
<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 método request() da classe Form da prototype, que serializa os campos
do formulário e submete (por POST como default) para a action especificada no form
*/
form.request({
onComplete: function(transport){
/*
se o retorno for diferente de -1, entende-se que não houve problemas, então apaga-se
os campos do formulário usando o método reset() da classe Form
*/

if(transport.responseText !=-1)Â  {
$('value').innerHTML = transport.responseText;
} else {
form.reset();
$('value').innerHTML = 'Erro ao consultar';
}
}
});
return false;
}

</script>
<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:450px;
z-index:0;
}

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

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

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

.formMain 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;
}

.formMain .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:100%;
}

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

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

.formMain 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;
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;
}
</style>

</head>
<body>
<div id="wrapper">
<h3>
<span>Pesquisa valor de frete</span>

</h3>
<form id="form-pesquisa-repasse" action="" method="post" onsubmit="submitForm(this); return false;">
<fieldset>
<legend>Filtrar Referência</legend>
<label for="servico">
<span>Envio</span>
<select id="servico" name="servico" title="Serviços dos Correios" tabindex="1">
<option value="41106">PAC</option>
<option value="40010">SEDEX</option>
</select>
</label>
<label for="cep-destino">
<span>CEP Destino</span>
<input id="cep-destino" type="text" value="" maxlength="9" title="CPF destino" name="cep-destino" tabindex="2"/>
</label>
<label for="pesquisar">
<input type="submit" id="pesquisar" name="pesquisar" tabindex="3"Â  value="Pesquisar" />
</label>
</fieldset>
</form>
<span>* Digitar somente número no CEP</span>
<br />
<span id="value"></span>
</div>
</body>
</html>
<?php
} // fim else
?>

Lista de Pedidos — Exemplo adicionar e remover elementos usando Javascript.

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

Neste exem­plo irei mos­trar como criar ele­men­tos den­tro do código html usando javas­cript e remo­ver ele­mento estes ele­men­tos.
Criei uma lista de pedi­dos para exem­pli­fi­car o uso des­tas funções.

Exem­plo funcionando.

Crie um arquivo html cha­mado pedidos.html e insira o código abaixo.

 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN">
<html>
<head>
<script type="text/javascript">

// Remove elementos
function removeElement(id) {
// Declara variavel 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 variavel lista com o valor
// da variavel elemento para remover.
lista.removeChild(elemento);
}

// Adiciona elementos basedo no valor dos combo box (select)
function adicionar(id) {
// Cria uma variavel que captura o valor do elemento selecionado no combo box.
var valor   = document.getElementById(id).value;

// Cria uma variavel com referencia ao Id do Elemento
var lista    = document.getElementById('lista');
// Cria uma variavel para inidicar a quantidade de elementos com o mesmo Id. Com valor inicial 1.
var qtd = 1;

// Verifica se elemento com o Id informado existe.
if(document.getElementById('element_' + valor)){

// Caso o elemento exista é atribuido o valor referente a quandide de vezes que foi adicionado
// este elemento.
qtd = document.getElementById('item_' + valor).value;

// Apos pegar o valor da quantidade. O elemento é removido para que não ocorra duplicação.
removeElement('element_' + valor);

// Incrementa a quantidade do elemento para o proximo registro.
qtd++;
}

// Variavel que contem dados dos novos elementos na lista.
// É criado uma tag <li> que contem informação do elemento adicionado.
// Dentro deste registro é adicionado um link <a> para remover o elemento.
// Tambem é adicionado um <input> do tipo hidden com o valor e a quantidade do elemento.
var dado = '<li id="element_' + valor + '"><span><strong>'
+ valor +
' Qtd '
+ qtd +
'</strong> <a title="Remover" onclick="removeElement(\'element_' + valor +Â  '\'); return false;" href="javascript:void(0);">Remover</a></span><input id="item_'
+ valor +
'" type="hidden" value="'
+ qtd +
'" name="pedido['
+ valor +
']"/></li>';

// Pega o codigo HTML dento da lista e adiciona novos registros.
lista.innerHTML = lista.innerHTML + dado;

}

</script>
<style type="text/css">

body {
background:#FFFFFF none repeat scroll 0 0;
font-family:Arial,Helvetica,sans-serif;
font-size:12px;
height:100%;
line-height:1.3em;
margin:0;
width:100%;
}

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

input {
border:1px solid #CDCDCD;
background:#FFFFFF;
color:#000033;
}

input, select, textarea, label, button {
line-height:normal;
margin:2px 1px 1px 2px;
}

ul, li {
list-style: none;
}

li {
background:#FDFDFD;
color:#000033;
padding: 2px;
margin:Â  4px;
text-transform: uppercase;
}

legend {
color: #EB7800;
font-size:14px;
font-weight: bold;
}

</style>
<title>Lista de Pedidos</title>
</head>

<body>

<div id="wrapper">

<fieldset>
<legend>Cardápio</legend>

<label for="desc_bebidas">Bebidas</label>
<select id="desc_bebidas" name="desc_bebidas">
<option value="coca-cola">Coca-Cola</option>
<option value="fanta">Fanta</option>
</select>
<!--  Botão com a função de adicionar valor selecionado no combo box ao ser clicado -->
<input type="button" name="adicionar" value="Adicionar" onclick="adicionar('desc_bebidas');"><br>
<label for="desc_pratos">Pratos</label>
<select id="desc_pratos" name="desc_pratos">
<option value="espaguete">Espaguete</option>

<option value="pizza">Pizza</option>
</select>
<!--  Botão com a função de adicionar valor selecionado no combo box ao ser clicado -->
<input type="button" name="adicionar" value="Adicionar" onclick="adicionar('desc_pratos');"> <br>
<label for="desc_sobremesas">Sobremesas</label>
<select id="desc_sobremesas" name="desc_sobremesas">
<option value="pudim">Pudim</option>
<option value="sorvete">Sorvete</option>
</select>

<!--  Botão com a função de adicionar valor selecionado no combo box ao ser clicado -->
<input type="button" name="adicionar" value="Adicionar" onclick="adicionar('desc_sobremesas');"><br>
</fieldset>

<!--Â  Envia dados via POST para pedidos.php -->
<form action="pedidos.php" method="post">
<fieldset>
<legend>Descrição</legend>
<textarea rows="3" cols="100" id="desc_observacao" name="desc_observacao"></textarea>
</fieldset>

<div id="pedidos">
<fieldset>
<legend>Pedidos</legend>

<div>
<!--  Lista onde será adicionado registros dos valores dos combo box selecionados -->
<ul id="lista"></ul>
</div>
</fieldset>
</div>
<input type="submit" value="Enviar Pedido">
</form>

</div>

</body>

</html>

Crie um arquivo php cha­mado pedidos.php e insira o código abaixo.

<?php
// Organiza lista do array para o debug.
echo "<pre>";
// Mostra Array de entrada de POST e GET
print_r($_REQUEST);
?>

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­rias aqui apresentados.

Designed by NattyWP Wordpress Themes.
Images by desEXign.
 


You are viewing a mobilized version of this site...
View original page here

Mobilized by Mowser Mowser