kmachado 0 Denunciar post Postado Agosto 5, 2012 Olá amigos estou com o seguinte problema: Eu preciso automatizar um processo de inserçao multipla de registros em um bd mysql via php, mas não sei por onde começar. Pois bem eu tenho uma tabela com a seguinte formatação <table> <tr> <td> nome </td> <td> fone </td> <td> email </td> </tr> <tr> <td> Fulano da Silva </td> <td> (99) 9999-9999 </td> <td> fulano@email.com.br </td> </tr> </table> A minha intensão é pegar cada linha dessa tabela em html(com os valores de suas respectivas células) e enviar para o bd, obs: lógico que a maneira mais fácil seria criar um formulário com três campos input e fazer um post para um código php que gravaria de um a um no bd(só que haja dedo pra digitar tudo :cry: ). Portanto, eu to querendo automatizar esse processo visto que são centenas de registros nessa tabela. Compartilhar este post Link para o post Compartilhar em outros sites
mangakah 217 Denunciar post Postado Agosto 5, 2012 Cara, você colocou esse tópico no lugar errado. Processar HTML se faz com uma linguagem de programação como PHP, ASP, Ruby, Python, etc. (e com Javascript também...) não com SQL. Por ser PHP a mais usada, e você citou "código php", então vou supor que você tenha como fazer isso com PHP... Há várias maneiras de fazer isso, uma delas é usando expressões regulares. Se você quiser saber como é ter um derrame cerebral tentando fazer algo funcionar, essa é a melhor forma! :lol: Mas maneira mais fácil é usando uma classe inspetora do DOM, eu recomendo Simple HTML DOM. Você poderia fazer simplesmente assim: (Código PHP) <?php /* Baixe Simple HTML DOM em: http://sourceforge.net/projects/simplehtmldom/files/ Extraia o arquivo simple_html_dom.php para a pasta do script */ require('simple_html_dom.php'); // String onde ficarão os inserts $inserts = ""; // Carrega a tabela $html = file_get_html('tabela.html'); // Processa a tabela foreach ($html->find('tr') as $linha) { list ($nome, $fone, $email) = array( trim ($linha->find('td', 0)->text()), trim ($linha->find('td', 1)->text()), trim ($linha->find('td', 2)->text()), ); $inserts .= "INSERT INTO tabela (nome, fone, email) VALUES ('$nome', '$fone', '$email');\n"; } echo $inserts; // Daí é só executar esses inserts Compartilhar este post Link para o post Compartilhar em outros sites
kmachado 0 Denunciar post Postado Agosto 5, 2012 Cara, você colocou esse tópico no lugar errado. Processar HTML se faz com uma linguagem de programação como PHP, ASP, Ruby, Python, etc. (e com Javascript também...) não com SQL. Por ser PHP a mais usada, e você citou "código php", então vou supor que você tenha como fazer isso com PHP... Há várias maneiras de fazer isso, uma delas é usando expressões regulares. Se você quiser saber como é ter um derrame cerebral tentando fazer algo funcionar, essa é a melhor forma! :lol: Mas maneira mais fácil é usando uma classe inspetora do DOM, eu recomendo Simple HTML DOM. Você poderia fazer simplesmente assim: (Código PHP) <?php /* Baixe Simple HTML DOM em: http://sourceforge.net/projects/simplehtmldom/files/ Extraia o arquivo simple_html_dom.php para a pasta do script */ require('simple_html_dom.php'); // String onde ficarão os inserts $inserts = ""; // Carrega a tabela $html = file_get_html('tabela.html'); // Processa a tabela foreach ($html->find('tr') as $linha) { list ($nome, $fone, $email) = array( trim ($linha->find('td', 0)->text()), trim ($linha->find('td', 1)->text()), trim ($linha->find('td', 2)->text()), ); $inserts .= "INSERT INTO tabela (nome, fone, email) VALUES ('$nome', '$fone', '$email');\n"; } echo $inserts; // Daí é só executar esses inserts Olá mangakah, acho que é por ai mesmo, já comecei a implementar aqui, só que vi que ta dando um erro na acentuação, outra dúvida, eu não entendi muito bem pq você declarou $inserts com valor vazio antes, qual a necessidade disso? ah, e onde eu devo execultar o $inserts dentro ou fora do foreach Essa sua solução me deu uma ídeia pa um outro projeto meu nesse, projeto, eu quero pegar o conteúdo de um paragrafo <p> só que na página, existem vários parágrafos e todos sem identificaçao ou classe só que eu quero pegar apenas um paragrafo especifico. o que eu quero saber é se tem com eu "dizer" pro código aquele paragrafo especifico, informando a posiçao dele, exemplo o terceiro paragrafo Compartilhar este post Link para o post Compartilhar em outros sites
mangakah 217 Denunciar post Postado Agosto 5, 2012 Olá mangakah, acho que é por ai mesmo, já comecei a implementar aqui, só que vi que ta dando um erro na acentuação Poste aqui o código e o erro e verei se posso ajudar. outra dúvida, eu não entendi muito bem pq você declarou $inserts com valor vazio antes, qual a necessidade disso? Isso é necessário, mas apenas para declarar a variável. Observe que dentro do laço foreach ela é concatenada (observe o operador .=), a cada execução do laço, com um comando INSERT com os valores colhidos da tabela. Um exemplo simples dessa lógica: $palavras = array("Olá", "Mundo", "!"); $frase = ""; foreach ($palavras as $palavra) { $frase .= $palavra . " "; } echo $frase; // retorna: Olá Mundo ! ah, e onde eu devo execultar o $inserts dentro ou fora do foreach Os INSERTs você pode imprimir na tela e executar no phpMyAdmin, por exemplo... São os comandos de inserção no banco de dados. Essa sua solução me deu uma ídeia pa um outro projeto meu nesse, projeto, eu quero pegar o conteúdo de um paragrafo <p> só que na página, existem vários parágrafos e todos sem identificaçao ou classe só que eu quero pegar apenas um paragrafo especifico. o que eu quero saber é se tem com eu "dizer" pro código aquele paragrafo especifico, informando a posiçao dele, exemplo o terceiro paragrafo Simples: $pos = 2; // posição do 3º paragrafo (a contagem começa em 0) // Carrega o arquivo html onde estão os parágrafos $html = file_get_html('paragrafos.html'); // Imprime o texto paragrafo da posição echo $html->find('p', $pos)->text(); Se você quiser, por exemplo, o endereço (atributo 'href') do terceiro link em um documento, é só usar... echo $html->find('a', 2)->href; Veja mais na documentação: http://simplehtmldom.sourceforge.net/ Compartilhar este post Link para o post Compartilhar em outros sites
kmachado 0 Denunciar post Postado Agosto 7, 2012 Poste aqui o código e o erro e verei se posso ajudar. Isso é necessário, mas apenas para declarar a variável. Observe que dentro do laço foreach ela é concatenada (observe o operador .=), a cada execução do laço, com um comando INSERT com os valores colhidos da tabela. Um exemplo simples dessa lógica: $palavras = array("Olá", "Mundo", "!"); $frase = ""; foreach ($palavras as $palavra) { $frase .= $palavra . " "; } echo $frase; // retorna: Olá Mundo ! Os INSERTs você pode imprimir na tela e executar no phpMyAdmin, por exemplo... São os comandos de inserção no banco de dados. Simples: $pos = 2; // posição do 3º paragrafo (a contagem começa em 0) // Carrega o arquivo html onde estão os parágrafos $html = file_get_html('paragrafos.html'); // Imprime o texto paragrafo da posição echo $html->find('p', $pos)->text(); Se você quiser, por exemplo, o endereço (atributo 'href') do terceiro link em um documento, é só usar... echo $html->find('a', 2)->href; Veja mais na documentação: http://simplehtmldom.sourceforge.net/ valeu mangakah já deu tudo certo aqui. obrigado pela ajuda Compartilhar este post Link para o post Compartilhar em outros sites