PHP : Importando arquivos de texto puro para o banco de dados

janeiro 11th, 2009 | by DragaO~ |

bom, aqui estou novamente trazendo mais um tutorial para este pequeno blog que tento manter :D
o artigo de hoje vai tratar de como fazer para cadastrar o conteudo de um arquivo de texto diretamente no banco de dados
aqui vai um exemplo bem comum: seu cliente que quer ter uma parte do site onde ele envie emails para os contatos cadastrados, mas quer que você inclua toda aquela lista de 30 mil emails que ele já tem armazenado num arquivo texto, no seu banco

uma saída bem “prática”, é simplesmente “fazer no braço”, ou seja, cadastrar email-por-email :D
bom, antes de mais nada, precisamos ter um arquivo contendo emails, portanto, vamos utilizar este aqui:

dragao@pensaofunbari.com
no-reply@pensaofunbari.com
nao-responda@pensaofunbari.com

antes que perguntem, sim, sou extremamente criativo para criar emails :D

bom, tendo o arquivo com os emails “em mãos”, precisamos ter um banco de dados, que é onde os emails serão armazenados
para aqueles que não sabem criar uma tabela no banco de dados, vou mostrar os procedimentos a serem feitos no caso de o banco de dados ser um servidor MySQL

1 – nos logamos no nosso banco de dados (seja usando uma GUI ou diretamente pela linha de comando, tanto faz, não vou entrar em detalhes nessa parte pois existem muitas possibilidades)

2 – criamos o nosso banco

CREATE DATABASE banco_teste

3 – “entramos” no banco :

USE banco_teste

4 – criamos a nossa tabela que receberá os emails

CREATE TABLE emails
(
    id int(10) AUTO_INCREMENT PRIMARY KEY,
    email varchar(250)
)

aqui estamos criando uma tabela que vai conter um numero de identificaçao para cada email (o campo “id”), e este campo é do tipo inteiro
também estamos criando um campo chamado “email”, do tipo varchar de comprimento 250, que conterá, obviamente, o email

pronto, temos uma tabela simples ao nosso dispor :D

agora precisamos fazer com que o PHP pegue o nosso arquivo e “jogue” os dados dentro do banco de dados, e isso é realmente muito simples, vejam só:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?
//nome/ip do servidor de banco de dados
$servidor = "localhost";
//usuario do banco de dados
$usuario = "root";
//senha do usuario
$senha = "";
//banco a ser utilizado
$banco = "banco_teste";
 
//abrindo a conexao e armazenando-a em uma variavel
$conexao = mysql_connect($servidor, $usuario, $senha);
//selecionando o nosso banco
mysql_select_db($banco, $conexao);
 
//nessa variavel, temos o caminho para o arquivo que deseja importar para
//o banco de dados
$arquivo = "/caminho/para/o/arquivo/que/queremos/importar.txt";
//abrindo o arquivo em modo somente leitura e armazenando seu ponteiro
$arq = fopen($arquivo, 'r');
 
//existem duas possibilidades para este exemplo, vou optar pela que julgo ser mais simples
//e abaixo explico melhor sobre elas
 
//enquanto o arquivo possuir conteudo, le uma linha dele
//e armazena o valor na varivel "$linha"
while(($linha = fgets($arq)) != false)
{
    //criando a query que vai cadastrar no banco
    $query = "INSERT INTO emails (email) VALUES ('" . $linha . "')";
    //enviando a query pro banco
    mysql_query($query, $conexao);
}
//neste ponto do script jah temos todos nossos emails cadastrados, portanto
//devemos fechar nosso arquivo
fclose($arq);
?>

agora, explicando as linhas:

1
2
3
4
5
6
7
8
9
<?
//nome/ip do servidor de banco de dados
$servidor = "localhost";
//usuario do banco de dados
$usuario = "root";
//senha do usuario
$senha = "";
//banco a ser utilizado
$banco = "banco_teste";

apenas variaveis com as configuraçoes para acessar o banco de dados, creio nao ter muito o que se explicar aqui ;)

12
$conexao = mysql_connect($servidor, $usuario, $senha);

aqui estamos abrindo uma conexao com o banco de dados e armazenando-a em uma variável, bastante simples também :D

14
mysql_select_db($banco, $conexao);

aqui estamos selecionando o nosso banco de dados no mysql e informando que queremos utilizar conexao que abrimos arteriormente

18
$arquivo = "/caminho/para/o/arquivo/que/queremos/importar.txt";

aqui simplesmente ponha o caminho completo para o arquivo que deseja importar
você pode fazer de dois modos :
1 – colocar o caminho absoluto do arquivo (ex : em windows, “C:Documents And SettingsUsuarioMeus Documentosarquivo.txt”; em linux “/home/usuario/arquivo.txt”) ERRADO, não utilize
2 – colocar o caminho relativo em relação ao script que está sendo executado (caso o arquivo esteja na mesma pasta do script, basta colocar “./nome_do_arquivo.txt”, por exemplo)

agora que terminamos de ver e entender o código acima, vamos entender os dois modos que existem para importar arquivos, com esse padrão, ao banco de dados (caso alguem saiba outro, por favor, diga que eu adicionarei aqui):
1. criando uma query por vez e enviando-a para o banco, que foi o que fizemos neste exemplo
2 – criar uma unica query com todos os valores a serem enviados ao banco

porém, cada caso possui o seu problema, veja :
pergunta : se mandássêmos query-por-query ao banco (como fizemos no exemplo), o que acontecerá caso dê algum erro durante a execução dos emails?
resposta : ocorreria um erro e comprometeria a integridade dos dados, pois seria muito trabalhoso voltar o banco ao estado original de onde ele começou (deletar todos os emails que foram cadastrados para tentar novamente); veja, seria dificil até mesmo descobrir qual foi o email problemático (ok, poderíamos usar a função “mysql_error()” ou ir “ecoando” query-após-query, para procurar o problema, mas imaginem o trabalho que isso daria

pergunta : se criassê-mos uma query enorme, contendo todas as inserções necessárias, podería-mos mandar “tudo ao mesmo tempo”, mantendo assim, a integridade do banco de dados, mas e se o arquivo tivesse 100 Mb de emails?
resposta : o servidor não iria aguentar o intenso tráfego de dados e iria encerrar o script (ok, poderíamos utilizar a função “ini_set()” e modificar os valores das diretivas “memory_limit”, “max_execution_time” e “upload_max_filesize” para valores maiores, mas em alguns servidores nós não possuímos essa alternativa, pois essa função pode ser bloqueada)

a solução que eu acho ser a melhor, é fazer localmente um script que “divida” esse “arquivão” em várias partes, e enviar elas pro banco uma-a-uma (rodando via script, de preferência)
visto que transações com arquivos grandes assim são relativamente raros
mas é claro que, se for necessário enviar um arquivo de 100 Mb de texto quase que diariamente, não tem outra alternativa a não ser configurar o php.ini para aceitar tais arquivos

mas lembre-se, cada caso é um caso, a idéia deste artigo é apenas ensinar o básico e te mostrar quais são as funções que nos “ajudam” a fazer o trabalho, o resto é com você ;)

sentiu uma certa dificuldade em entender o que foi dito aqui? aconselho a leitura de outros dois posts meus:
Uploade de arquivos com PHP e Cadastro simples com PHP e MySQL

bom, vou ficando por aqui com este artigo, e lembre-se

  1. em caso de dúvidas não sinta vergonha, pergunte
  2. achou um erro no código? diga onde, eu irei arrumar
  3. tem idéia de como fazer isso de uma maneira melhor? compartilhe
  4. achou algum erro de link, nomenclatura ou até mesmo português? por favor, avise-me

referência das funções:
mysql_connect(), mysql_select_db(), fopen(), fgets(), mysql_query(), fclose(), ini_set(). mysql_error()

referência das diretivas de configuração:
max_execution_time, memory_limit, upload_max_filesize

até a próxima

VN:F [1.4.3_701]
Rating: 0.0/10 (0 votes cast)


Postagens parecidas/interessantes:

  1. 42 Responses to “PHP : Importando arquivos de texto puro para o banco de dados”

  2. By Claiton on jan 15, 2009 | Reply

    Se puxo nesse post, detalhes excelentes…
    Cara, tu tem que começar a ganhar dinheiro com isso…
    AEHUEHUEHUEHAHE
    To brincando.
    Mas ó, acho que tu poderias falar também sobre postgres….
    Flw!

    Quote

    VA:F [1.4.3_701]
    Rating: 0.0/5 (0 votes cast)
  3. By DragaO~ on jan 15, 2009 | Reply

    obrigado pelo elogio :)
    sobre ganhar dinheiro, bom, todo mundo quer, o problema é que eu acho que ainda não tá na hora de pensar nisso, até mesmo porque o blog não tem tantos acessos assim, mas espero logo conseguir ajudar as pessoas com suas dúvidas cotidianas, e mostrar que não é “todo mundo que sabe PHP” ;)
    e ainda quero escrever aquele post que eu havia comentado, sobre a mentalidade dos programadores PHP (e não somente PHP, mas de um modo mais geral) e a mentalidade dos clientes/chefes (leia-se “pessoas que apenas querem as coisas”), mas ainda não tive tempo

    sobre o PostgreSQL, eu não sei se eu poderia explicar coisas com ele, pois eu nunca utilizei, mas se tu quiseres, pode corrigir qualquer coisa e dando tua opinião sobre as diferenças que existem no PostgreSQL que eu coloco as “notas” no post, assim ajuda à todos ;) (o mesmo vale pra Oracle, Firebird e todos outros)

    Obrigado pelo comentário :D

    Quote

    VN:F [1.4.3_701]
    Rating: 0.0/5 (0 votes cast)
  4. By meuNome on jan 16, 2009 | Reply

    Outra solução para o caso de dar problema em algum, seria colocar tudo dentro de uma transação. Antes do loop eu abriria a transação, no final se desse certo eu comitava e se desse pau daria um rollback, sairia do loop e seria feliz.

    Quote

    VA:F [1.4.3_701]
    Rating: 0.0/5 (0 votes cast)
  5. By DragaO~ on jan 17, 2009 | Reply

    sim, lembro-me de ter cogitado esta hipótese, porém, mesmo indo na documentação do mysql e na documentação do php eu acabei não conseguindo fazer isso (talvez seja culpa do meu conhecimento de banco de dados ser tão limitado)
    mas se pudesse, eu gostaria que compartilhasse um trecho de código sobre como fazer isso, pois seria realmente de grande utilidade neste post ^^

    obrigado pelo comentario e volte sempre :D

    Quote

    VN:F [1.4.3_701]
    Rating: 0.0/5 (0 votes cast)
  6. By Andrew on jan 18, 2009 | Reply

    Parse error: syntax error, unexpected ‘{’ in /home/a8117690/public_html/dados.php on line 37

    Não entendi, só fiz colocar seu código e colei o meu junto… a linha que aponta ser este erro é esta:

    while(($linha = fgets($arq) != false)
    {
    //criando a query que vai cadastrar no banco
    $query = “INSERT INTO newsletter (email, codStatus, bloqueado, enviado, senha) VALUES (’” . $linha . “‘,’0′,’0′,’0′,’$nums’)”;
    //enviando a query pro banco
    mysql_query($query, $conexao);
    }

    Ele simplesmente diz que é na linha que tem só isso “{”

    Pode me dizer o que foi?

    Quote

    VA:F [1.4.3_701]
    Rating: 0.0/5 (0 votes cast)
  7. By DragaO~ on jan 18, 2009 | Reply

    opa, errinho meu XD
    bom, primeiramente obrigado pelo “aviso” ;D

    bom, o erro que o PHP tah dando eh bastante simples, veja :

    Parse error: syntax error, unexpected ‘{’ in /home/a8117690/public_html/dados.php on line 37

    ao traduzir este erro, ficaria algo como

    Parse Error : erro de sintaxe, inesperado ‘{’ em…

    ou seja, aquele abre-chaves não era esperado pelo PHP, logo o nosso erro estaria nessa linha :

    while(($linha = fgets($arq) != false)

    perceba que por descuido meu (e ter a mania de não testar nenhum código que posto aqui), acabou faltando um fecha-parentesis
    portanto, a linha escrita corretamente seria essa :

    while(($linha = fgets($arq) != false))

    já arrumei ali no post, mas mesmo assim agradeço (e muito) pelo aviso ;)

    obrigado pelo comentário e volte sempre :D

    Quote

    VN:F [1.4.3_701]
    Rating: 0.0/5 (0 votes cast)
  8. By Andrew on jan 18, 2009 | Reply

    Opa agora deu certo! Porém tenho um probleminha cara, e acho que também é no teu código.

    Seguinte, eu coloco la todo código meu e teu no script, e da certo, mais quando vou ver no BD, no lugar de ter adicionado as linhas que no caso são os emails, ficou um monte de número 1. E eu coloquei também uma variavel para por senha em cada email, só que sempre gera a mesma senha, ta bem dificil fazer isso :)

    Vou colar o código aqui pra você ver ele todo, me da uma luz ai :D

    Quote

    VA:F [1.4.3_701]
    Rating: 0.0/5 (0 votes cast)
  9. By DragaO~ on jan 18, 2009 | Reply

    pode colar o código todo sim :)
    apenas peço para que cole o código entre as tags “<pre lang=”php” line=”1″>” e “</pre>”, assim :

    <pre lang=”php” line=”1″>
    <?
    //todo
    //seu
    //codigo
    //aqui
    if(1 == 1)
    {
    echo “1 :D”;
    }
    ?>
    </pre>

    o resultado vai ser algo como isso :

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    <?
    //todo
    //seu
    //codigo
    //aqui
    if(1 == 1)
    {
        echo "1 :D";
    }
    ?>

    caso você não faça isso, o código não vai aparecer, pois o wordpress vai “comer” ele
    sei que é uma “deficiência” do wordpress, mas eu realmente não acho nenhum plugin que possibilite postar códigos PHP (e não tenho tido tempo pra escrever um)

    agradeço a compreensão ^^

    Quote

    VN:F [1.4.3_701]
    Rating: 0.0/5 (0 votes cast)
  10. By Andrew on jan 18, 2009 | Reply

    
    

    Ia te perguntar como fazer isso :)

    Quote

    VA:F [1.4.3_701]
    Rating: 0.0/5 (0 votes cast)
  11. By Andrew on jan 18, 2009 | Reply

    Vou criar um arquivo de txt no servidor onde testo os meus scripts, acessa aqui:

    http://www.andrewsimon.xpg.com.br/code.txt

    Da uma olhadinha ai please :D

    Quote

    VA:F [1.4.3_701]
    Rating: 0.0/5 (0 votes cast)
  12. By DragaO~ on jan 18, 2009 | Reply

    vou postar o teu código aqui, pois fica mais fácil, beleza?

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    
    <?
    //nome/ip do servidor de banco de dados
    $servidor = "localhost";
    //usuario do banco de dados
    $usuario = "root";
    //senha do usuario
    $senha = "";
    //banco a ser utilizado
    $banco = "banco_teste";
     
    //abrindo a conexao e armazenando-a em uma variavel
    $conexao = mysql_connect($servidor, $usuario, $senha);
    //selecionando o nosso banco
    mysql_select_db($banco, $conexao);
     
    //nessa variavel, temos o caminho para o arquivo que deseja importar para
    //o banco de dados
    $arquivo = "/caminho/para/o/arquivo/que/queremos/importar.txt";
     
    //abrindo o arquivo em modo somente leitura e armazenando seu ponteiro
    $arq = fopen($arquivo, 'r');
     
    //existem duas possibilidades para este exemplo, vou optar pela que julgo ser mais simples
    //e abaixo explico melhor sobre elas
     
    //gerando códificação, para que somente o usuário receptor possa excluir seu email da lista
    $codigo = md5($email);
    function gerador($numchar)
    {
       $letras = "1,2,3,4,5,6,7,8,9,0";  
       $array = explode(",", $letras);  
       shuffle($array);  
       $senha = implode($array, "");  
       return substr($senha, 0, $numchar);  
    }
    $nums = gerador(6);
    $nums = md5($nums);
    //enquanto o arquivo possuir conteudo, le uma linha dele
    //e armazena o valor na varivel "$linha"
    while(($linha = fgets($arq) != false))
    {
        //criando a query que vai cadastrar no banco
        $query = "INSERT INTO newsletter (email, codStatus, bloqueado, enviado, senha) VALUES ('" . $linha . "','0','0','0','$nums')";
        //enviando a query pro banco
        mysql_query($query, $conexao);
    }
    //neste ponto do script jah temos todos nossos emails cadastrados, portanto
    //devemos fechar nosso arquivo
    fclose($arq);
     
    echo 'Linhas adicionadas com sucesso!';
    ?>

    1 – as variaveis de conexao nao estão setadas para os valores do seu banco de dados (se você deixou-os assim para omitir as informações, ignore esta parte)

    1
    2
    3
    4
    5
    6
    7
    8
    
    //nome/ip do servidor de banco de dados
    $servidor = "localhost";
    //usuario do banco de dados
    $usuario = "root";
    //senha do usuario
    $senha = "";
    //banco a ser utilizado
    $banco = "banco_teste";

    2 – parece que você também não setou o arquivo que deseja importar para o banco, veja :

    18
    
    $arquivo = "/caminho/para/o/arquivo/que/queremos/importar.txt";

    caso você tenha apenas omitido essas informações, diga-me, pois então considerarei que ambas variáveis estão setadas e funcionando perfeitamente

    Quote

    VN:F [1.4.3_701]
    Rating: 0.0/5 (0 votes cast)
  13. By Andrew on jan 18, 2009 | Reply

    Não, não, já está tudo certo, tudo mesmo, o problema que está tendo eu acho que é com o código, pois já setei os dados do banco e o caminho do arquivo, só coloquei isso ai pra não mostrar os dados do BANCO e nem Arquivo, mais ta tudo setado normal já.

    Só não entendi porque fica 1 ao invés de aparecer a linha do TXT, e o gerador de números que estou ultilizando também fica o mesmo, eu testei com 3 linhas, apareceu 3 “1″ e 3 “códigos iguais”.

    Pode dar uma olhadinha ai?

    Quote

    VA:F [1.4.3_701]
    Rating: 0.0/5 (0 votes cast)
  14. By DragaO~ on jan 18, 2009 | Reply

    ah, beleza então ;)

    Só não entendi porque fica 1 ao invés de aparecer a linha do TXT

    poderia me mostrar umas…3 linhas de como é o arquivo que tu tem? (não precisam ser dados reais)

    e o gerador de números que estou ultilizando também fica o mesmo, eu testei com 3 linhas, apareceu 3 “1″ e 3 “códigos iguais”.

    o problema é que você gera o numero fora do while, por isso a variável sempre tem o mesmo valor ^^

    troque isso :

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    $nums = gerador(6);
    $nums = md5($nums);
    //enquanto o arquivo possuir conteudo, le uma linha dele
    //e armazena o valor na varivel "$linha"
    while(($linha = fgets($arq) != false))
    {
        //criando a query que vai cadastrar no banco
        $query = "INSERT INTO newsletter (email, codStatus, bloqueado, enviado, senha) VALUES ('" . $linha . "','0','0','0','$nums')";
        //enviando a query pro banco
        mysql_query($query, $conexao);
    }

    por isso :

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    //enquanto o arquivo possuir conteudo, le uma linha dele
    //e armazena o valor na varivel "$linha"
    while(($linha = fgets($arq) != false))
    {
        //gerando uma senha diferente para cada linha do arquivo
        $nums = gerador(6);
        $nums = md5($nums);
        //criando a query que vai cadastrar no banco
        $query = "INSERT INTO newsletter (email, codStatus, bloqueado, enviado, senha) VALUES ('" . $linha . "','0','0','0','" . $nums . "')";
        //enviando a query pro banco
        mysql_query($query, $conexao);
    }

    adicionalmente, percebi que você não estava concatenando a variável “$nums”, portanto, o PHP poderia estar “se perdendo” nessa hora, por isso concatenei-a para ti ;)

    veja se isso vai funcionar para ti, se não funcionar, peço apenas uma parte do arquivo para analisar

    Quote

    VN:F [1.4.3_701]
    Rating: 0.0/5 (0 votes cast)
  15. By Andrew on jan 18, 2009 | Reply

    dados.txt

    email1@teste.com
    email2@teste.com
    email3@teste.com

    Cara, eu to achando que sabe o que é, meu servidor não está deixando eu usar este arquivo, vou tentar colocar um arquivo externo, será se tem como?

    Já testei aqui os números e deu certo, ta gerando uma senha diferente para cada linha. Vou tentar o arquivo externo, pois acho que ele deve estar bloqueado o acesso, não sei né…

    Quote

    VA:F [1.4.3_701]
    Rating: 0.0/5 (0 votes cast)
  16. By Andrew on jan 18, 2009 | Reply

    Deu a mesma coisa com arquivo externo :(

    Quote

    VA:F [1.4.3_701]
    Rating: 0.0/5 (0 votes cast)
  17. By DragaO~ on jan 18, 2009 | Reply

    os dados parecem conferir
    o arquivo é assim mesmo, um email por linha?

    qual o tamanho do arquivo? em alguns hosts o valor configurado para manipulação de arquivos é o padrão (2 Mb), portanto poderia ser essa uma das causas

    sobre manipular arquivo externo, é um pouco mais complicado, pois necessita que seja habilitado no php.ini

    já tentou rodar isso localmente pra ver se funciona?

    se localmente funcionar, veja com sua hospedagem se eles limitam algo referente à manipulação de arquivos
    (eu, particularmente, já hospedei no xpg e achei uma porcaria)

    Quote

    VN:F [1.4.3_701]
    Rating: 0.0/5 (0 votes cast)
  18. By Andrew on jan 18, 2009 | Reply

    Bem, o arquivo só contem 3 linhas, já ultilizei outro código que quebra as linhas (aquela função $explode) só que não soube retirar, e funcionou, realmente pegou as linhas do TXT, mais só as 3 primeiras (negócio de $linha[0], $linha[1], $linha[2]) com o outro código… tu já testou no teu? Tenta ai, eu acho que o erro está no código, já que eu testei com outro e funcionou normalmente, só que quebrando as linhas! :(

    Pior que localmente não posso ultilizar agora, só se fosse mais tarde… ai eu vejo isso!

    XPG, só roda php se pagar né fiu! Eu uso o grátis lá a 3 anos. Mais a velocidade é sempre FULL (baixo a 265kb/s lá, servidor Brasileiro é bom né, ainda mais que é da Oi)

    Quote

    VA:F [1.4.3_701]
    Rating: 0.0/5 (0 votes cast)
  19. By DragaO~ on jan 18, 2009 | Reply

    puxa, novamente besteira minha =\
    parando pra analisar o código, vi que eu fiz besteira
    eu acabei corrigindo o código

    while(($linha = fgets($arq) != false)

    para

    while(($linha = fgets($arq) != false))

    e era isso que gerava todo erro: falta de atenção

    o correto é assim :

    while(($linha = fgets($arq)) != false)

    como pode ver, acabei trocando o local dos parentesis :S
    testei aqui todos arquivos e funcionou corretamente

    desculpe pelo “tempo perdido” :S

    veja se funciona agora com essa alteração
    e mais uma vez, obrigado por me chamar a atenção :D
    (isso que dá postar as coisas e não ter tempo pra testar)

    em tempo : aquele “1″ que tu estava recebendo, era apenas um “true” da função “fgets”, ou seja, a função estava te “dizendo” que ela tinha conseguido ler uma linha do arquivo, apenas isso

    bom, esse exemplo é perfeito pra mostrar como apenas um ponto pode fazer toda a diferença na programação :D

    Quote

    VN:F [1.4.3_701]
    Rating: 0.0/5 (0 votes cast)
  20. By Andrew on jan 18, 2009 | Reply

    AEEEEEEEEEEEEEEEEEEEEEEEEE!

    Vlw mesmo DragaO :D
    Vou passar a visitar mais vezes seu blog e começar a estudar PHP, vou me formar em programação :) muito rox programação!

    Vou tentar agora colocar um TXT com mais de 5 mil linhas, tenho vários aqui!

    Vlw e mais uma vez obrigado!

    Quote

    VA:F [1.4.3_701]
    Rating: 0.0/5 (0 votes cast)
  21. By DragaO~ on jan 18, 2009 | Reply

    de nada ^^
    vou esperar ansiosamente por suas visitas e comentários ;)

    se tiver problemas, não se esqueça : pergunte :D

    obrigado pelos comentários e correções ;)

    Quote

    VN:F [1.4.3_701]
    Rating: 0.0/5 (0 votes cast)
  22. By Andrew on jan 18, 2009 | Reply

    Com toda certeza!

    Quote

    VA:F [1.4.3_701]
    Rating: 0.0/5 (0 votes cast)
  23. By Andrew on jan 18, 2009 | Reply

    Opa Surgiu uma nova dúvida…
    e se caso o email já estiver sido adicionado?
    Porque tenho um montão de listas de email, e a maioria tem emails duplicados… tu sabe ver isso?

    Já concertei tudo mesmo, está só no ponto de enviar, se quiser eu te mando ele pra tu postar aqui no site, vai ser uma boa.

    Vou te dizer que funcionalidades tem:

    -Enviar email para mais de 1 pessoa no mesmo segundo (apenas um email por msg enviada).
    -No final de cada email contém um pequeno texto informando se o cliente deseja parar de receber os emails (Vai com id, email e senha para o cliente).
    -Importar uma lista de emails gerando codificação para somente o cliente excluir seu email da lista.

    Enfim só falta mesmo isso :) no mais agradeço por me ajudar e se quizer eu te passo por email, basta mandar um mail pra mim :)

    Quote

    VA:F [1.4.3_701]
    Rating: 0.0/5 (0 votes cast)
  24. By DragaO~ on jan 18, 2009 | Reply

    e se caso o email já estiver sido adicionado?
    Porque tenho um montão de listas de email, e a maioria tem emails duplicados… tu sabe ver isso?

    sim, e eh bastante facil ;)
    basta antes de cadastrar o email, verificar se o email jah nao existe no banco de dados

    troque isso

    while(($linha = fgets($arq)) != false)
    {
        //criando a query que vai cadastrar no banco
        $query = "INSERT INTO emails (email) VALUES ('" . $linha . "')";
        //enviando a query pro banco
        mysql_query($query, $conexao);
    }

    por isso

    while(($linha = fgets($arq)) != false)
    {
        //verificando se o email jah nao esta cadastrado
        //criando a query
        $query = "SELECT * FROM emails WHERE email='" . $linha . "' LIMIT 1";
        //enviando a query pro banco
        $query = mysql_query($query, $conexao);
        //caso a consulta acima nao tenha retornado nenhuma linha, insere
        //a nova linha com o email, se tiver, nao faz nada (volta pro
        //inicio do loop)
        if(!mysql_num_rows($query))
        {
            //criando a query que vai cadastrar no banco
            $query = "INSERT INTO emails (email) VALUES ('" . $linha . "')";
            //enviando a query pro banco
            mysql_query($query, $conexao);
        }
    }
    Já concertei tudo mesmo, está só no ponto de enviar, se quiser eu te mando ele pra tu postar aqui no site, vai ser uma boa.

    agradeço pela oferta, mas prefiro não adicionar isso ainda
    (quem sabe numa “extensão” deste tópico? dependo apenas de pedidos :D)
    mas em todo caso, fico feliz que tenha conseguido fazer o que tanto buscava ;)

    referência das funções:
    mysql_num_rows()

    bem vindo ao meu blog :D

    Quote

    VN:F [1.4.3_701]
    Rating: 0.0/5 (0 votes cast)
  25. By Andrew on jan 18, 2009 | Reply

    Opa, deu mais um erro aqui:

    Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/a8117690/public_html/dados.php on line 45

    Foi nessa linha:
    if(!mysql_num_rows($query))

    Opa cara, se precisar, pode me pedir estou disposto a te ajudar com seu blog, até porque eu gosto mesmo de PHP. :)

    Quote

    VA:F [1.4.3_701]
    Rating: 0.0/5 (0 votes cast)
  26. By DragaO~ on jan 18, 2009 | Reply

    a minha query é ficticia, modifique-a para os valores reais ;)
    note que as minhas queries sao todas destinadas à tabela “emails”, mas no seu caso a tabela se chama “newsletter”

    lembre-se, copiar e colar não é legal ;)

    se um dia desejar, tu pode fazer um artigo de PHP (ou qualquer outro assunto, desde que relacionado com informática) e me mandar, se ele estiver “nas normas” eu te deixo postar ele aqui ;)

    Quote

    VN:F [1.4.3_701]
    Rating: 0.0/5 (0 votes cast)
  27. By Andrew on jan 18, 2009 | Reply

    hahhaha, foi mesmo, agora ta 100% funcionando, vo tentar adicionar os 180mil emails que tenho aqui! Pelo menos 165mil tao funfando :D

    Valeu cara, mais uma vez!

    Quando eu tiver um pronto, eu te do um tok, ou então tu me pede que eu te ajudo também, ok?

    Vlw!

    Quote

    VA:F [1.4.3_701]
    Rating: 0.0/5 (0 votes cast)
  28. By Diogo on jan 20, 2009 | Reply

    Blz DragaO~
    Cara preciso da sua ajuda, eu estou tentando fazer 1 site de busca 1 pouco diferente, porem estou com 1 problema.
    Primeiramente vo explicar o problema.
    Este site tem uma função que abre paginas da net e copia tudo que for HTML para dentro do meu banco.
    Porém palavras acentuadas estão causando problema, pois não são copiadas ao pé da letra e não sei como resolver isso, pois quando fazer uma busca no banco e a pessoa digitar uma frase a busca não vai ser bem sucedida pq oq ela digito não vai conter os simbolos, esqueci o nome detes simbolos mas acho que é metacaracteres, será que vc sabe como posso resolver isso. Caso queria intender melhor mande 1 e-mail pra mim.
    Vlw cara, aguardo xD

    Quote

    VA:F [1.4.3_701]
    Rating: 0.0/5 (0 votes cast)
  29. By DragaO~ on jan 20, 2009 | Reply

    sem tu saber o nome do teu problema, ou especificar ele, fica um pouco dificil não acha?
    bom, vou tentar em todo caso :D
    acho que teu problema é com as acentuações de caracteres, se for, pesquise sobre a função htmlentities(), para codificar estes caracteres
    também penso que possa ser codificação, e a função “htmlentities()” “ajuda” um pouco com isso, mas também dê uma olhada nas funções “utf8_encode()” e “utf8_decode()

    eu particularmente penso que, fazer um buscador não é tão simples, e se tua dúvida for realmente alguma dessas duas, tomara que eu esteja errado, mas acho que tu não vai ter conhecimentos suficientes para “manter” esse serviço sempre disponível

    em todo caso, pode contar comigo caso tenha dúvidas (relacionadas à algum dos posts, lógico, a não ser que eu responda dúvidas mais “espcíficas”/”diferentes”, dae a gente pode conversar sobre eu receber um percentual da receita gerada pelas pesquisas :D)

    obrigado pelo comentário :D

    Quote

    VN:F [1.4.3_701]
    Rating: 0.0/5 (0 votes cast)
  30. By Andrew on fev 23, 2009 | Reply

    Olá, eu novamente com um erro aqui!

    Finalmente, consegui instalar o PHP + Apache + phpMyAdmin no meu PC, rodou tudo blz, ta funcionando bacana, mais o problema vem agora =/

    Tipo, as listas que tenho de emails com até 2 mil emails, vão tudim pro banco sem problemas, agora tenho uma lista de 93,4KB mais não adiciona todos os emails, não sei porque, simplesmente a página para de carregar, como se já tivesse carregado tudo, mais não aparece a mensagem de finalização, dizendo que todos os emails foram inseridos com sucesso.

    A lista que ta dando certo é a minha de até 24,7KB (fora essa grandona de 93,4KB a menor que tenho é essa) sendo que ainda tenho uma de 3,6MB que não da tambem, só vai alguns emails, eu acho que o problema é que a página fica muito tempo sem receber uma resposta e o navegador cancela, mais não aparece nenhuma mensagem do navegador, apenas para de carregar e não aparece nenhuma mensagem (e no navegador da como “Concluído”).

    Se poder me dar uma luz, fico agradecido!

    ps: todos os tutoriais do teu site já me ajudaram bastante, espero ver mais tutoriais por aqui!

    Quote

    VA:F [1.4.3_701]
    Rating: 0.0/5 (0 votes cast)
  31. By Marcelo Braga on fev 25, 2009 | Reply

    Estou tentando implementar uma função para registrar um arquivo de log através das funções de manipulação de arquivos. Porém, não estou conseguindo gerar a quebra de linha ao final de cada gravação. Estou utilizando ‘\n’ mas continua gravando na mesma linha.

    Quote

    VA:F [1.4.3_701]
    Rating: 0.0/5 (0 votes cast)
  32. By Marcelo Braga on fev 25, 2009 | Reply

    Achei a solução!

    Sistemas operacionais diferentes tem convenções de delimitação de linhas diferentes. Quando você escreve num arquivo e deseja inserir uma quebra de linha, você precisa utilizar o(s) caractere(s) de fim de linha adequado(s) em seu sistema operacional. Sistemas baseados no Unix utilizam \n como final de linha, sistemas baseados no Windows usam \r\n e sistemas baseados no Macintosh usam \r.

    Quote

    VA:F [1.4.3_701]
    Rating: 0.0/5 (0 votes cast)
  33. By DragaO~ on fev 25, 2009 | Reply

    @Andrew

    creio que o tempo de execução de seu script esteja passando do tempo permitido pelo PHP (o tempo padrão é 30 segundos), por isso que ele aparenta fazer tudo mas não chega ao fim (que é onde tu tem a mensagem de sucesso)
    tente abrir o seu arquivo php.ini e alterar a diretiva “max_execution_time” e altere-a para um valor maior
    adicionalmente, caso tu não queria mexer no php.ini, existe a função “ini_set“, porém aconselho a utiliza-la com cautela

    caso mesmo assim não funcione, ele retorna algum erro ou simplesmente “não acontece nada”?

    sobre os tutoriais, eu gostaria de continuar postando, porém estou fazendo um novo há dois meses, e ele está ficando extenso, por isso acho que vou “deixar ele de lado” por enquanto e vou postar algo “útil e prático”, mas para isso, só acompanhando as atualizações daqui ;)


    @Marcelo Braga

    Pois é, existe esse tipo de problema sim (isso me lembra a aula que eu tive sobre manipulação de arquivos em C :D)
    É sempre bom a gente projetar para funcionar em qualquer sistema operacional e para qualquer língua, mas sempre tem um inconveniente ou outro
    acho que no windows, caso tu salve o arquivo com quebra de linha sendo “\n” e abri-lo com o wordpad, ele reconhece normalmente, não tenho certeza, mas se não me engano isso é uma limitação do bloco de notas, e não do windows em si (pois, se não me engano, isso (”\r\n”) era necessário apenas em versões antigas)

    sobre o mac eu realmente não sabia :D

    Caso você verfique o que eu disse, peço que coloque aqui os resultados (pois realmente não tenho certeza)


    Obrigado pelos comentários e continuem acompanhando o blog :)

    Quote

    VN:F [1.4.3_701]
    Rating: 0.0/5 (0 votes cast)
  34. By _Jackson_ on jun 30, 2009 | Reply

    e aeee DragaO~, blz !!

    Procurando algumas dicas na net sobre php acabei encontrando seu blog que sem sombra de dúvidas é nota 1000 pois sua didatica é excelente, dinamica e não é de dar sono..rssss
    Estou começando a mexer com PHP e vejo que em alguns tópicos vc fala sobre concatenar, creio que muitos aki que estão começando sempre acabam recebendo erros inesperados por causa de concatenação, e gostaria de perguntar a vc onde encontro um material a respeito disso, ou se aki mesmo no seu blog vc já o disponibilizou.
    Enquanto aguardo uma resposta, vou continuar navegando no blog pois tem muita coisa boa, e espero um dia poder ter uma visão tão boa do php assim como encontrei aki.. ah .. e o melhor de tudo é que não dá sono .. hehehe
    Abraços

    Quote

    VA:F [1.4.3_701]
    Rating: 0.0/5 (0 votes cast)
  35. By DragaO~ on jul 7, 2009 | Reply

    _Jackson_: e aeee DragaO~, blz !!
    Procurando algumas dicas na net sobre php acabei encontrando seu blog que sem sombra de dúvidas é nota 1000 pois sua didatica é excelente, dinamica e não é de dar sono..rssss
    Estou começando a mexer com PHP e vejo que em alguns tópicos vc fala sobre concatenar, creio que muitos aki que estão começando sempre acabam recebendo erros inesperados por causa de concatenação, e gostaria de perguntar a vc onde encontro um material a respeito disso, ou se aki mesmo no seu blog vc já o disponibilizou.
    Enquanto aguardo uma resposta, vou continuar navegando no blog pois tem muita coisa boa, e espero um dia poder ter uma visão tão boa do php assim como encontrei aki.. ah .. e o melhor de tudo é que não dá sono .. hehehe
    Abraços

    primeiramente, agradeço aos elogios :D

    sobre o problema com concatenação, eu sinceramente não entendi e também não vejo a necessidade de um post exclusivo para mensagens de erros de concatenação, pois o próprio “sistema de mensagens de erros” do php é muito bom, bastando, na grande maioria das vezes, apenas ler a mensagem que ele gera.

    tua dúvida é sobre algum erro ou mensagem em específico? se quiser, pode postar a mensagem aqui que eu posso tentar te ajudar :D

    Quote

    VN:F [1.4.3_701]
    Rating: 0.0/5 (0 votes cast)
  36. By Claiton on jul 7, 2009 | Reply

    Eu nunca tive problemas com isso…mas algumas
    pessoas não sei porque se perdem nisso:

    Mas tbm acho que não seja necessário um Post apenas para isso.
    Mas sobre a mentalidade do programadores e as modinhas do momento, tipo Delphi for Web e JAVA, acho interssante.
    Até dou minha opinião se quiseres…
    Abraço!!
    PS: Não ta morto quem peleia!!

    Quote

    VA:F [1.4.3_701]
    Rating: 1.0/5 (1 vote cast)
  37. By Claiton on jul 7, 2009 | Reply

    iiii…
    o blog bloqueou minhas tags php…
    mas o que tinha la era isso:
    $var.=”algum valor”;
    $var.$var;
    $var.”lalalalal”.$var2;

    Quote

    VA:F [1.4.3_701]
    Rating: 0.0/5 (0 votes cast)
  38. By Jackson on jul 7, 2009 | Reply

    Ok… no problem.
    Não é nenhuma mensagem em especifico não.
    Vou continuar navegando no blog.
    Abs.

    Quote

    VA:F [1.4.3_701]
    Rating: 0.0/5 (0 votes cast)
  39. By DragaO~ on jul 8, 2009 | Reply

    Claiton: Eu nunca tive problemas com isso…mas algumas
    pessoas não sei porque se perdem nisso:Mas tbm acho que não seja necessário um Post apenas para isso.
    Mas sobre a mentalidade do programadores e as modinhas do momento, tipo Delphi for Web e JAVA, acho interssante.
    Até dou minha opinião se quiseres…
    Abraço!!
    PS: Não ta morto quem peleia!!

    Java é antigo (mais antigo que JavaScript), “Delphi for Web” eu nunca vi, mas deve ser uma porcaria :D
    sinceramente. não consigo ver uma linguagem de programação como “modinha”, apenas como “ó meu deus, aquela linguagem é a melhor do mundo”, tipo como quando lançou o ruby on rails e todo mundo dizia (e ainda dizem) que é a melhor coisa do mundo (mas isso já passou)

    eu ainda quero postar algo menos “técnico” aqui (que não seja tutoriais, códigos, e outras coisas), mas ainda não me decidi bem sobre o que falar (e também fico em dúvida se não é melhor um post sobre coisas intressantes do/sobre o php)

    Claiton: iiii…
    o blog bloqueou minhas tags php…
    mas o que tinha la era isso:
    $var.=”algum valor”;
    $var.$var;
    $var.”lalalalal”.$var2;

    bem em cima da caixa de comentário tem esse link que explica justamente como fazer pra isso não acontecer :D

    aliás, não entendi o que tu colocou, são variáveis dinâmicas? (eu chamo de “variáveis dinâmicas” porque acho mais legal que “variáveis variantes” – que é o encontrado em livros e documentações, mas me refiro à mesma coisa)

    Quote

    VN:F [1.4.3_701]
    Rating: 0.0/5 (0 votes cast)
  40. By Claiton on jul 8, 2009 | Reply

    Bah, nem vi o link ali….
    Não sei o que é variáveis variantes…
    Coloquei só exemplos de concatenação…
    Acho que tu explicou melhor o que eu quis falar sobre modinha…
    Delphi for web é um novo conceito, que vem desde o delphi 2006.
    O delphi usa uma biblioteca chamada Intraweb que vem desde o delphi 7, mas só agora está sendo usada efetivamente. Sem falar no suporte a ASP.NET.
    A sugestão que eu tenho é falar sobre como organizar um projeto. Desde da organização dos diretórios até a análise com o cliente…
    Flw!!

    Quote

    VA:F [1.4.3_701]
    Rating: 0.0/5 (0 votes cast)
  41. By DragaO~ on jul 8, 2009 | Reply

    Claiton:
    Bah, nem vi o link ali….

    não dá nada :D

    Claiton: Não sei o que é variáveis variantes…

    variáveis variantes são isso aqui ó:

    1
    2
    3
    4
    5
    6
    7
    8
    
    <?
    $var = 'algo';
    //criando uma variavel com o conteudo da variavel "$var"
    //e atribuindo um valor a ela
    $$var = 'um texto aqui';
    //mostra "um texto aqui"
    echo $algo;
    ?>

    “utilidade?”, validar formulários dinâmicamente é apenas uma:

    1
    2
    3
    4
    5
    6
    
    <?
    foreach($_POST as $campo => $valor)
    {
        $$campo = htmlentities($valor, ENT_QUOTES);
    }
    ?>

    Claiton:
    Delphi for web é um novo conceito, que vem desde o delphi 2006.
    O delphi usa uma biblioteca chamada Intraweb que vem desde o delphi 7, mas só agora está sendo usada efetivamente. Sem falar no suporte a ASP.NET.

    eu não tinha nem ideia de como colocar o delphi na web, agora, pelo que entendi, é via uma “extensão”, isso?
    se for, acho mais porcaria ainda, porque tem que modificar o servidor :P

    Claiton:
    A sugestão que eu tenho é falar sobre como organizar um projeto. Desde da organização dos diretórios até a análise com o cliente…

    é um assunto interessante mesmo, mas eu acho que eu não sei o necessário pra mim falar sobre ele ;x
    eu não sei, por exemplo, design patterns (já ouvi falar, mas não sei as “técnicas” (ou seja lá qual for o nome)), daí acho que não fica legal eu postar algo assim ;x
    o que eu poderia fazer, era falar sobre como eu organizo as coisas de um projeto, como eu “penso” e coisas desse tipo, até aí pode até ser, mas, como eu não falo com clientes, não sei como proceder nisso :D (eu faço tudo do meu jeito mesmo, acho que é por isso que nunca vendi nada :P)

    Quote

    VN:F [1.4.3_701]
    Rating: 0.0/5 (0 votes cast)
  42. By Claiton on jul 8, 2009 | Reply

    Mas o blog, ao meu ver não é pra dizer o que todo mundo acha,e sim pra falar como tu acha que é, e como tu pensas.
    E como o lance de clientes tu já deve ter atendido um e sabe o quanto em geral são chatos…
    Sobre o Delphi para web, é um componente que vem instalado. Ele gera um EXE que roda no IIS da Microsoft ou uma Dll.
    O foda é que é 100% M$crosoft e quase sem nenhuma documentação em Portuga….
    Fazer o que neh…

    Estarei esperando ancioso o Post e se não der envia por GET mesmo…
    ps: Eu não me canso nunca..aeuaheuaheuhae

    Quote

    VA:F [1.4.3_701]
    Rating: 0.0/5 (0 votes cast)
  43. By DragaO~ on jul 21, 2009 | Reply

    Claiton: Mas o blog, ao meu ver não é pra dizer o que todo mundo acha,e sim pra falar como tu acha que é, e como tu pensas.
    E como o lance de clientes tu já deve ter atendido um e sabe o quanto em geral são chatos…

    não prometo, mas pode ser que eu faça algo assim, afinal, tu tem razão :D
    sempre penso se seria ou não legal contar sobre minhas experiências profissionais, mas, por ora, quanto mais “anônimo” eu for, melhor :D

    Claiton:
    Sobre o Delphi para web, é um componente que vem instalado. Ele gera um EXE que roda no IIS da Microsoft ou uma Dll.
    O foda é que é 100% M$crosoft e quase sem nenhuma documentação em Portuga….

    resumo: é um lixo :D

    Claiton:
    Fazer o que neh…Estarei esperando ancioso o Post e se não der envia por GET mesmo…
    ps: Eu não me canso nunca..aeuaheuaheuhae

    já já vira marca registrada XD
    mas de fato, piadinha muito boa 8D (sempre dou risada quando leio algo assim)

    Quote

    VN:F [1.4.3_701]
    Rating: 0.0/5 (0 votes cast)

Deixe um comentário

Vai postar algum código? Leia isso antes