Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

najalves

script em php que grava dados em um banco mysql

Recommended Posts

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
<?php

include "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

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

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

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

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

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

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

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

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

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

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

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

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

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, 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

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

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 dando
Nome 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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.