Bateraman 0 Denunciar post Postado Abril 9, 2009 Tenho um formulário (com uma textarea - multi-linha) onde o usuário digita vários nomes (1 nome por linha) Esse form joga para o php: <?php $textarea = mysql_real_escape_string($_POST['textarea']); $array = explode("\\n", $textarea); $i=0; $value = trim($array[$i]); if (!empty($value)) { foreach ($array as $value) { mysql_query("INSERT INTO clientes (nome_cliente,email_cliente) VALUES ('{$array[$i]}','teste')") or die(mysql_error()); $i++; } } ?>O código acima funciona, ou seja este código está inserindo os dados assim na minha tabela clientes: id | nome_cliente | email_cliente id1 | Felipe | teste id2 | Marcos | teste id3 | Rivaldo | teste Eu preciso então acertar esses códigos para que o cara escreva no textarea do formulário (por linha): Felipe, felipe@felipe.com marcos, marcos@marcos.com rivaldo, rivaldo@rivaldo.com e então ele insira certo no banco de dados os 2 campos. id | nome_cliente | email_cliente id1 | Felipe | felipe@felipe.com id2 | Marcos | marcos@marcos.com id3 | Rivaldo | rivaldo@rivaldo.com O código está praticamente pronto, mas eu sinceramente não sei como proceder. Fico no urgente aguardo. Um abraço, FELIPE Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Abril 9, 2009 dentro daquele foreach, use explode() em $value para separar os valores: list($nome, $email) = explode(",", $value); Compartilhar este post Link para o post Compartilhar em outros sites
Bateraman 0 Denunciar post Postado Abril 10, 2009 dentro daquele foreach, use explode() em $value para separar os valores: list($nome, $email) = explode(",", $value); Pessoal, Não consegui fazer. Valeu beraldo, Segue o meu código: <?php $textarea = mysql_real_escape_string($_POST['textarea']); $array = explode("\\n", $textarea); $i=0; $value = trim($array[$i]); if (!empty($value)) { foreach ($array as $value) { list($nome, $email) = explode(",", $value); mysql_query("INSERT INTO clientes (nome_cliente,email_cliente) VALUES ('{$nome[$i]}','{$email[$i]}')") or die(mysql_error()); $i++; } } ?> Dá uma olhada no meu código, eu alterei tb já o insert (que antes estava 'teste' por '{$email[$i]}')") no banco de dados. Mas tá salvando errado nos campos lá... E agora? Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Abril 10, 2009 $textarea = "Nome1, email1 Nome2, email2 Nome3, email3"; $array = explode("\n", $textarea); foreach ($array as $value) { list($nome, $email) = explode(",", $value); echo $nome . " , " . $email . "<br />"; } Compartilhar este post Link para o post Compartilhar em outros sites
Bateraman 0 Denunciar post Postado Abril 10, 2009 $textarea = "Nome1, email1 Nome2, email2 Nome3, email3"; $array = explode("\n", $textarea); foreach ($array as $value) { list($nome, $email) = explode(",", $value); echo $nome . " , " . $email . "<br />"; } Problema no output, usei teu código dessa forma: <?php $textarea = mysql_real_escape_string($_POST['textarea']); $array = explode("\\n", $textarea); foreach ($array as $value) { list($nome, $email) = explode(",", $value); echo $nome . " , " . $email . "<br />"; } ?> o output no browser: teste , teste@teste.com\r falando , falando@falando.com\r titando , titando@titando.com (está ficando com um \r esquisito no final dos registros, e o último não!) Estranho... Mas pra completar, eu precisava do código pra inserir nos 2 campos diferentes do meu banco. Como eu postei, eu já tava conseguindo inserir em 1, se o outro fosse estático (no caso: 'teste'). Como fazer esse insert no meu banco de dados nos 2 campos diferentes, rapá? Grande abraço e desculpe-me a ignorância. Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Abril 10, 2009 É que em Windows o separador de linha é \r\n, enquanto em Linux é somente \n. Pode usar \r\n no explode Quanto ao INSERT, pode usar $nome e $email. INSERT INTO tabela(nome, email) VALUES('$nome', '$email'); Compartilhar este post Link para o post Compartilhar em outros sites
Bateraman 0 Denunciar post Postado Abril 13, 2009 Opa Beraldo, Obrigado pelos posts. Entendi certinho e funfou (mesmo usando //n). Mas o problema agora é o seguinte, pois estou importando dados do yahoo, gmail etc, e geralmente os e-mails vem assim: "Teste n1" <teste1@teste1.com>, "Teste 2" <teste2@teste2.com>, ... Então isso estaria escrito na minha caixa de texto (textarea). Entao acho q nao é preciso o explode em linhas (/n) e sim em ','. Entao isso muda um pouco meu código original. Mas to imaginando, que pra fazer isso, seria um explode em cima de explode? Necessariamente os nomes e emails virão dessa forma " " < >, " " < >, ... cada um desses vou inserir no banco de dados, campos nome e email. Tem como você me ajudar, pq agora estou perdido. Grande abraço, FELIPE Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Abril 13, 2009 uma ótima saída é usar Expressões Regulares Compartilhar este post Link para o post Compartilhar em outros sites
Bateraman 0 Denunciar post Postado Abril 14, 2009 uma ótima saída é usar Expressões Regulares Opa Beraldo, Essas expressões são o bicho mesmo haha... comecei a fazer uma caca aqui, queria que você desse uma olhada: <?php ob_start(); $textarea = mysql_real_escape_string($_POST['textarea']); $array = explode(",", $textarea); foreach ($array as $value) { list($nome, $email) = explode(',', $value); //ESSAS SAO AS LINHAS QUE EU ADICIONEI preg_match('/"(\w+)"/', $nome, $np); preg_match('/<(\w+)>/', $email, $ep); mysql_query("INSERT INTO clientes(nome_cliente,email_cliente,idcliente) VALUES ('$np','$ep','$idecliente')") or die(mysql_error()); header ("Location:../home/index.php"); } ?> O problema é que tá inserindo assim no banco: ID | NOME | EMAIL 1| Array | Array Grande abraço, FELIPE Compartilhar este post Link para o post Compartilhar em outros sites
Bateraman 0 Denunciar post Postado Abril 14, 2009 TO QUASE ACABANDO, preciso do último help de vcs!!! $idcliente = $_POST['idcliente']; $textarea = mysql_real_escape_string($_POST['textarea']); $array = explode(',', $textarea); foreach ($array as $value) { // Let's perform the regex $do = preg_match('/"(.*)\\\" <(.*)>/', $value, $matches); mysql_query("INSERT INTO clientes (nome_cliente,email_cliente,idcliente) VALUES ('{$matches['1']}','{$matches['2']}','$idcliente')") or die(mysql_error()); // header ("Location:../home/index.php"); } ?> Seguinte, o código tá inserindo QUASE certinho no meu banco. Os dados vêm pela textarea dessa forma: "Felipe" <felipe@felipe.com>, "Fabio" <fabio@fabio.com>, etc... Vejam o OUTPUT do banco de dados: ID | Nome | Email 1 | Felipe\ | felipe@felipe.com 2 | Fabio\ | fabio@fabio.com Essa barrinha "\" maldita (do lado do nome), não consigo tirá-la. Como eu faço? Só falta isso! VALEUUU! Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Abril 14, 2009 troque \\\" por \\" Compartilhar este post Link para o post Compartilhar em outros sites
Bateraman 0 Denunciar post Postado Abril 15, 2009 troque \\\" por \\" Opa Beraldo, Entao, eu já havia tentado. se eu deixo "\\" ou mesmo somente "\" dá esse erro: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'titi@titi.com','')' at line 1 Alguma idéia? Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Abril 15, 2009 Crie uma variável para conter a string da query. Dê um echo nela para ver como está saindo. E use .*? em vez de .* nesse caso Compartilhar este post Link para o post Compartilhar em outros sites
Bateraman 0 Denunciar post Postado Abril 15, 2009 Crie uma variável para conter a string da query. Dê um echo nela para ver como está saindo. E use .*? em vez de .* nesse caso Opa Beraldo, Continua igual. com o maldito traço do lado nome\ Usei também a "?" (interrogação, como você falou), mas nao mudou. Tentei algumas vertentes, com mais barras e menos barras e também não deu certo. Tem mais alguma idéia? Abraço Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Abril 15, 2009 falei para vocÊ dar um echo na string e postar o resultado, para ver por que o MySQL gera o erro Compartilhar este post Link para o post Compartilhar em outros sites
Bateraman 0 Denunciar post Postado Abril 15, 2009 falei para vocÊ dar um echo na string e postar o resultado, para ver por que o MySQL gera o erro Opa, vamos lá. Vou digitar na caixa de texto o seguinte: "Felipe" <felipe@felipe.com> Seguem códigos: echo $matches['1']; $array = explode(',', $textarea2); foreach ($array as $value) { // Let's perform the regex $do = preg_match('/"(.*)\" <(.*?)>/', $value, $matches); echo $matches['1']; RESULTADO: Felipe\\\ Para echo $matches['2']; $array = explode(',', $textarea2); foreach ($array as $value) { // Let's perform the regex $do = preg_match('/"(.*)\" <(.*?)>/', $value, $matches); echo $matches['2']; RESULTADO: felipe@felipe.com Para echo $matches; $array = explode(',', $textarea2); foreach ($array as $value) { // Let's perform the regex $do = preg_match('/"(.*)\" <(.*?)>/', $value, $matches); echo $matches; Resultado: Array Fiz isto também em todas as tentativas: preg_match('/"(.*?)\" <(.*?)>/', $value, $matches); Ou com mais barras invertidas: preg_match('/"(.*?)\\\" <(.*?)>/', $value, $matches); Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Abril 15, 2009 Preste atenção nas aspas que está usando e no caractere de escape. Faça algo assim: $str = '"Beraldo" <beraldo@email.com>'; preg_match('/"(.*?)"\s*<(.*?)>/', $str, $matches); print_r($matches); Se aparecer barra invertida, use stripslashes() no conteúdo vindo do formulário Compartilhar este post Link para o post Compartilhar em outros sites
Bateraman 0 Denunciar post Postado Abril 15, 2009 Preste atenção nas aspas que está usando e no caractere de escape. Faça algo assim: $str = '"Beraldo" <beraldo@email.com>'; preg_match('/"(.*?)"\s*<(.*?)>/', $str, $matches); print_r($matches); Se aparecer barra invertida, use stripslashes() no conteúdo vindo do formulário BERALLLLDAOOO!! VALEU RAPÁ!! ERA ISSO MESMO!!!! Eu acabei fazendo 2 stripslashes, pq 1 só não foi suficiente haha! segue o código + gambiarra: $textarea = mysql_real_escape_string($_POST['textarea']); $textareastrip = stripslashes($textarea); $textareastrip2 = stripslashes($textareastrip); $array = explode(',', $textareastrip2); foreach ($array as $value) { // Let's perform the regex $do = preg_match('/"(.*?)"\s*<(.*?)>/', $value, $matches); print_r($matches); Perfeito! Beraldo, muito obrigado mesmo rapá pela atenção! VALEU, sem a sua ajuda não ia rolar!!! Parabéns ae! Abraços e até a próxima! Felipe Compartilhar este post Link para o post Compartilhar em outros sites