najalves 0 Denunciar post Postado Outubro 17, 2007 Olá , Eu sou (muito) iniciante no PHP e estou precisando de uma forcinha pra concluir um script de gravação em BD. Funciona assim: no formulário eu digito as informações necessárias nos campos correspondentes,clico em adicionar e tudo q digitei nos campos passa p q digitei nos campos passa pra uma text area. Lá no final do formulário qdo clico em enviar ele grava as informações no banco. No caso desses dados que são adicionados ao textarea, eles tem q ser gravados da seguinte forma: pega o número do registro do solicitante e grava os dados do responsavel com o mesmo numero nao importa qtos responsaveis forem. Aí é que vem o problema: eu nao consigo fazer que ele grave mais de um responsavel.Ele ate pega o numero do solicitante e grava beleza mas só grava o primeiro ou o ultimo dado.Não grava nunca os dois.Antes ate que gravava um lixo mas consegui tirar e agora so grava um registro. PHP <?phpinclude "mysqlconecta.php"; include "mysqlexecuta.php"; $sql = "INSERT INTO tec_solicitante (sol_no_solicitante,sol_no_email,sol_no_orgao,sol_nu_telefone) VALUES ('$_POST[nome]','$_POST','$_POST[orgao]','$_POST[telefone]')"; $res = mysqlexecuta($conexao,$sql); $separa = explode(";", $_POST["conteudo"]); for ($i=0;$i<sizeof($separa);$i++) { $divide = explode(",", $separa[$i]); $sql = "INSERT INTO tec_responsavel (rps_co_solicitacao,rps_no_responsavel,rps_no_email,rps_no_orgao,rps_nu_telefone VALUES ((select max(tec_solicitante.sol_co_solicitacao) from tec_solicitante),'$divide[0]','$divide[1]','$divide[2]','$divide[3]')"; $res = mysqlexecuta($conexao,$sql); } // $separa = explode(";", $_POST["irpara"]); //for ($i=0;$i<sizeof($separa);$i++) { //$divide = explode(",", $separa[$i]); //$sql = "INSERT INTO tec_servidor (frm_no_servidor,frm_nu_ip_servidor,frm_nu_mascara_servidor,frm_no_sistema_opera ional,frm_no_funcionalidade) VALUES ('$divide[0]','$divide[1]','$divide[2]','$divide[3]','$divide[4]')"; //$res = mysqlexecuta($conexao,$sql); } if($res) echo '<p align="center">Cadastro realizado com sucesso!<BR></p>'; else echo '<p align="center">Não foi possível fazer o seu cadastramento!<BR></p>'; ?> Será q alguém pode me ajudar a resolver esse problemão? Abraços. Compartilhar este post Link para o post Compartilhar em outros sites
Anderson Mello 3 Denunciar post Postado Outubro 17, 2007 Seja bem-vindo ao fórum http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Peço que leia as Regras do Fórum iMasters. Vamos ao problema. As informações que precisa inserir necessariamente precisam vir de uma textarea ou poderia utilizar campos distintos para cada informação? Posta um exemplo do conteúdo (texto) que está tentando incluir no banco ;) Compartilhar este post Link para o post Compartilhar em outros sites
najalves 0 Denunciar post Postado Outubro 18, 2007 Existem campos distintos para cada coisa que digito,por exemplo: nome,email,telefone... qdo clico no botao adicionar, ele joga essas informações no textarea e elas ficam dispostas assim:nnnnnnn,nnnnnnnn,nnnnnn,nnnnn;nnnnnnn,nnnnnnnn,nnnnnn,nnnnn;Logo as informações devem vir do textarea(me foi pedido assim).Como você deve ter visto utilizo a função explode pra separar e gravar certo no banco.Acontece que ele só pega o primeiro nnnnnnn,nnnnnnnn,nnnnnn,nnnnn;.Parece que ele não "enxerga" as outras informações.É isso... e só falta isso pra eu terminar esse form![]'s. Compartilhar este post Link para o post Compartilhar em outros sites
Paulo André 0 Denunciar post Postado Outubro 18, 2007 Você deve usar dois explode() e consequentemente dois laços: Uma para as quebras de linha e outro para as separações por vírgula. ;) Ops... :huh: Até começou certo, mas faltou um laço dentro do que você já fez. Compartilhar este post Link para o post Compartilhar em outros sites
Anderson Mello 3 Denunciar post Postado Outubro 18, 2007 Faz um teste assim: PHP $separa = explode(";", $_POST["conteudo"]);foreach ($separa as $linha => $valor) { if (!empty($valor)) { $divide = explode(",", trim($valor)); $sql = "INSERT INTO tec_responsavel (rps_co_solicitacao,rps_no_responsavel,rps_no_email,rps_no_orgao,rps_nu_telefone VALUES ((select max(tec_solicitante.sol_co_solicitacao) from tec_solicitante),'$divide[0]','$divide[1]','$divide[2]','$divide[3]')"; $res = mysqlexecuta($conexao,$sql); } } Usei foreach, mas pode continuar com o laço que tinha antes, apenas adaptando. Também coloquei uma verificação pra ver se existe valor, já que terá a última linha com ponto-e-vírgula, o que resultará num resultado vazio e um registro com campos em brancos ;) Compartilhar este post Link para o post Compartilhar em outros sites
najalves 0 Denunciar post Postado Outubro 18, 2007 Faz um teste assim: PHP $separa = explode(";", $_POST["conteudo"]);foreach ($separa as $linha => $valor) { if (!empty($valor)) { $divide = explode(",", trim($valor)); $sql = "INSERT INTO tec_responsavel (rps_co_solicitacao,rps_no_responsavel,rps_no_email,rps_no_orgao,rps_nu_telefone VALUES ((select max(tec_solicitante.sol_co_solicitacao) from tec_solicitante),'$divide[0]','$divide[1]','$divide[2]','$divide[3]')"; $res = mysqlexecuta($conexao,$sql); } } Usei foreach, mas pode continuar com o laço que tinha antes, apenas adaptando. Também coloquei uma verificação pra ver se existe valor, já que terá a última linha com ponto-e-vírgula, o que resultará num resultado vazio e um registro com campos em brancos ;) nao deu certo http://forum.imasters.com.br/public/style_emoticons/default/upset.gif continuou gravando so o primeiro!não tem outra sugestão? Compartilhar este post Link para o post Compartilhar em outros sites
najalves 0 Denunciar post Postado Outubro 18, 2007 Você deve usar dois explode() e consequentemente dois laços: Uma para as quebras de linha e outro para as separações por vírgula. ;) Ops... :huh: Até começou certo, mas faltou um laço dentro do que você já fez. eu já desconfiava disso...sáo não sei o q colocar@ :rolleyes: tem uma ideia? Compartilhar este post Link para o post Compartilhar em outros sites
najalves 0 Denunciar post Postado Outubro 22, 2007 Oi !!!Por favor não abondonem o tópico preciso muito de ajuda!!![]'s Compartilhar este post Link para o post Compartilhar em outros sites
Paulo André 0 Denunciar post Postado Outubro 22, 2007 Fiz um pequeno exemplo aqui: <?php$str = "nnnnnnn,nnnnnnnn,nnnnnn,nnnnn;nnnnnnn,nnnnnnnn,nnnnnn,nnnnn;";$arr1 = explode(";", $str);foreach($arr1 as $linha){ $arr2 = explode(",", $linha); foreach($arr2 as $coluna) { echo $coluna . "<br />"; }}?>A cada iteração, você só irá obter um valor, que no caso é $coluna, e com ele você fará a inserção no banco de dados. Flws... ;) Compartilhar este post Link para o post Compartilhar em outros sites
najalves 0 Denunciar post Postado Outubro 22, 2007 Fiz um pequeno exemplo aqui: <?php$str = "nnnnnnn,nnnnnnnn,nnnnnn,nnnnn;nnnnnnn,nnnnnnnn,nnnnnn,nnnnn;";$arr1 = explode(";", $str);foreach($arr1 as $linha){ $arr2 = explode(",", $linha); foreach($arr2 as $coluna) { echo $coluna . "<br />"; }}?>A cada iteração, você só irá obter um valor, que no caso é $coluna, e com ele você fará a inserção no banco de dados. Flws... ;) Obrigada pela ajuda mas nao era bem isso!!Vou pegar esses dados de um textarea e vou separa-los pra gravar no bd.To quase conseguindo mas ta faltando algo: $separa = explode(";", $_POST["conteudo"]);for ($i=0;$i<sizeof($separa);$i++) { $divide = explode(",", $separa[$i]); $sql = "INSERT INTO tec_responsavel (rps_co_solicitacao,rps_no_responsavel,rps_no_email,rps_no_orgao,rps_nu_telefone VALUES ((select max(tec_solicitante.sol_co_solicitacao) from tec_solicitante),'$divide[0]','$divide[1]','$divide[2]','$divide[3]')"; $res = mysqlexecuta($conexao,$sql); }Alguem se habilita?? Compartilhar este post Link para o post Compartilhar em outros sites
slipce 0 Denunciar post Postado Outubro 22, 2007 Testei o seu código aqui e ele está correto, aqui ele está mudando os valores( do INSERT ) corretamente, não entendo qual está sendo a sua dificuldade. Compartilhar este post Link para o post Compartilhar em outros sites
najalves 0 Denunciar post Postado Outubro 23, 2007 Testei o seu código aqui e ele está correto, aqui ele está mudando os valores( do INSERT ) corretamente, não entendo qual está sendo a sua dificuldade.A minha dúvida é a seguinte: tenho um form onde o usuário vai me requisitar um monitoramento. Nessa requisição ele tem q informar os responsaveis por acompanhar esse monitoramento.Como pode ser mais de um, as informações são digitadas em campos normais (nome, email ,telefone...). Qdo eu clicar em adicionar as informações passam pra um textarea.Se a pessoa quer inserir mais de um responsavel ela faz isso mais de uma vez. esses dados q vou gravar no banco, vou pegar do textarea.Eles vao estar dispostos assim,supondo q inseri mais de um responsavelnnnn,nnnnnnnnn,nnnnnn,nnn;nnnn,nnnnnnnnn,nnnnnn,nnn;nnnn,nnnnnnnnn,nnnnnn,nnn;nnnn,nnnnnnnnn,nnnnnn,nnn;qdo eu clicar em enviar, o script faz a função de explodir e gravar no banco. Acontece que ele so grava a primeira linha e não grava o resto! O problema está em fazer ele inserir tdas as informações, entende? Só falta isso pra eu terminar... http://forum.imasters.com.br/public/style_emoticons/default/upset.gif Alguem pode me ajudar de novo? Compartilhar este post Link para o post Compartilhar em outros sites
slipce 0 Denunciar post Postado Outubro 23, 2007 você está usando qual dos códigos postados aqui até agora?Você já verificou se está ocorrendo algum erro na query?Nesse insert, $sql = "INSERT INTO tec_responsavel (rps_co_solicitacao,rps_no_responsavel,rps_no_email,rps_no_orgao,rps_nu_telefone VALUES ((select max(tec_solicitante.sol_co_solicitacao) from tec_solicitante),'$divide[0]','$divide[1]','$divide[2]','$divide[3]')"; $res = mysqlexecuta($conexao,$sql);Faça assim echo "INSERT INTO tec_responsavel (rps_co_solicitacao,rps_no_responsavel,rps_no_email,rps_no_orgao,rps_nu_telefone VALUES ((select max(tec_solicitante.sol_co_solicitacao) from tec_solicitante),'$divide[0]','$divide[1]','$divide[2]','$divide[3]')";// $res = mysqlexecuta($conexao,$sql);Verifique se os valores estão corretos, se o loop está sendo executado o número de vezes correto, comente os comandos para testar.Se os valores estiverem corretos tente resgatar algum erro na query. Compartilhar este post Link para o post Compartilhar em outros sites
najalves 0 Denunciar post Postado Outubro 23, 2007 você está usando qual dos códigos postados aqui até agora?Você já verificou se está ocorrendo algum erro na query?Nesse insert, $sql = "INSERT INTO tec_responsavel (rps_co_solicitacao,rps_no_responsavel,rps_no_email,rps_no_orgao,rps_nu_telefone VALUES ((select max(tec_solicitante.sol_co_solicitacao) from tec_solicitante),'$divide[0]','$divide[1]','$divide[2]','$divide[3]')"; $res = mysqlexecuta($conexao,$sql);Faça assim echo "INSERT INTO tec_responsavel (rps_co_solicitacao,rps_no_responsavel,rps_no_email,rps_no_orgao,rps_nu_telefone VALUES ((select max(tec_solicitante.sol_co_solicitacao) from tec_solicitante),'$divide[0]','$divide[1]','$divide[2]','$divide[3]')";// $res = mysqlexecuta($conexao,$sql);Verifique se os valores estão corretos, se o loop está sendo executado o número de vezes correto, comente os comandos para testar.Se os valores estiverem corretos tente resgatar algum erro na query.To usando esse:$separa = explode(";", $_POST["conteudo"]);for ($i=0;$i<sizeof($separa);$i++) { $divide = explode(",", $separa[$i]); $sql = "INSERT INTO tec_responsavel (rps_co_solicitacao,rps_no_responsavel,rps_no_email,rps_no_orgao,rps_nu_telefone VALUES ((select max(tec_solicitante.sol_co_solicitacao) from tec_solicitante),'$divide[0]','$divide[1]','$divide[2]','$divide[3]')"; $res = mysqlexecuta($conexao,$sql); } Compartilhar este post Link para o post Compartilhar em outros sites
slipce 0 Denunciar post Postado Outubro 23, 2007 Najalves, já testei várias vezes o seu script, a lógica está correta.O seu código está separando os valores corretamente, você não está conseguindo capturar nenhum erro sua query quando você executa a função mysqlexecuta? Compartilhar este post Link para o post Compartilhar em outros sites
najalves 0 Denunciar post Postado Outubro 23, 2007 Najalves, já testei várias vezes o seu script, a lógica está correta.O seu código está separando os valores corretamente, você não está conseguindo capturar nenhum erro sua query quando você executa a função mysqlexecuta?Coloquei a seguinte linhaecho "Nome $i".$separa[$i];ele mostra o q foi digitado em 0 e 1 e da um "erro na execução do comando SQL.Favor contactar o administrador".De erro o que ta dando é isso. Compartilhar este post Link para o post Compartilhar em outros sites
slipce 0 Denunciar post Postado Outubro 23, 2007 Esse erro é do banco, ou é apenas um erro tratado?Posta o código dessa função mysqlexecuta, tenho quase certeza que esse erro que você postou não é o real.Quanto mais informações você der melhor, porque senão nós daqui do forúm não vamos conseguir ter a visão completa pra te ajudar, até agora ficamos muito presos nessas instruções do explode. Compartilhar este post Link para o post Compartilhar em outros sites
najalves 0 Denunciar post Postado Outubro 23, 2007 Esse erro é do banco, ou é apenas um erro tratado?Posta o código dessa função mysqlexecuta, tenho quase certeza que esse erro que você postou não é o real.Quanto mais informações você der melhor, porque senão nós daqui do forúm não vamos conseguir ter a visão completa pra te ajudar, até agora ficamos muito presos nessas instruções do explode.mysqlexecuta:<?php //Esta função executa um comando SQL no banco de dados MySQL//$conexao - Ponteiro da Conexão //$sql - Clausula SQL a executar //$erro - Especifica se a função exibe ou não(0=não, 1=sim) //$res - Resposta function mysqlexecuta($conexao,$sql,$erro = 1) { if(empty($sql) OR !($conexao)) return 0; //Erro na conexão ou no comando SQL if (!($res = @mysql_query($sql,$conexao))) { if($erro) echo "Ocorreu um erro na execução do Comando SQL no banco de dados. Favor Contactar o Administrador."; exit; } return $res; }?>esse é o erro q ta dandoNome 1 we,we,we,weNome 2 fg,fg,fg,fgOcorreu um erro na execução do Comando SQL no banco de dados. Favor Contactar o Administrador.o script é aquele q já disse.Fiz o teste que você pediu e a saida é a seguinte:Nome 1 sd,sd,sd,sdINSERT INTO tec_responsavel (rps_co_solicitacao,rps_no_responsavel,rps_no_email,rps_no_orgao,rps_nu_telefone VALUES ((select max(tec_solicitante.sol_co_solicitacao) from tec_solicitante),' sd','sd','sd','sd')Nome 2 er,er,er,erINSERT INTO tec_responsavel (rps_co_solicitacao,rps_no_responsavel,rps_no_email,rps_no_orgao,rps_nu_telefone VALUES ((select max(tec_solicitante.sol_co_solicitacao) from tec_solicitante),' er','er','er','er')Nome 3 INSERT INTO tec_responsavel (rps_co_solicitacao,rps_no_responsavel,rps_no_email,rps_no_orgao,rps_nu_telefone VALUES ((select max(tec_solicitante.sol_co_solicitacao) from tec_solicitante),' ','','','')Cadastro realizado com sucesso!depois do teste vi que é na hora de gravar mesmo q ele da o erro pois ele conseguiu pegar tudo que digitei.Desde já obrigada pela ajuda!!! Compartilhar este post Link para o post Compartilhar em outros sites
slipce 0 Denunciar post Postado Outubro 23, 2007 Por questões de segurança é melhor que você tire o código de conexão do post( pelo menos a senha ).O último select está vindo vazio.Na função if (!($res = mysql_query($sql,$conexao) or die("Erro:".mysql_error() )) {coloque o or die para mostrar o erro, tire o @, veja se ele está dando algum erro na segunda execução da query.Ou ele está gravando os dois primeiros registros?DETALHE!!!!Se você estiver colocando um ; no final da ÚLTIMA linha ele vai rodar a instrução do insert uma vez mais, provavelmente é isso que está causando o erro na última query. Compartilhar este post Link para o post Compartilhar em outros sites
najalves 0 Denunciar post Postado Outubro 23, 2007 Por questões de segurança é melhor que você tire o código de conexão do post( pelo menos a senha ).O último select está vindo vazio.Na função if (!($res = mysql_query($sql,$conexao) or die("Erro:".mysql_error() )) {coloque o or die para mostrar o erro, tire o @, veja se ele está dando algum erro na segunda execução da query.Ou ele está gravando os dois primeiros registros?DETALHE!!!!Se você estiver colocando um ; no final da ÚLTIMA linha ele vai rodar a instrução do insert uma vez mais, provavelmente é isso que está causando o erro na última query.Me perdi...Desculpa, você pode explicar melhor??como coloco o or die pra mostrar o erro?essa linha aí nao tem no codigo.substituo a q ja tenho por essa?esse ultimo ; tiro da onde??em tempo: ele so grava o primeiro registro.obrigada Compartilhar este post Link para o post Compartilhar em outros sites