-
Total de itens
33 -
Registro em
-
Última visita
Tudo que Arkilus postou
-
Escreveu muito mas não disse nada. Em primeiro lugar, não existe diferença entre um scripter e um programador. Ambos programam, portanto ambos são programadores. Não existe linguagem de scripting, o que existe é linguagens de programação que por simplicidade são interpretadas, pois geralmente não há necessidade nem usabilidade em seu código sendo compilado. Muitas linguagens possuem tanto um interpretador¹ como um compilador², por exemplo: Java, LUA, QBASIC (pra não mencionar as mais conhecidas). Todas as linguagens que você mencionou como sendo simples "scripts" totalmente dependetes de seus interpretadores possuem compiladores e diversas funcionalidades quando compiladas. PHP NÃO precisa do apache, rodar um arquivo escrito em php é tão simples quanto digitar php.exe -f arquivo.php. O Apache é somente um webserver, ou seja, um programa responsável por disponibilizar os serviços de acesso à sites via browser, possuindo suporte para as mais diversas linguagens (inclusive C++ via cgi). O PHP é uma das poucas linguagens de uso principal interpretado que possui extensa capacidade POO, tornando possível o desenvolvimento de aplicações extremamente complexas e poderosas, inclusive fora da web. LUA possui diversos usos compilada, e sua facilidade de integração e uso a torna uma linguagem robusta para as mais diversas aplicações, inclusive standalone. HTML é uma aplicação do XML para a estruturação de páginas web. O que acontece é que muitas vezes as pessoas (erroneamente) se referem ao cara que só está trabalhando com a linguagem interpretada de scripter, pois ele não lida com códigos que necessitem ser compilados. ¹ Interpretador é o programa responsável por rodar um código em determinada linguagem sem a necessidade de convertê-lo para um arquivo codificado em linguagem de máquina. ² Compilador é o programa responsável por, através da codificação do código para linguagem de máquina, gerar arquivos capazes de serem executados direto de seu ambiente de uso (windows, virtual machines, etc). Sugiro que você delete esse tópico, e antes de pensar em distribuir informação tenha certeza que sabe do que fala.
-
Eu já ouvi falar que muita coisa do LUA 4 funciona bem diferente no LUA 5, imagina no 3 então... Owned
-
Sinceramente, concordo com o xur~, se alguém aqui quiser aprender php sugiro que delete esse tópico de sua memória. Aquele jeito de pegar a data não foi uma simples "variação", mas sim uma forma extremamente horrenda, lenta, e atrapalhada de fazer algo que poderia ser feito em 1/10 de linha. Outra coisa: o uso da função header simplesmente para mudar de página é uma prática extremamente horrenda para realizar tal tarefa. Por que? Simplesmente porque esse não é o objetivo da função. Usando assim você faz com que o servidor chame nada menos que DUAS páginas para somente exibir a segunda (pois a primeira teve que ser chamada para redirecionar).
-
Tabelas Temporaria No Sql Server
tópico respondeu ao Dark Lost de Arkilus em Tutoriais de Infraestrutura
@King "...esqueça xml" Talvez você esteja um pouco desinformado ou confundindo as coisas: O XML foi uma GRANDE invenção, e tem extrema usabilidade e importância. O próprio sistema ADO.NET usa com grande frequência XML em seus DataSets (os objetos de manipulação de dados usados em praticamente qualquer aplicação .net que acesso banco de dados sql), não se pode ignorar o xml assim... Acredito que você tenha se confundido com o "uso infantil de XML como BANCO DE DADOS". -
lua.org ...
-
Microsoft Visual C++ 2005 Express Edition
tópico respondeu ao xurumelous de Arkilus em Tutoriais de Programação
Até onde eu saiba o Microsoft Visual C++ Express não possibilita a edição dos resources, para tanto você precisaria de uma versão paga do visual studio. -
Sistema de Idiomas para seu Site Após o pedido de alguns amigos eu decidi gastar um tempinho e desenvolver um sistema simples e funcional que possibilite ao seu site disponibilizar tradução completa para mais de um idioma. - Download do sistema junto com arquivo-exemplo - class.langSys.php no PasteLog Modo de usar: Crie uma pasta que conterá os arquivos de tradução, e nela coloque estes nomeando-os da forma sigla_do_idioma.php O conteúdo desses arquivos deve seguir o seguinte esquema: <?php return array( 'label1' => 'String1 traduzida', 'label2' => 'String2 traduzida', 'label3' => 'String3 traduzida' ); ?> O arquivo class.langSys.php pode estar em qualquer pasta, desde que você saiba aonde Em seu arquivo principal do site (normalmente o index.php) crie uma array de configuração, nesse esquema: $langConfig = array( 'langDir' => 'langs', 'defaultLang' => 'pt_br' ); Onde langDir deve conter o caminho para a pasta criada acima, e defaultLang a sigla do idioma padrão Ainda no mesmo arquivo fazer o include do class.langSys.php e chamar a função estática prepare passando como parâmetro a array de configuração: require_once('/path/to/class.langSys.php'); langSys::prepare($langConfig); Em todas as partes do site que necessitarem do sistema de idiomas, os textos devem ser substituídos por chamadas a função estática get, passando como parâmetro a label a que é referenciado nos arquivos de idiomas, por exemplo: <head><title><?=langSys::get('title')?></title></head> <body> <div> <h1><?=langSys::get('welcome')?></h1> </div> </body> Para o uso de um select para a selação do idioma, o conteúdo das tags value deve ser exatamente igual ao nome do arquivo do idioma relacionado: <select id="sel_lang"> <option value="pt_br">Portugues</option> <option value="en">English</option> </select> Uma maneira de fazer com que o idioma mude assim que é selecionado no select está incluída em javascript no arquivo de exemplo. Caso deseje criar links no lugar do select, estes devem seguir o esquema ?lang=silga_do_idioma, por exemplo: <a href="?lang=pt_br">Português</a> / <a href="?lang=en">English</a> Exemplo de uso: <?php $langConfig = array( 'langDir' => 'langs', 'defaultLang' => 'pt_br' ); require_once('class.langSys.php'); langSys::prepare($langConfig); ?> <html> <head> <title><?=langSys::get('title')?></title> </head> <body> <div width="400px" align="center" style="border: 1px ridge #0f0; background: #ccc; height: 200px;"> <h1><?=langSys::get('welcome')?></h1> <div style="font: 400 13px tahoma; color: #00f"><?=langSys::get('home_text')?></div> </div> <br /> <br /> <center> <select id="sel_lang"> <option value="pt_br">Portugues</option> <option value="en">English</option> </select> </center> <script type="text/javascript"> var curLang = '<?=langSys::$lang?>'; var oSelect = document.getElementById('sel_lang'); for(var i=0; oSelect.options[i]; ++i) { if(oSelect.options[i].value == curLang) { oSelect.options[i].selected = true; break; } } oSelect.onchange = function() { document.location.href = '?lang='+this.options[this.selectedIndex].value; } </script> </body> </html> Lembrando que o propósito é dessa classe é ser estática, portanto não vai adiantar nada criar objetos dela.
-
Não preciso dizer que esse é o momento da filtração...
-
@hennet Sugiro que use o PhpCaptcha: http://www.ejeliot.com/pages/2
-
<body style="background-color: #000"> <div id="lol" style="text-align: center; font-size: 50; padding-top: 200"></div> <script type="text/javascript"> // <![CDATA[ var div = document.getElementById('lol'); var current = 0; var count = 15; var data = [ ['<o/', 'red'], ['|o|', 'green'], ['/o/', 'blue'], ['\\o>', 'yellow'], ['\\o/', 'orange'], ['\\o|', 'white'], ['/o\\', 'purple'] ]; var fLol = function() { div.innerHTML = ''; for(var i=0; i<count; ++i) { current = Math.floor(Math.random()*data.length); div.innerHTML += '<span style="color: '+data[current][1]+'">'+data[current][0]+'</span> '; } } setInterval('fLol()', 200); // ]]> </script> </body>
-
Se é pra postar artigo traduzido online, é melhor postar direto em inglês ou então nem postar, porque não deixa de ser um flood que ninguém vai entender.
-
Muit bom brow, mas você se esqueceu do mais importante: Refletir muito bem antes de passar qualquer tipo de dado para um membro da equipe, principalmente no começo, seja uma informação, um arquivo, um acesso, etc.
-
Função Para Adicionar Players No Players.xml
tópico respondeu ao Nostradamus de Arkilus em Tutoriais de Websites
Boa brow, tá aí uma forma decente de mexer no players.xml que muita gente acha que não serve pra nada. aehauaeuaeuaeuaehaeaeuh -
http://www.codigofonte.net/dicas-113/links...os-query-string
-
Monsters Check-list V1.0 - By Arkilus
tópico respondeu ao Arkilus de Arkilus em Tutoriais de Websites
Esse script captura todos os monstros de uma tabela em um site, que supostamente lista todos os monstros do global. A partir dessa lista, ele checa com os arquivos da pasta de monstros de seu servidor, e imprime aquela lista do site, deixando em vermelho os montros não encontrados na pasta. -
Monsters Check-list V1.0 - By Arkilus
tópico respondeu ao Arkilus de Arkilus em Tutoriais de Websites
Eu avisei disso quando postei o tópico, para evitar isso é só usar os links para downloads ou pegar do pastelog. -
Monsters Check-list V1.0 - By Arkilus
tópico respondeu ao Arkilus de Arkilus em Tutoriais de Websites
Até daria -só o total-, acontece que não seria muito útil, uma vez que a ideía do script é para uso no desenvolvimento mesmo. -
Monsters Check-List v1.0 - by Arkilus Como pedido por um colega de equipe, eu escrevi esse script que mostra uma lista de todos os monstros do tibia, destacando os que estão faltando. Você terá que configurá-lo de acordo com sua necessidade, a configuração padrão utiliza a lista de monstros do T!biaBR. v1.0 Simple Design Default settings for T!biaBR's page Cache File created at first use, and updated as set List with images Obs: caso copie direto do fórum, será necessário substituir as partes de [Retirado] pela URL do T!biaBR Enjoy Download: PasteLog PasteLog View: <a href="http://paste.lymas.com.br//?q=4173" target="_blank">http://paste.lymas.com.br//?q=4173</a> <?php /** * Monsters Checklist * by Arkilus * * v1.0 - 08/03/2007 * * - Please scroll down and fill in * - configuration's variables */ ?> <style type="text/css"> body { background: #E7E7E7; } .cache { color: #283485; font: 800 13px arial; background: #FFE1E1; padding: 4px; border: 1px ridge #000; } table.monsters { background: #E8EEFF; border: 1px ridge #00095F; } .monsters td.yes { background: #B4FFBE; border: 1px ridge #F1FFF2; color: #106000; } .monsters td.no { background: #FFB4B4; border: 1px ridge #FFF1F1; color: #BF0808; } .mname { padding: 3px; } </style> <?php /* * * * * Script Settings * * * */ // URL to the monsters page, it must be any url where all tibia monsters are listed (with images) $sURL = 'http://[Retirado]/?rs=OpenLink&rst=&rsrnd=1173373384390&rsargs[]=38&rsargs[]=0&rsargs[]=0'; // Base URL for images $sImgBase = 'http://[Retirado]/imgs/conteudo/criaturas/'; // The 'nucleus' of the script, this regexp pattern must cover both the images src and monster name parts $sFindPattern = '/criaturas\/(\w+)\.gif"><\/td>\s*<[^<]*<a href="#" onclick="Detalhes\([^>]+><b>([a-z ]+)/i'; // The file that will be used as cache for the page $sFile = './tbr.txt'; // Directory where are all monsters files $sMonsterDir = 'C:\The Forgotten Server 0.0.83\binary\data\monster'; // Minimum time (seconds) to the cache file be updated $iCacheTime = (10 * 24 * 3600); echo '<base href="'.$sImgBase.'" />'; /* * * * * Functions Definition * * * */ /** * Returns a page-string containing formatted-html */ function getPage() { global $sFile, $sURL, $iCacheTime; if(!file_exists($sFile) || filemtime($sFile) > time() + $iCacheTime) { $oFp = fopen($sFile, 'w+'); fwrite($oFp, file_get_contents($sURL)); fclose($oFp); echo '<center><span class="cache">CACHE FILE UPDATED</span></center> <br />'; } $sPage = file_get_contents($sFile); $sPage = stripslashes($sPage); return $sPage; } /** * Callback for array_walk */ function ArrayToFName(&$v, $k) { $v = strtolower($v); $v = preg_replace('/\s+/', '', $v); } /** * Reads monsters directory and returns as array */ function getDirMonsters(&$aDirMonsters, $sDir) { $oDir = dir($sDir); while(($sFile = $oDir->read()) !== false) { if(eregi('.xml$', $sFile)) { $aDirMonsters[] = str_replace('.xml', '', $sFile); } } array_walk($aDirMonsters, 'ArrayToFName'); } /** * Prints Table-Rows with data from arg-Arrays */ function printMonsterTable($aPgMts, $aDirMts) { global $aMonsterNames, $aMtsImgs; $iTR = 0; echo '<tr>'; foreach($aPgMts as $iKey => $sPgMt) { if($iTR > 2) { echo '</tr><tr>'; $iTR = 0; } $bMtIn = in_array($sPgMt, $aDirMts); ?> <td valign="middle" align="center" class="<?=($bMtIn) ? 'yes' : 'no'?>"><img src="<?=$aMtsImgs[$iKey]?>.gif" align="absmiddle" alt="n/f" /> <span class="mname"><?=$aMonsterNames[$iKey]?></td> <td valign="middle" align="center" class="<?=($bMtIn) ? 'yes' : 'no'?>"><?=($bMtIn) ? '<span style="color:green">YES' : '<span style="color:red">NO'?></td> <?php ++$iTR; } } /* * * * * Action * * * */ preg_match_all($sFindPattern, getPage(), $aMatches); $aMonsterNames = $aMatches[2]; array_walk($aMatches[2], 'ArrayToFName'); $aMtsImgs = &$aMatches[1]; $aMonsters = &$aMatches[2]; $aDirMonsters = array(); getDirMonsters($aDirMonsters, $sMonsterDir); echo '<table align="center" cellspacing="3" class="monsters"><tr><th>Monsters Check-List</th></tr>'; printMonsterTable($aMonsters, $aDirMonsters); ?> </table>
-
// Tópico Movido, obrigado pelo report
-
SQL em PHP com o PEAR::MDB2 Introdução As conexões com um banco de dados SQL estão presentes em 95% das páginas que utilizam algum tipo de controle de dados, mas o grande problema é que nem sempre quem escreve esses scripts sabe fazê-lo de forma segura e sustentável. A forma mais comum e usada hoje em dia para uma conexão MySql seria o clássico mysql_connect(...). Acontece que essa forma de conexão obriga todos os utilizadores do script a usarem MySql, que nem sempre é o banco de dados desejado. Para contornar isso, um grupo de programadores da PEAR* decidiram criar um package (uma classe) que melhorasse as conexões SQL e ao mesmo tempo fosse compatível e fácil de ser usado em diversos tipos de bancos de dados, assim surgiu o package PEAR::DB, posteriormente substituído pela mais nova solução para SQL em PHP: o PEAR::MDB2. *PEAR é um repositório de packages (classes) PHP criado e mantido por centenas de programadores, com o intuito de criar e melhorar a usabilidade do PHP. Eles disponibilizam diversos pacotes que estão em constantes melhorias e cada qual com uma utilidade mais incrível que o outro. Tamanhas são as utilidades dos pacotes PEAR que as versões mais novas do PHP já são distribuídas com o PEAR e seus pacotes mais usados já instalados. Mais informações no site www.pear.php.net Se você utiliza uma versão do PHP ou um servidor recentes, é muito provável que já tenha tanto o PEAR como o básico do pacote MDB2 instalados. Instalando o MDB2 e o suporte para MySql e MySql Improved Caso o MDB2 não esteja instalado, siga os seguintes passos para baixar e instalar ele no PEAR (em Windows, mas em Linux é praticamente a mesma coisa): Vá em Iniciar -> Executar -> Digite cmd e dê enter O prompt de comando se abrirá, então navegue até a pasta em que esta o PEAR (normalmente /php/pear). Por exemplo, se a pasta do php estiver em C:\server\, digite cd C:\server\php Digite as seguintes linhas, aguardando o tempo de download/instalação de cada uma: pear install MDB2 pear upgrade MDB2 pear install MDB2_Driver_Mysql pear install MDB2_Driver_Mysqli Pronto, agora o pacote MDB2 está instalado e com suporte a MySql e MySql Improved Utilizando o PEAR::MDB2 **Conexão ****Incluindo o pacote A primeira coisa a se observar, é que para podermos usar um package da PEAR é necessário dar um include no arquivo principal deste, no nosso caso, devemos adicionar o arquivo MDB2.php no início de tudo (não é necessária a especificação do caminho): require_once('MDB2.php'); ****Declaração da DSN Feito isso, devemos nos conectar ao banco de dados. As conexões dos packages da PEAR (DB e MDB2) seguem uma sintaxe um pouco diferente da comumente utilizada pelos famosos mysql_connect, ou pg_connect, etc. Começando por uma DSN, que é uma string que possui uma forma especifica de declaração, englobando os dados da conexão: phptype://usuario:password@host/database Onde: phptype = Tipo de DB, valores aceitos: fbsql: FrontBase ibase: InterBase mssql: Microsoft SQL Server mysql: MySQL mysqli: MySQL Improved oci8 : Oracle 7/8/9 pgsql: PostgreSQL querysim: QuerySim sqlite: SQLite [*]usuario = Nome de usuário [*]password = Senha [*]host = Host [*]database = Nome da DB Exemplo: $dsn = 'mysqli://josh:waitzkin@localhost/chess'; Uma outra forma de declarar a DSN seria através de uma array: $dsn = array( 'phptype' => 'mysqli', 'username' => 'josh', 'password' => 'waitzkin', 'hostspec' => 'localhost', 'database' => 'chess' ); ****Conectando Declarada a DSN, falta chamar o método de conexão, existem três: connect : era mais usado no package PEAR::DB, mas caiu em desuso com o MDB2 (mas preservado). singleton : é usado para evitar que se sejam criadas duas conexões com a mesma DSN. Caso já haja alguma, ele retonará um erro. factory : é o mais utilizado e recomendado para a maioria das tarefas Para chamá-los devemos precedê-los de MDB2:: e usar como argumento a DSN: $con =& MDB2::factory($dsn); # ou $con =& MDB2::factory('mysqli://josh:waitzkin@localhost/chess'); Então será retornado um objeto referente a esta conexão. **Interagindo com o Banco de Dados ****Pesquisas - Query Simples Para recuperarmos dados da DB (SELECT, SHOW, EXPLAIN, etc) utilizamos o método query. Ele deve ser chamado através do objeto da conexão: $result =& $con->query($sql_query); Será retornado um handler para o resultado, e através dele podem ser usados outros métodos (atente novamente para o uso de referências - &). Exemplos: $result =& $con->query('SELECT * FROM table WHERE column=1'); $select = 'SELECT column FROM table WHERE column=0 ORDER BY date'; $result =& $con->query($select); - Número de linhas Retornadas Para verificar o número de linhas retornadas devemos usar o método numRows() do objeto-resultado. Exemplo: $rows = $result->numRows(); - Retirando dados do objeto-resultado *Para os próximos exemplos estarei usando a seguinte tabela: *Supondo que $result seja o resultado dessa query Após realizada a query, devemos chamar outro método caso desejemos usar os dados retornados: o fetchRow(). Este método aceita como parâmetro a forma como o resultado deve ser retornado, existem três tipos: MDB2_FETCHMODE_ORDERED - Modo padrão, retorna uma array em que cada chave numérica corresponde á coluna mais á esquerda, em ordem crescente e começando pelo 0. $row =& $result->fetchRow(MDB2_FETCHMODE_ORDERED); Resultado: $row[0] = "Valor1" $row[1] = 1 $row[2] = "Valor3" Retorno do print_r($row): Array ( [0] => Valor1 [1] => 1 [2] => Valor3 ) MDB2_FETCHMODE_ASSOC - Esse modo retorna uma array em que cada chave é o nome da coluna correspondente. $row =& $result->fetchRow(MDB2_FETCHMODE_ASSOC); Resultado: $row["coluna1"] = "Valor1" $row["coluna2"] = 1 $row["coluna3"] = "Valor3" Retorno do print_r($row): Array ( [coluna1] => Valor1 [coluna2] => 1 [coluna3] => Valor3 ) MDB2_FETCHMODE_OBJECT - Esse modo retorna um objeto em que cada coluna é tratada como um atributo. $row =& $result->fetchRow(MDB2_FETCHMODE_OBJECT); Resultado: $row->coluna1 = "Valor1" $row->coluna2 = 1 $row->coluna3 = "Valor3" Retorno do print_r($row): stdClass Object ( [coluna1] => Valor1 [coluna2] => 1 [coluna3] => Valor3 ) MDB2_FETCHMODE_DEFAULT - Esse método retorna uma array na forma default configurada no PEAR, que por padrão é o ORDERED - Configurando o padrão FETCHMODE da conexão Alternativamente podemos configurar um FETCHMODE padrão para a conexão com que vamos trabalhar através do método setFetchMode(). Feito isso, caso chamemos, por exemplo, um fetchRow() (sem argumento), a forma retornada seria a indicada nesse método. Uso: $con->setFetchMode(MDB2_FETCHMODE_ORDERED); // ou $con->setFetchMode(MDB2_FETCHMODE_ASSOC); //ou $con->setFetchMode(MDB2_FETCHMODE_OBJECT); A cada chamada á função fetchRow() será retornada uma linha, e false caso a última linha já tenha sido lida. - Lendo todas as linhas retornadas Para ler todas as linhas retornadas existem duas formas: º Loop while($row =& $result->fetchRow(MDB2_FETCHMODE_ASSOC)) { echo "<pre>"; print_r($row); echo "</pre>"; // Ações... } Saída: Array ( [coluna1] => Valor1 [coluna2] => 1 [coluna3] => Valor3 ) Array ( [coluna1] => V1 [coluna2] => 2 [coluna3] => V3 ) º Método fetchAll() Esse método retorna uma array bidimensional contendo todas as linhas do objeto-resultado. $row =& $result->fetchAll(MDB2_FETCHMODE_ASSOC); Saída do print_r($row): Array ( [0] => Array ( [coluna1] => Valor1 [coluna2] => 1 [coluna3] => Valor3 ) [1] => Array ( [coluna1] => V1 [coluna2] => 2 [coluna3] => V3 ) ) º query() + fetchAll() = queryAll() Uma maneira mais rápida e prática e fazer isso tudo seria o uso do método queryAll(): $row =& $con->queryAll("SELECT * FROM test", MDB2_FETCHMODE_ASSOC); A saída desse código seria a MESMA que a mostrada acima no método fetchAll(), porém, deve-se notar que o uso desse método impossibilita o uso de outros, como por exemplo o numRows() - que ainda assim pode ser contornado por funções de array. ****DMQ - Data Manipulation Queries - Query Simples Para executar-se queries de manipulação de dados (INSERT, UPDATE, DELETE), não mais deve ser o usado o método query() e sim o exec() Esse método retornará um erro caso seja usado com queries que não sejam DMQs, como SELECT. $nrows =& $con->exec($sql_query); Será retornado o número de linhas afetadas (note que no MDB2 não há mais o método affectedRows()). Exemplos: $nrows =& $con->exec("INSERT INTO test(coluna1, coluna2, coluna3) VALUES ('v_col1', 3, 'v_col3')"); $del = "DELETE FROM test WHERE coluna2='3'"; $nrows =& $con->exec($del); ****Tratamento de erros Para evitar problemas tanto no código como de segurança, deve-se sempre fazer uma verificação se a ação não resultou em um erro, para tanto usamos o método PEAR::isError($objeto-resultado). Verificado que existe um erro, podemos obter a mensagem enviada pelo MDB2 através do método getMessage() Exemplos: $result =& $cnt->query("SELECT * FROM tabela_inexistente"); if(PEAR::isError($result)) { die($result->getMessage()); } Saída: MDB2 Error: no such table #####################======================##################### Exemplo completo de como deveria ser escrito um script utilizando o PEAR::MDB2 : // Inclusão do pacote require_once('MDB2.php'); // Declaração da DSN $dsn = array( 'phptype' => 'mysqli', 'username' => 'josh', 'password' => 'waitzkin', 'hostspec' => 'localhost', 'database' => 'chess' ); // Conectando $con =& MDB2::factory($dsn); if(PEAR::isError($con)) die($con->getMessage()); // Configurando o FETCHMODE padrão $con->setFectchMode(MDB2_FETCHMODE_OBJECT); // Realizando um SELECT $select = "SELECT * FROM test"; $sel_res =& $con->query($select); if(PEAR::isError($sel_res)) die($sel_res->getMessage()); elseif($sel_res->numRows() < 1) die("DataBase error: no rows returned"); else { while($row =& $sel_res->fetchRow()) { /*...*/ } } // Realizando um INSERT $insert = "INSERT INTO test(coluna1, coluna2, coluna3) VALUES ('v_col1', 4, 'v_col3')"; $nrows =& $con->exec($insert); if(PEAR::isError($nrows)) die($nrows->getMessage()); elseif($nrows < 1) die("DataBase error: no rows affected"); #####################======================##################### Alguns sites para se ler sobre o assunto: Oficial da PEAR: www.pear.php.net/manual/en/package.database.mdb2.php Migrando do DB para o MDB2: www.phpied.com/db-2-mdb2 CODESCHMIE: codeschmie.de/archives/127-MDB2-Cheatsheet.html #####################======================##################### Quaisquer dúvidas é só postar! Enjoy
-
Legal de você ter aprendido sozinho, mas parece que não foi você que escreveu esse artigo, custa por os créditos? Pra que fingir ser o que não é? Roubar o trabalho dos outros em benefício próprio? *PS: Aprendeu sozinho? Caramba! Você descobriu até as datas!
-
CRÉDITOS? Esse site lhe diz algo? http://www.dimap.ufrn.br/~aguiar/Manuais/PHP/2.htm Incrível...
-
CRÉDITOS? Esse site lhe diz algo? http://www.dimap.ufrn.br/~aguiar/Manuais/PHP/1.htm
-
Sistema De Login Php/sql Por Sessions
tópico respondeu ao Arkilus de Arkilus em Tutoriais de Websites
É claro que seria mais seguro, nesse exemplo eu suqu erfiltro a entrada do usuário. A idéia é expor o esqueleto básico do sistema, mas já enfatizando que copiar e colar esse código não vai ajudar muito. -
Sistema Básico de Login PHP/SQL por Sessions Introdução Na web, sempre que se deseja trabalhar com sistemas mais dinâmicos, que filtrem o usuário e a partir daí libere novas funções ou aja diferente é necessário o uso do famoso ‘Sistema de Login’. Este consiste num sistema que grava no servidor e/ou browser informações do usuário de diversas formas, a mais comum é através de uma interface de registro, onde o usuário insere algumas informações e também uma senha, com a qual ele poderá ser reconhecido pelo servidor. Estas informações são comumente gravadas em um banco de dados ou (raramente, por falta de praticidade) em arquivos de texto, a partir de onde elas serão recuperadas e checadas quando um usuário tentar logar (entrar) no sistema. Convém que enquanto o usuário estiver visitando diversas páginas do site ele permaneça logado no sistema, e para que as informações não se percam são usados alguns métodos de gravação. O mais comum deles é chamado Session. Nesse tipo o servidor cria variaveis internas para aquele usuario, e ele permanecerá logado no sistema enquanto mantiver o browser aberto (mas o usuário pode ser deslogado caso fique muito tempo sem atividade no site, por mais que o mesmo esteja aberto). Propósito desse tutorial Expôr o esqueleto de um sistema de login PHP/SQL por Sessions, com devidas explicações sobre o mesmo. Conhecimentos Necessários Básicos de HTML, PHP e SQL Tabela MySql usada CREATE DATABASE testes;CREATE TABLE `users` ( `id` int(3) unsigned NOT NULL auto_increment, `nick` varchar(50) collate latin1_general_ci NOT NULL, `password` varchar(50) collate latin1_general_ci NOT NULL, PRIMARY KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=2;INSERT INTO `users` VALUES (1, 'admin', 'admin'); Iniciando uma Sessão Sempre que formos usar sessions devemos fazer chamada à função session_start() na primeira linha do documento (antes de qualquer saída para o browser) pois ela interfere nos headers. Sempre que uma sessão é iniciada um cookie chamado PHPSESSID é instanciado com um valor string de 32bits, correspondente ao ID da sessão (por exemplo: d43da207c766778f46ffd087e7e319b1). Notem que essa função não quer dizer que estamos iniciando uma sessão do 0, e sim que podemos tanto estar iniciando ou dizendo ao servidor que iremos usar as variáveis de sessão naquele script. Se quisermos usar as variáveis de sessão mas não chamarmamos session_start() no início do script elas não estarão disponiveis. Instanciando Variáveis Todas as veriáveis de sessão são armazenadas na array global $_SESSION – global porque ela pode ser vista em todos os níveis, tanto no script geral como dentro de qualquer função ou classe. Instanciamos variáveis de sessão da mesma forma que instaciamos elementos de uma array: $_SESSION[‘nome_da_variavel’] = ‘valor’; Supondo que você queira usar Sessions para controle de login, o ideal é que seja criada uma array em $_SESSION específica para essa tarefa, com elementos que conterão os devidos valores. Exemplo: $_SESSION[‘mysite’] = array(‘user’ => $usuario, ‘access’ => $acesso); Dessa forma quando se quiser eliminar todas as variáveis referentes a isso é só usar unset($_SESSION[‘mysite’]) Finalizando uma sessão Caso desejemos finalizar a sessão (o famoso logout) devemos fazer chamada à função session_destroy(), mas antes disso é necessário que todas as variáveis da sessão sejam destruídas, por meio de unset($_SESSION[‘variavel’]) – lembrando que nunca deve ser usado unset($_SESSION) no meio do script, pois isso tornará o uso posterior de sessões inacessível. Lembrando que a sessão será automaticamente finalizada por inatividade ou fechamento do browser. Criando o código Estarei expondo aqui um código simples que inclui basicamente forms HTML e o script PHP para o sistema de login. Eplicações estão em comentários. Script <?php session_start();mysql_connect('localhost', 'root', '');mysql_select_db('testes');// Checando se o usuário já está logadoif(isset($_SESSION['mysite'])){ // Deslogando? if($_POST['action'] == 'logout') { logout(); echo 'Você saiu do sistema'; echoLoginForm(); return; } // Simplesmente visitando a página echo 'Logado como <b>'.$_SESSION['mysite']['user'].'</b><br />'; echoLogoutForm(); return;}// Assumindo que o usuário não está logado...// Checando se o script foi chamado por submit do post de loginif(!$_POST['step']) echoLoginForm();else checkInputs();// Imprime o form para logar no sistemafunction echoLoginForm() { ?> <form method="post" action="<?=$PHP_SELF?>"> <table> <tr><td>Nick: <input type="text" name="login_nick" value="<?=$_POST['login_nick']?>" /></td></tr> <tr><td>Password: <input type="password" name="login_pass" value="<?=$_POST['login_pass']?>" /></td></tr> <tr><td><input type="submit" value="Logar" /></td></tr> </table> <input type="hidden" name="step" value="1" /> </form> <?php } // Imprime o form para deslogar do sistemafunction echoLogoutForm(){ ?> <form method="post" action="<?=$PHP_SELF?>"> <input type="submit" value="Logout"> <input type="hidden" name="action" value="logout"> </form> <?php}// Checa as entradas, caso erro este será informado, caso OK a função login() é chamadafunction checkInputs(){ $erro = false; // Campo Nick vazio? if(!$_POST['login_nick']) { echo 'Campo <b>Nick</b> vazio! <br />'; $erro = true; } // Campo Password vazio? if(!$_POST['login_pass']) { echo 'Campo <b>Password</b> vazio! <br />'; $erro = true; } // Nenhum Campo vazio? Vamos então checar as entradas if(!$erro){ $rst = mysql_query('SELECT * FROM users WHERE nick="'.$_POST['login_nick'].'" AND password="'.$_POST['login_pass'].'"'); // Caso a query tenha falhado - nenhum resultado retornado if(mysql_num_rows($rst) < 1){ echo '<b>Password</b> e/ou <b>usuario</b> incorretos <br />'; $erro = true; } } // Nenhum erro, vamos logar no sistema if(!$erro) login(); // Erro? Então reimprimimos o form de login else echoLoginForm();}// Realiza o login no sistemafunction login(){ $rst = mysql_query('SELECT id FROM users WHERE nick="'.$_POST['login_nick'].'"'); $usr_id = mysql_result($rst, 'id'); // Configura as variáveis de sessão $_SESSION['mysite'] = array('user' => $_POST['login_nick'], 'usr_id' => $usr_id); echo 'Logado como <b>'.$_POST['login_nick'].'</b>'; echoLogoutForm();}// Desloga do sistemafunction logout(){ unset($_SESSION['mysite']); session_destroy(); } Com esse script eu tentei, além de tudo, demonstrar que não é preciso criar-se vários scripts com pouco conteúdo cara para que realizem tarefas extremamente específicas, podemos fazer tudo em um script só. Infelizmente pelo fato de o fórum não ter sistema de coloração de sintaxe PHP o código esteja um pouco difícil de ler, mas darei a idéia. Quaisquer dúvidas é só postar!
-
Quem Está Navegando 0 membros estão online
- Nenhum usuário registrado visualizando esta página.