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.

Com­par­ti­lhe com seus ami­gos:
  • Print
  • Facebook
  • Google Bookmarks
  • PDF
  • RSS
  • Twitter
  • LinkedIn

Fazer conexão no MySQL usando Visual C++ 2005 Express Edition

C++, MySQL, Visual C++ View Comments Marcelo Korjenioski

Come­cei a me aven­tu­rar no mundo do Visual C++ semana pas­sada e de cara tive difi­cul­dade para fazer uma cone­xão com o que­rido MySQL por este motivo criei este
rápido tutorial.

O pri­meiro passo é bai­xar e ins­ta­lar MySQL .NET e ODBC Con­nec­tors para  cone­xão com .NET

ODBC Dri­ver

.NET Data Pro­vi­der Driver

Depois crie um banco e uma tabela no MySQL para fazer um teste.

Crie um novo pro­jeto no Visual C++ -> CLR -> Win­dows Forms Appli­ca­tion e colo­que um nome.

Com o pro­jeto cri­ado vamos adi­ci­o­nar uma referencia.

Vá no Solu­tion Explo­rer cli­que com o botão direito em cima do nome do pro­jeto e vá em References…

Agora em Com­mon Pro­per­ties -> Refe­ren­ces cli­que no botão Add New Reference…

Cli­que na aba Browse e vá no dire­to­rio onde foi ins­ta­lado o MySQL Con­nec­tor .Net e Add a MySql.Data.dll
O cami­nho padrão é “C:\Arquivos de programas\MySQL\MySQL Con­nec­tor Net 6.1.0\Assemblies”

Com a Refe­rence MySql.Data adi­ci­o­nada basta usar ela no projeto.

No pro­jeto padrão irá ter um arquivo Form1.h vá no modo Form1.h[Design] e abra Tool­box adi­ci­one um but­ton e um DataGrid

O Data­Grid não vai esta ati­vado por padrão para adi­ci­o­nar ele no Tool­box cli­que com o botão direito em cima de um com­po­nente e vá em Cho­ose Items…
Agora mar­que o com­po­nente da coluna Name Data­Grid com names­pace System.Windows.Forms.

Dê um duplo cli­que no but­ton e vai abrir o Form1.h com uma fun­ção para o button.

Adi­ci­one o código abaixo e con­fi­gure con­forme seu ser­vi­dor esta setado.


String^ strcon = "database = test; data source = localhost; user id = root; password =";
MySqlConnection^ mycon = gcnew MySqlConnection(strcon);

String^ sqlquery = "select * from tb_imagem";
MySqlDataAdapter^ myadp = gcnew MySqlDataAdapter(sqlquery, mycon);

DataSet^ myds = gcnew DataSet();

myadp->Fill(myds,"tb_imagem");
dataGrid1->DataSource = myds->Tables["tb_imagem"]->DefaultView;
dataGrid1->SetDataBinding(myds, "tb_imagem");

No ini­cio do arquivo Form1.h você encon­trara varios names­pa­ces adi­ci­o­na­dos inclua agora o names­pace do MySql


using namespace MySql::Data::MySqlClient;

Agora aperte F5 para ini­ciar o Debug.  Se não tiver erro vai com­pi­lar e exe­cu­tar.
Estou come­çando no C++ então se encon­trar alguma difi­cul­dade para fazer algo vou esta pos­tando aqui.

Com­par­ti­lhe com seus ami­gos:
  • Print
  • Facebook
  • Google Bookmarks
  • PDF
  • RSS
  • Twitter
  • LinkedIn

Bibliotecas AJAX que o google fornece diminuem a carga no seu servidor.

Ferramentas, Javascript, Sites View Comments Marcelo Korjenioski

Para dimi­nuir a carga no seu ser­vi­dor uma dica é uti­li­zar as bibli­o­te­cas que o goo­gle fornece.

As bibli­o­te­cas dis­po­ni­veis hoje são:

jQuery, jQuery UI, Pro­totype, scrip­ta­cu­lous, Moo­To­ols, Dojo, SWFOb­ject e a bibli­o­teca de inter­face do usuá­rio do Yahoo! (YUI).

Para car­re­gar a bibli­o­teca é simples.


<script src="http://ajax.googleapis.com/ajax/libs/prototype/1.6.0.3/prototype.js" type="text/javascript"></script>

Neste link Goo­gle Ajax de bibli­o­te­cas do Goo­gle é pos­si­vel encon­trar a docu­men­ta­ção com­pleta do uso.

Em um exem­plo aqui no site sobre  Sis­tema para Cal­cu­lar Frete SEDEX e PAC a par­tir de CEP infor­mado eu faço o uso do pro­totype para res­ga­tar os dados via AJAX.

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 apre­sen­ta­dos e aju­dar a comunidade.


Com­par­ti­lhe com seus ami­gos:
  • Print
  • Facebook
  • Google Bookmarks
  • PDF
  • RSS
  • Twitter
  • LinkedIn

Criar Trigger no MySQL.

MySQL, SQL View Comments Marcelo Korjenioski

É pos­si­vel defi­nir TRIGGERS para serem dis­pa­ra­dos antes (BEFORE) ou depois (AFTER)
de um evento DML(Data Mani­pu­la­tion Lan­guage) INSERT, UPDATE, DELETE ou REPLACE.
Para pegar os valo­res dos cam­pos nas Trig­gers usa­mos OLD.nome_do_campo e NEW.nome_do_campo.
Quando exclui­mos o regis­tro pega­mos o valor usando OLD.nome_do_campo e quando vamos adi­ci­o­nar
um regis­tro usa­mos NEW.nome_do_campo.
Abaixo regra do uso de OLD e NEW:
Delete usa­mos somente OLD.nome_do_campo.
Insert somente NEW.nome_do_campo
UPDATE pode­mos usar OLD.nome_do_campo e NEW.nome_do_campo.

Vou criar duas tabe­las para migrar os dados de uma tabela para outro usando TRIGGERS.


GO
CREATE TABLE IF NOT EXISTS tb_comentario (
pk_comentario    int(11) AUTO_INCREMENT NOT NULL,
tx_comentario    text NULL,
PRIMARY KEY(pk_comentario)
)
GO
CREATE TABLE IF NOT EXISTS tb_comentario_historico (
pk_comentario_historico    int(11) AUTO_INCREMENT NOT NULL,
fk_comentario              int(11) NOT NULL,
tx_comentario              text NULL,
PRIMARY KEY(pk_comentario_historico)

Vamos criar a pri­meira Trig­ger para dis­pa­rar apos fazer o Insert na tabela tb_comentario.


go
DROP TRIGGER IF EXISTS trigger_insert_comentario_historico
go
CREATE TRIGGER  trigger_insert_comentario_historico AFTER INSERT ON tb_comentario
FOR EACH ROW
BEGIN
INSERT INTO tb_comentario_historico SET fk_comentario = NEW.pk_comentario, tx_comentario = NEW.tx_comentario;
END
go
insert into tb_comentario set tx_comentario = 'insert trigger'
go
select * from tb_comentario
go
select * from tb_comentario_historico

Agora vamos criar uma Trig­ger para dele­tar o regis­tro da tb_comentario_historio caso seja dele­tado o regis­tro na tb_comentario.


go
DROP TRIGGER IF EXISTS trigger_delete_comentario_historico
go
CREATE TRIGGER trigger_delete_comentario_historico BEFORE DELETE ON tb_comentario
FOR EACH ROW
BEGIN
DELETE FROM tb_comentario_historico WHERE fk_comentario = OLD.pk_comentario;
END
go
delete from tb_comentario where pk_comentario = 21
go
select * from tb_comentario
go
select * from tb_comentario_historico

A ultima Trig­ger será para fazer o Update na tb_comentario_historio caso seja feita alguma mudança na tb_comentario.


go
DROP TRIGGER IF EXISTS trigger_update_comentario_historico
go
CREATE TRIGGER trigger_update_comentario_historico BEFORE UPDATE ON tb_comentario
FOR EACH ROW
BEGIN
UPDATE tb_comentario_historico SET tx_comentario = NEW.tx_comentario WHERE fk_comentario = NEW.pk_comentario;
END
go
update tb_comentario set tx_comentario = 'teste trigger update 2' where pk_comentario= 22
go
select * from tb_comentario
go
select * from tb_comentario_historico

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.

Com­par­ti­lhe com seus ami­gos:
  • Print
  • Facebook
  • Google Bookmarks
  • PDF
  • RSS
  • Twitter
  • LinkedIn

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.

Com­par­ti­lhe com seus ami­gos:
  • Print
  • Facebook
  • Google Bookmarks
  • PDF
  • RSS
  • Twitter
  • LinkedIn

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.

Com­par­ti­lhe com seus ami­gos:
  • Print
  • Facebook
  • Google Bookmarks
  • PDF
  • RSS
  • Twitter
  • LinkedIn

Pegar dados via POST e inserir no banco de dados MySQL com PHP

HTML, MySQL, PHP View Comments Marcelo Korjenioski

Exem­plo básico para pegar valo­res via POST de um for­mu­lá­rio HTML e inse­rir no banco de dados MySQL.

<?php
// Verifica se foi postado algo para inserir dados no banco.
if($_POST) {
// Fazendo a conexão com o servidor MySQL
// mysql_pconnect("server", "login", "senha")
$conexao = mysql_pconnect("localhost","root","root") or die('falha ao conectar');
// Verifica se o banco de dados existe antes de criar.
$query = 'CREATE DATABASE IF NOT EXISTS test';

if(!mysql_query($query,$conexao)) {
echo 'falha ao criar banco<br />';
die; // Com o die eu já paro de executar o script caso ocorra erro.
}

mysql_select_db("test",$conexao) or die('falha ao selecionar db');

// Verifica se a tabela existe antes de criar.
$query = "CREATE TABLE  IF NOT EXISTS tb_produtos (
pk_produtos int not null auto_increment primary key,
codigo     varchar(255),
nome       varchar(255),
preco      decimal(12,2),
quantidade int(11))";

if(!mysql_query($query,$conexao)) {
echo 'falha ao criar tabela<br />';
die; // Com o die eu já paro de executar o script caso ocorra erro.
}

// É possivel verificar todos os valores do POST usando a função var_dump($_POST);
// 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($_POST); die;
#echo '</pre>';

/*Pego os valores do POST do formulario HTML e seto nas variaveis.
É necessario fazer a validação dos dados para evitar ataques SQL Injection ou HTML Injection quando estiver
em ambiente de produção.
Neste exemplo estou fazendo sem qualquer tipo de validação para simplificar o entendimento.*/
$codigo = $_POST['codigo'];
$nome = $_POST['nome'];
$preco = $_POST['preco'];
$quantidade = $_POST['quantidade'];

$query_insert = "INSERT INTO tb_produtos (codigo,nome,preco,quantidade) VALUES
('$codigo','$nome',$preco,$quantidade)";

if(mysql_query($query_insert,$conexao)) {
echo 'Dados inseridos com sucesso<br />';
} else {
echo 'falha ao inserir dados<br />';
}
// Caso POST false mostra HTML
} else {
?>
<html>
<head>
<title>Formulário de Produtos</title>
</head>
<body>
<form action="cadastrar.php" method="post">
<label for="codigo">
<span >Código</span>
<input id="codigo" class="text" type="text" value="" maxlength="255" title="Código" name="codigo" tabindex="1"/>
</label><br />
<label for="nome">
<span >Nome</span>
<input id="nome" class="text" type="text" value="" maxlength="255" title="Nome" name="nome" tabindex="2"/>
</label><br />
<label for="preco">
<span class="nameField">Preço</span>
<input id="preco" class="text" type="text" value="" maxlength="12" title="Preço" name="preco" tabindex="3"/>
</label><br />
<label for="quantidade">
<span class="nameField">Quantidade</span>
<input id="quantidade" class="text" type="text" value="" maxlength="11" title="Quantidade" name="quantidade" tabindex="4"/>
</label><br />
<label for="cadastrar">
<input type="submit" id="cadastrar" name="cadastrar" tabindex="5" value="cadastrar" />
</label>
</form>
</body>
</html>
<?php
}

?>

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.

Com­par­ti­lhe com seus ami­gos:
  • Print
  • Facebook
  • Google Bookmarks
  • PDF
  • RSS
  • Twitter
  • LinkedIn

Simulação de Movimetação de Caixa — Procedure que consulta View e efetua Insert.

MySQL, SQL View Comments Marcelo Korjenioski

Hoje estou pos­tando uma pro­ce­dure que con­sulta uma View e faz um insert.
A View cri­ada é para simu­lar a movi­men­ta­ção do caixa do dia atual.
A Pro­ce­dure ira fazer a con­sulta da movi­men­ta­ção do caixa atra­vés da View.
Caso a movi­men­ta­ção seja posi­tiva e não conste regis­tro de fecha­mento do caixa no dia atual um Insert com o valor da movi­men­ta­ção será executado.

No script abaixo será cri­ado 3 tabe­las (tb_cliente, tb_movimentacao e tb_caixa),
1 View (view­Mo­vi­men­ta­cao) e uma procedure(sp_fecha_caixa).

Na tabela tb_cliente consta os cli­en­tes que pode­rão efe­tuar a movi­men­ta­ção do caixa.
Na tabela tb_movimentacao consta os movi­men­tos rea­li­za­dos pelos cli­en­tes.
Na tabela tb_caixa consta os regis­tros de cai­xas fecha­dos.
A View view­Mo­vi­men­ta­cao ira retor­nar todos os regis­tros de movi­men­ta­ção do dia atual.
A Pro­ce­dure sp_fecha_caixa ira exe­cu­tar a View pegar o valor da movi­men­ta­ção de hoje e irá
inse­rir este valor na tabela tb_caixa.

// Verifica se tabela existe. Caso Exista ele remove.
GO
DROP TABLE IF EXISTS tb_cliente;
// Caso a tabela não exista ele cria uma tabela.
GO
CREATE TABLE IF NOT EXISTS tb_cliente (
pk_cliente int(10) AUTO_INCREMENT NOT NULL PRIMARY KEY,
nome varchar(60) not null,
cpf varchar(20) not null unique
) Engine =InnoDB;
//------------------------------------------------------------
// Insere os dados na tabela
GO
INSERT INTO tb_cliente (nome, cpf)
VALUES
('Joao', '12345678910'),
('Paulo', '12345678911'),
('Marcelo', '12345678912'),
('Gabriel', '12345678913'),
('Julio', '12345678914')
//------------------------------------------------------------
// Caso a tabela não exista ele cria uma tabela.
GO
DROP TABLE IF EXISTS tb_movimentacao;
// Caso a tabela não exista ele cria uma tabela.
GO
CREATE TABLE IF NOT EXISTS tb_movimentacao (
pk_saldo int(10) AUTO_INCREMENT NOT NULL PRIMARY KEY,
fk_cliente int(10) NOT NULL,
saldo decimal(10,2),
dt_cadastro timestamp default current_timestamp,
CONSTRAINT fk_cliente FOREIGN KEY (fk_cliente) REFERENCES tb_cliente (pk_cliente)
)
//------------------------------------------------------------
// Insere os dados na tabela tb_movimentacao para simular movimentação do caixa.
GO
INSERT INTO tb_movimentacao (fk_cliente,saldo,dt_cadastro)
VALUES
(1,42, ADDDATE( CURDATE(), INTERVAL 1 DAY)),
(1,51, ADDDATE( CURDATE(), INTERVAL 0 DAY)),
(2,23, ADDDATE( CURDATE(), INTERVAL 0 DAY)),
(3,52, ADDDATE( CURDATE(), INTERVAL 1 DAY)),
(3,68, ADDDATE( CURDATE(), INTERVAL 0 DAY)),
(3,85, ADDDATE( CURDATE(), INTERVAL 0 DAY)),
(4,82, ADDDATE( CURDATE(), INTERVAL 0 DAY)),
(5,110,ADDDATE( CURDATE(), INTERVAL 0 DAY)),
(5,109,ADDDATE( CURDATE(), INTERVAL 2 DAY)),
(5,116,ADDDATE( CURDATE(), INTERVAL 0 DAY)),
(5,129,ADDDATE( CURDATE(), INTERVAL 4 DAY))
//------------------------------------------------------------
// Caso a tabela não exista ele cria uma tabela.
GO
DROP TABLE IF EXISTS tb_caixa;
// Caso a tabela não exista ele cria uma tabela.
GO
CREATE TABLE IF NOT EXISTS tb_caixa (
pk_caixa int(10) AUTO_INCREMENT NOT NULL PRIMARY KEY,
saldo decimal(10,2),
dt_caixa timestamp default current_timestamp
)
//------------------------------------------------------------

// Caso a VIEW não exista ele cria uma tabela.
GO
DROP VIEW IF EXISTS viewMovimentacao;
// Agora é criada a VIEW que ira fazer a consulta das movimentações do dia.
GO
CREATE VIEW viewMovimentacao AS
SELECT
tb_cliente.pk_cliente AS fk_cliente,
tb_cliente.nome AS nome,
tb_cliente.cpf AS cpf,
tb_movimentacao.saldo AS saldo,
tb_movimentacao.dt_cadastro AS dt_cadastro
FROM tb_cliente
INNER JOIN tb_movimentacao ON (pk_cliente = fk_cliente)
WHERE dt_cadastro = CURDATE();

Agora vamos criar nossa Pro­ce­dure para fechar o caixa do dia.

// Dropa a procedure se já existir.
GO
DROP PROCEDURE IF EXISTS sp_fecha_caixa;
// Cria procedure.
GO
CREATE PROCEDURE sp_fecha_caixa()
BEGIN
DECLARE var_temp_saldo_dia decimal(10,2);
DECLARE var_temp_registro decimal(10,2);
//Pega o saldo da movimentacao de hoje.
DECLARE cursorViewMovimentacao CURSOR FOR SELECT sum(saldo) as saldo_dia FROM viewMovimentacao;
DECLARE cursorTabelaCaixa CURSOR FOR SELECT count(dt_caixa) as registro FROM tb_caixa WHERE dt_caixa = CURDATE();
OPEN cursorViewMovimentacao;
FETCH cursorViewMovimentacao INTO var_temp_saldo_dia;
CLOSE cursorViewMovimentacao;
//Pega os registros do caixa de hoje.
OPEN cursorTabelaCaixa;
FETCH cursorTabelaCaixa INTO var_temp_registro;
CLOSE cursorTabelaCaixa;
// Verifica se teve movimentacao no dia e se caixa já foi fechado.
IF (var_temp_saldo_dia > 0 AND var_temp_registro = 0 ) THEN
INSERT INTO tb_caixa(saldo,dt_caixa)
VALUES (var_temp_saldo_dia, CURDATE());
ELSEIF (var_temp_registro > 0 ) THEN
SELECT 'Caixa já foi fechado' AS Msg;
ELSEIF (var_temp_saldo_dia <= 0 ) THEN
SELECT 'Caixa com valor negativo' AS Msg;
ELSE
SELECT 'Erro ao executar' AS Msg;
END IF;
END;

GO
call sp_fecha_caixa();

Agora vamos fazer um select para veri­fi­car se o valor foi inserido.

select * from tb_caixa

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.

Com­par­ti­lhe com seus ami­gos:
  • Print
  • Facebook
  • Google Bookmarks
  • PDF
  • RSS
  • Twitter
  • LinkedIn

Exemplo de como criar uma View no MySQL. (Virtual Tables)

MySQL, SQL View Comments Marcelo Korjenioski

Neste Post irei mos­trar como criar uma View para agi­li­zar sua vida na hora de libe­rar con­sul­tar espe­ci­fi­cas sem ter medo dos usuá­rios matem o banco na hora de criar uma con­sulta já conhecida.

Alguns bene­fí­cios das Views são:
Segu­rança no acesso de dados das taba­las.
Oti­mi­za­ção das consultas.

A sin­taxe basica para criar uma VIEW:

CREATE VIEW view_name AS select_statement

Para efe­tuar a con­sulta da VIEW é seme­lhande a con­sulta de uma TABLE:

SELECT fields FROM view_name

Neste exem­plo vamos criar duas tabe­las para exe­cu­tar nossa VIEW.
Uma tabela com cli­en­tes e outra com a movi­men­ta­ção de caixa deste cli­ente.
Copie o código abaixo e exe­cute no banco de dados.

// Verifica se tabela existe. Caso Exista ele remove.
GO
DROP TABLE IF EXISTS tb_cliente;

// Caso a tabela não exista ele cria uma tabela.
GO
CREATE TABLE IF NOT EXISTS tb_cliente (
pk_cliente	int(10) AUTO_INCREMENT NOT NULL PRIMARY KEY,
nome varchar(60) not null,
cpf varchar(20) not null unique
) Engine =InnoDB;

//------------------------------------------------------------

// Insere os dados na tabela
GO
INSERT INTO tb_cliente (nome, cpf)
VALUES
('Joao',	'12345678910'),
('Paulo',	'12345678911'),
('Marcelo',	'12345678912'),
('Gabriel',	'12345678913'),
('Julio',	'12345678914')

//------------------------------------------------------------

// Caso a tabela não exista ele cria uma tabela.
GO
DROP TABLE IF EXISTS tb_movimentacao;

// Caso a tabela não exista ele cria uma tabela.
GO
CREATE TABLE IF NOT EXISTS tb_movimentacao (
pk_saldo int(10) AUTO_INCREMENT NOT NULL PRIMARY KEY,
fk_cliente  int(10) NOT NULL,
saldo decimal(10,2),
dt_cadastro timestamp default current_timestamp,
CONSTRAINT fk_cliente FOREIGN KEY (fk_cliente) REFERENCES produtos (pk_cliente)
)

//------------------------------------------------------------

// Insere os dados na tabela
GO
INSERT INTO tb_movimentacao (fk_cliente,saldo,dt_cadastro)
VALUES
(1,42, ADDDATE( CURDATE(), INTERVAL 1 DAY)),
(1,51, ADDDATE( CURDATE(), INTERVAL 2 DAY)),
(2,23, ADDDATE( CURDATE(), INTERVAL 1 DAY)),
(3,52, ADDDATE( CURDATE(), INTERVAL 1 DAY)),
(3,68, ADDDATE( CURDATE(), INTERVAL 2 DAY)),
(3,85, ADDDATE( CURDATE(), INTERVAL 3 DAY)),
(4,82, ADDDATE( CURDATE(), INTERVAL 1 DAY)),
(5,110,ADDDATE( CURDATE(), INTERVAL 1 DAY)),
(5,109,ADDDATE( CURDATE(), INTERVAL 2 DAY)),
(5,116,ADDDATE( CURDATE(), INTERVAL 3 DAY)),
(5,129,ADDDATE( CURDATE(), INTERVAL 4 DAY))

Agora vamos criar uma VIEW para efe­tuar a con­sulta de movi­men­ta­ção do cli­ente.
Para isso vamos usar as duas tabe­las para a con­sulta da VIEW.

// Caso a VIEW não exista ele cria uma tabela.
GO
DROP VIEW IF EXISTS viewMovimentacao;
GO
CREATE VIEW viewMovimentacao AS
SELECT
tb_cliente.pk_cliente AS fk_cliente,
tb_cliente.nome AS nome,
tb_cliente.cpf AS cpf,
tb_movimentacao.saldo AS saldo,
tb_movimentacao.dt_cadastro AS dt_cadastro
FROM tb_cliente
INNER JOIN tb_movimentacao ON (pk_cliente = fk_cliente)

Exe­cuta a View.

// Efetua consulta View
GO
SELECT fk_cliente,nome,cpf,saldo,dt_cadastro FROM viewMovimentacao

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.

Com­par­ti­lhe com seus ami­gos:
  • Print
  • Facebook
  • Google Bookmarks
  • PDF
  • RSS
  • Twitter
  • LinkedIn

Como pegar valor de uma sessão criada no Php e usar no Smarty e verificar se array esta vazio usando count e empty.

HTML, PHP, Smarty, Template View Comments Marcelo Korjenioski

O TESTE 1 e TESTE 3 me mos­tram o resul­tado do tipo inteiro já o segundo teste usando |count serve para dar dis­play do resul­tado como uma string. Para o TESTE 2 fun­ci­o­nar como a saída é uma string se o resul­tado for
zero  o |count vai mos­tra (array).  Usando um |@count ele mos­tra zero (0).
Para fun­ci­o­nar a situ­a­ção use @count != ‘0’ para resul­tado maior que zero e @count == ‘0’ para igual a zero.


<?php
#array cheio
$_SESSION['unidades'] = array('1','2','3','4');

#array vazio
//$_SESSION['unidades'] = array();
?>

TESTE : {if !empty($smarty.session.unidades)}
empty cheio 1 ({$smarty.session.unidades|@count })
{elseif empty($smarty.session.unidades)}
empty vazio 2 ({$smarty.session.unidades|@count })
{/if}
<br />
TESTE 2 : {if $smarty.session.unidades|@count != '0' }
|count  cheio 1 ({$smarty.session.unidades|@count})
{elseif $smarty.session.unidades|@count == '0' }
|count vazio 2 ({$smarty.session.unidades|@count})
{/if}

<br />
TESTE 3 : {if count($smarty.session.unidades) > 0 }
count cheio 1 ({$smarty.session.unidades|@count})
{elseif count($smarty.session.unidades) <= 0 }
count vazio 2 ({$smarty.session.unidades|@count})
{/if}

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.

Com­par­ti­lhe com seus ami­gos:
  • Print
  • Facebook
  • Google Bookmarks
  • PDF
  • RSS
  • Twitter
  • LinkedIn
Designed by NattyWP Wordpress Themes.
Images by desEXign.