Andreia Regina Postado Novembro 1, 2010 Denunciar Share Postado Novembro 1, 2010 Boa tarde,estou desenvolvendo um projeto onde gero um formulário conforme os dados vindos do banco. Agora preciso gravar os dados marcados neste formulário.Alguns campos podem gerar arrays, os nomes dos inputs também são dinâmicos.Como posso fazer?foreach($_POST as $campo => $valor){ $$campo=$valor; echo $$campo." ".$valor." <br />"; }Ele me retorna o seguinte erro:1 1 Array Array Array Array Array Array Array Array 8Neste caso o formulário está todo em uma página somente.Agradeço a quem puder me ajudar. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 rickayron Postado Novembro 2, 2010 Denunciar Share Postado Novembro 2, 2010 Boa tarde,estou desenvolvendo um projeto onde gero um formulário conforme os dados vindos do banco. Agora preciso gravar os dados marcados neste formulário.Alguns campos podem gerar arrays, os nomes dos inputs também são dinâmicos.Como posso fazer?foreach($_POST as $campo => $valor){ $$campo=$valor; echo $$campo." ".$valor." <br />"; } Ele me retorna o seguinte erro:1 1 Array Array Array Array Array Array Array Array 8 Neste caso o formulário está todo em uma página somente. Agradeço a quem puder me ajudar. aqui esá um exemplo de um codigo que gera inputs e recupera-os não sei se é isso o que quer mas aqui está <?php function CriarCampo($Quantidade,$NomeForm) { $Dados="<form name='$NomeForm' id='$NomeForm' action='dados.php' method='post' enctype='multipart/form-data'>"; if (is_numeric($Quantidade) && ($Quantidade>0) ) { for($i=1; $i<=$Quantidade; $i++) { $Dados.="<input type='text' name='$i' id='$i' value='$i'><Br/>"; } $Dados.="<input type='submit' value='enviar dados' ></form>"; $Retorno=$Dados; } else { $Retorno="Não é um número valido."; } return $Retorno; } if (!empty($_POST)) { foreach($_POST as $Key => $Nome) { echo "chave $Key nome $Nome<br/>"; } } else { echo CriarCampo($Quantidade=20,$NomeForm='envio'); } ?> Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Andreia Regina Postado Novembro 3, 2010 Autor Denunciar Share Postado Novembro 3, 2010 (editado) rickayron, acho que não é isso não, mas agradeço a atenção.Eu tenho a pergunta, dessa eu tenho o nome do campo que é pergunta, e tenho o número de perguntas que pego através da função count().Eu consegui gravar somente 1 registro com o último valor.$contador=count($pergunta); for($i=0; $i<=$contador; $i++) { if(!empty($valor)) { $sql="INSERT INTO tb_pesquisa_votos (pesquisa,pergunta,voto,data) VALUES ('$pesquisa','$pergunta[$i]','$valor',NOW())"; $resultado=mysql_query($sql) or die(mysql_error()); } }Como devo proceder para gravar todos os registros?Grata Editado Novembro 3, 2010 por Andreia Regina Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 rickayron Postado Novembro 3, 2010 Denunciar Share Postado Novembro 3, 2010 rickayron, acho que não é isso não, mas agradeço a atenção.Eu tenho a pergunta, dessa eu tenho o nome do campo que é pergunta, e tenho o número de perguntas que pego através da função count().Eu consegui gravar somente 1 registro com o último valor.$contador=count($pergunta); for($i=0; $i<=$contador; $i++) { if(!empty($valor)) { $sql="INSERT INTO tb_pesquisa_votos (pesquisa,pergunta,voto,data) VALUES ('$pesquisa','$pergunta[$i]','$valor',NOW())"; $resultado=mysql_query($sql) or die(mysql_error()); } }Como devo proceder para gravar todos os registros?Gratavoce tem o nome do campo? e quantidade?basta criar um array com os nomes dos campos$Nome=array("ddd","aaa","ccc","bbb");jogue eles em um laço percorra pegando os postes pelos nomesfor($i=0; $i<count($Nome); $i++){ $Respostas=$_POST[$Nome[$i]]; mysql_query("insert into tabela(campo) values('$Nome[$i]', '$Respostas')") or die(mysql_error());}caso prefira pode tambem jogar as respostas em um array e trata-las depois para um insert.aproveite o laço e insira-os no banco Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Andreia Regina Postado Novembro 5, 2010 Autor Denunciar Share Postado Novembro 5, 2010 Olá, rickayronnão tenho o número de campos definido, o arquivo para gravação está assim:foreach($_POST as $campo => $valor){ $$campo=$valor; } $contador=count($pergunta_id); $resposta=array(); for($i=0; $i<$contador; $i++) { $conta_resp=0; $resposta="resposta_".$pergunta_id[$i]; $conta_resp=count($resposta); if(!empty($resposta)) { for($r=0; $r<=$conta_resp; $r++) { $resposta_r=ltrim($resposta[$r]); $sql="INSERT INTO tb_votos (pesquisa_id,pergunta_id,usuario,voto,data_votacao) VALUES ('$pesquisa_id','$pergunta_id[$i]','$usuario','$resposta_r',NOW())"; echo $sql."<br />"; $resultado=mysql_query($sql) or die(mysql_error()); } #for }#if }#for me retornaINSERT INTO tb_votos (pesquisa_id,pergunta_id,usurio,voto,data_votacao) VALUES ('1','1','124','r',NOW()) eu não estou conseguindo fazê-lo pegar o valor do campo do form se eu colocar $valor ele vai gravar somente o valor do último campo do form. parte do form montado: 1. Qual(is) seção(ões) você mais acessa no site? <input name="pergunta_id[]" value="1" type="hidden"> <label class="vertical" for="resposta_4"><input name="resposta_1[]" id="resposta_4" tabindex="1" title="Instituição (localização, histórico, missão, etc.) " value="Instituição (localização, histórico, missão, etc.) " type="checkbox">Instituição (localização, histórico, missão, etc.) </label> <label class="vertical" for="resposta_5"><input name="resposta_1[]" id="resposta_5" tabindex="2" title="Publicação (Informações Econômicas, Revista de Economia Agrícola, etc.) " value="Publicação (Informações Econômicas, Revista de Economia Agrícola, etc.) " type="checkbox">Publicação (Informações Econômicas, Revista de Economia Agrícola, etc.) </label> <label class="vertical" for="resposta_6"><input name="resposta_1[]" id="resposta_6" tabindex="3" title="Banco de dados (Preços, Previsão de Safra, Área e Produção, etc.) " value="Banco de dados (Preços, Previsão de Safra, Área e Produção, etc.) " type="checkbox">Banco de dados (Preços, Previsão de Safra, Área e Produção, etc.) </label> <label class="vertical" for="resposta_7"><input name="resposta_1[]" id="resposta_7" tabindex="4" title="Serviços" value="Serviços" type="checkbox">Serviços</label>agradeço pela atenção Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Rafael P.C Postado Novembro 5, 2010 Denunciar Share Postado Novembro 5, 2010 (editado) Posta o resto do código do php. Tipo não da para saber da onde vem o valor da variável $pergunta_id. E aproveita manda também o código que imprime na tela as perguntas também. No aguardo. Editado Novembro 5, 2010 por Rafael P.C Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 rickayron Postado Novembro 5, 2010 Denunciar Share Postado Novembro 5, 2010 Olá, rickayronnão tenho o número de campos definido, o arquivo para gravação está assim:foreach($_POST as $campo => $valor){ $$campo=$valor; } $contador=count($pergunta_id); $resposta=array(); for($i=0; $i<$contador; $i++) { $conta_resp=0; $resposta="resposta_".$pergunta_id[$i]; $conta_resp=count($resposta); if(!empty($resposta)) { for($r=0; $r<=$conta_resp; $r++) { $resposta_r=ltrim($resposta[$r]); $sql="INSERT INTO tb_votos (pesquisa_id,pergunta_id,usuario,voto,data_votacao) VALUES ('$pesquisa_id','$pergunta_id[$i]','$usuario','$resposta_r',NOW())"; echo $sql."<br />"; $resultado=mysql_query($sql) or die(mysql_error()); } #for }#if }#for me retornaINSERT INTO tb_votos (pesquisa_id,pergunta_id,usurio,voto,data_votacao) VALUES ('1','1','124','r',NOW()) eu não estou conseguindo fazê-lo pegar o valor do campo do form se eu colocar $valor ele vai gravar somente o valor do último campo do form. parte do form montado: 1. Qual(is) seção(ões) você mais acessa no site? <input name="pergunta_id[]" value="1" type="hidden"> <label class="vertical" for="resposta_4"><input name="resposta_1[]" id="resposta_4" tabindex="1" title="Instituição (localização, histórico, missão, etc.) " value="Instituição (localização, histórico, missão, etc.) " type="checkbox">Instituição (localização, histórico, missão, etc.) </label> <label class="vertical" for="resposta_5"><input name="resposta_1[]" id="resposta_5" tabindex="2" title="Publicação (Informações Econômicas, Revista de Economia Agrícola, etc.) " value="Publicação (Informações Econômicas, Revista de Economia Agrícola, etc.) " type="checkbox">Publicação (Informações Econômicas, Revista de Economia Agrícola, etc.) </label> <label class="vertical" for="resposta_6"><input name="resposta_1[]" id="resposta_6" tabindex="3" title="Banco de dados (Preços, Previsão de Safra, Área e Produção, etc.) " value="Banco de dados (Preços, Previsão de Safra, Área e Produção, etc.) " type="checkbox">Banco de dados (Preços, Previsão de Safra, Área e Produção, etc.) </label> <label class="vertical" for="resposta_7"><input name="resposta_1[]" id="resposta_7" tabindex="4" title="Serviços" value="Serviços" type="checkbox">Serviços</label>agradeço pela atençãoforeach($_POST as $campo => $valor){ $$campo=$valor; }tente isso foreach($_POST as $Ncampo => $valor){ $campo[]=$valor; /* armazenando em um array */if (!empty($valor)){sql="INSERT INTO tb_votos (pesquisa_id,pergunta_id,usuario,voto,data_votacao) VALUES ('$pesquisa_id','$pergunta_id[$i]','$usuario','$valor',NOW())";} // if empty }até maisl Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Andreia Regina Postado Novembro 5, 2010 Autor Denunciar Share Postado Novembro 5, 2010 como posso saber se o conteúdo é um valor normal ou é um array?pois em alguns casos o valor é array e então grava Array no bdINSERT INTO tb_votos (pesquisa_id,pergunta_id,usuario,voto,data_votacao) VALUES ('1','1','1274','Array',NOW())INSERT INTO tb_votos (pesquisa_id,pergunta_id,usuario,voto,data_votacao) VALUES ('1','1','1274','teste',NOW())obrigada rickayron Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Stoma Postado Novembro 6, 2010 Denunciar Share Postado Novembro 6, 2010 (editado) Para isto, utilize a função is_array()www.php.net/is_array Editado Novembro 6, 2010 por Stoma Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 rickayron Postado Novembro 6, 2010 Denunciar Share Postado Novembro 6, 2010 Para isto, utilize a função is_array()www.php.net/is_arraye caso seja array você pode utilizar o implode para construir uma string com os dados do array, ou varrê-lo por um laço qualquer até mais Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Andreia Regina Postado Novembro 8, 2010 Autor Denunciar Share Postado Novembro 8, 2010 Pessoal agradeço muito a ajuda mas ainda não consegui, não sei onde estou errando, e parece que quanto mais eu tento mais fica nebuloso para mim...Está gravando várias vezes o mesmo resultado, a quantidade de registros duplicados é a quantidade de perguntas que eu tenho no formulário:foreach($_POST as $Ncampo => $valor){ $campo[]=$valor; #armazenando em um array $pesquisa_id=$_POST["pesquisa_id"]; $usuario=$_POST["usuario"]; $pergunta_id=$_POST["pergunta_id"]; $contador=0; $contador=count($pergunta_id); for($i=0; $i<$contador; $i++) { if((!empty($valor)) and (!is_array($valor)) ){ $sql="INSERT INTO tb_votos (pesquisa_id,pergunta_id,usuario,voto,data_votacao) VALUES ('$pesquisa_id','$pergunta_id[$i]','$usuario','$valor',NOW())"; echo $sql."<br />"; } if((!empty($valor)) and (is_array($valor)) ){ for($r=0; $r<$conta_resp; $r++) { $resposta_r=ltrim($resposta[$r]); $sql="INSERT INTO tb_votos (pesquisa_id,pergunta_id,usuario,voto,data_votacao) VALUES ('$pesquisa_id','$pergunta_id[$i]','$usuario','$valor',NOW())"; echo $sql."<br />"; } } $resultado=mysql_query($sql) or die(mysql_error()); } #for i }#foreachoutra questão:Tenho os campos definidos $pesquisa_id=$_POST["pesquisa_id"]; $usuario=$_POST["usuario"]; $pergunta_id=$_POST["pergunta_id"];que preciso identificar para não gravar como voto pois são de identificação da enquete, como posso fazer essa comparação, identificar estes campos e não considerá-lo como voto?Grata Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 AlexandreSA Postado Novembro 8, 2010 Denunciar Share Postado Novembro 8, 2010 (editado) Primeiro os campos no formulários devem ser assim:<input value="" class="" type="text" name="txt_nomeDep[]" id="txt_nomeDep" /> Editado Novembro 8, 2010 por AlexandreSA Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 rickayron Postado Novembro 8, 2010 Denunciar Share Postado Novembro 8, 2010 Pessoal agradeço muito a ajuda mas ainda não consegui, não sei onde estou errando, e parece que quanto mais eu tento mais fica nebuloso para mim...Está gravando várias vezes o mesmo resultado, a quantidade de registros duplicados é a quantidade de perguntas que eu tenho no formulário:foreach($_POST as $Ncampo => $valor){ $campo[]=$valor; #armazenando em um array $pesquisa_id=$_POST["pesquisa_id"]; $usuario=$_POST["usuario"]; $pergunta_id=$_POST["pergunta_id"]; $contador=0; $contador=count($pergunta_id); for($i=0; $i<$contador; $i++) { if((!empty($valor)) and (!is_array($valor)) ){ $sql="INSERT INTO tb_votos (pesquisa_id,pergunta_id,usuario,voto,data_votacao) VALUES ('$pesquisa_id','$pergunta_id[$i]','$usuario','$valor',NOW())"; echo $sql."<br />"; } if((!empty($valor)) and (is_array($valor)) ){ for($r=0; $r<$conta_resp; $r++) { $resposta_r=ltrim($resposta[$r]); $sql="INSERT INTO tb_votos (pesquisa_id,pergunta_id,usuario,voto,data_votacao) VALUES ('$pesquisa_id','$pergunta_id[$i]','$usuario','$valor',NOW())"; echo $sql."<br />"; } } $resultado=mysql_query($sql) or die(mysql_error()); } #for i }#foreachoutra questão:Tenho os campos definidos$pesquisa_id=$_POST["pesquisa_id"];$usuario=$_POST["usuario"];$pergunta_id=$_POST["pergunta_id"];que preciso identificar para não gravar como voto pois são de identificação da enquete, como posso fazer essa comparação, identificar estes campos e não considerá-lo como voto?Grataolá tudo bemvocê possui um link para a pagina, gostaria de ver para entender a sua logica, e post todo o codigo da pagina que envia os dados e a que recebe os dados e a estrutura sql da tabela que você vai inserir assim é mais pois está muito vago a sua duvida você quer inserir todos os campos? so alguns?restrições quais?e se for array vai inserir tudo em um unico registro ou varrer o array e inserir um a um registro? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Andreia Regina Postado Novembro 9, 2010 Autor Denunciar Share Postado Novembro 9, 2010 O formulário é gerado de acordo com os dados do banco de dados, definidos através do nosso Gerenciador de Conteúdo, onde é definido o tipo de campo, pergunta e respostas possíveis.o arquivo que faz a gravação é:<h1>Pesquisa de Opinião</h1> <?php setlocale (LC_CTYPE,"pt_BR"); foreach($_POST as $Ncampo => $valor){ $campo[]=$valor; #armazenando em um array $pesquisa_id=$_POST["pesquisa_id"]; $usuario=$_POST["usuario"]; $pergunta_id=$_POST["pergunta_id"]; $contador=0; $contador=count($pergunta_id); for($i=0; $i<$contador; $i++) { if((!empty($valor)) and (!is_array($valor)) ){ $sql="INSERT INTO tb_votos (pesquisa_id,pergunta_id,usuario,voto,data_votacao) VALUES ('$pesquisa_id','$pergunta_id[$i]','$usuario','$valor',NOW())"; echo $sql."<br />"; } if((!empty($valor)) and (is_array($valor)) ){ $conta_resp=count($valor); for($r=0; $r<$conta_resp; $r++) { $resposta_r=ltrim($resposta[$r]); $sql="INSERT INTO tb_votos (pesquisa_id,pergunta_id,usuario,voto,data_votacao) VALUES ('$pesquisa_id','$pergunta_id[$i]','$usuario','$valor',NOW())"; echo $sql."<br />"; } } $resultado=mysql_query($sql) or die(mysql_error()); } #for i }#foreach if($resultado){ print "<h1>Pesquisa de opinião</h1> <h2>Por favor, aguarde enquanto o redirecionamos...</h2>"; } #else do if($resultado) ?> -- Estrutura da tabela `tb_pesquisa_opiniao` -- CREATE TABLE IF NOT EXISTS `tb_pesquisa` ( `pesquisa_id` int(10) NOT NULL AUTO_INCREMENT, `titulo` varchar(250) NOT NULL, PRIMARY KEY (`pesquisa_id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 PACK_KEYS=0 AUTO_INCREMENT=2; CREATE TABLE IF NOT EXISTS `tb_colunas` ( `coluna_id` int(10) NOT NULL AUTO_INCREMENT, `pergunta_id` int(10) NOT NULL DEFAULT '0', `coluna` varchar(25) NOT NULL, PRIMARY KEY (`coluna_id`,`pergunta_id`), KEY `k1` (`coluna_id`), KEY `k2` (`pergunta_id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 PACK_KEYS=0 AUTO_INCREMENT=12; CREATE TABLE IF NOT EXISTS `tb_perguntas` ( `pergunta_id` int(10) NOT NULL AUTO_INCREMENT, `pesquisa_id` int(10) NOT NULL DEFAULT '0', `tipo_pergunta` enum('vertical','horizontal','resposta_linha','texto_explicativo') NOT NULL, `pergunta` varchar(250) NOT NULL, PRIMARY KEY (`pergunta_id`,`pesquisa_id`), KEY `i1` (`pergunta_id`), KEY `i2` (`pesquisa_id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 PACK_KEYS=0 AUTO_INCREMENT=12; CREATE TABLE IF NOT EXISTS `tb_respostas` ( `resposta_id` int(10) NOT NULL AUTO_INCREMENT, `pergunta_id` int(10) NOT NULL DEFAULT '0', `resposta` varchar(250) NOT NULL, PRIMARY KEY (`resposta_id`,`pergunta_id`), KEY `i1` (`resposta_id`), KEY `i2` (`pergunta_id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 PACK_KEYS=0 AUTO_INCREMENT=55; CREATE TABLE IF NOT EXISTS `tb_votos` ( `voto_id` int(10) NOT NULL AUTO_INCREMENT, `pesquisa_id` int(10) NOT NULL, `pergunta_id` int(10) NOT NULL DEFAULT '0', `usuario` int(6) unsigned zerofill NOT NULL DEFAULT '000000', `voto` varchar(250) NOT NULL, `data_votacao` datetime NOT NULL, PRIMARY KEY (`voto_id`,`pesquisa_id`,`pergunta_id`), KEY `pesquisa_id` (`pesquisa_id`), KEY `i2` (`pergunta_id`), KEY `usuario` (`usuario`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 PACK_KEYS=0 AUTO_INCREMENT=201;o html gerado está aquiObrigada. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 rickayron Postado Novembro 9, 2010 Denunciar Share Postado Novembro 9, 2010 O formulário é gerado de acordo com os dados do banco de dados, definidos através do nosso Gerenciador de Conteúdo, onde é definido o tipo de campo, pergunta e respostas possíveis.o arquivo que faz a gravação é:<h1>Pesquisa de Opinião</h1> <?php setlocale (LC_CTYPE,"pt_BR"); foreach($_POST as $Ncampo => $valor){ $campo[]=$valor; #armazenando em um array $pesquisa_id=$_POST["pesquisa_id"]; $usuario=$_POST["usuario"]; $pergunta_id=$_POST["pergunta_id"]; $contador=0; $contador=count($pergunta_id); for($i=0; $i<$contador; $i++) { if((!empty($valor)) and (!is_array($valor)) ){ $sql="INSERT INTO tb_votos (pesquisa_id,pergunta_id,usuario,voto,data_votacao) VALUES ('$pesquisa_id','$pergunta_id[$i]','$usuario','$valor',NOW())"; echo $sql."<br />"; } if((!empty($valor)) and (is_array($valor)) ){ $conta_resp=count($valor); for($r=0; $r<$conta_resp; $r++) { $resposta_r=ltrim($resposta[$r]); $sql="INSERT INTO tb_votos (pesquisa_id,pergunta_id,usuario,voto,data_votacao) VALUES ('$pesquisa_id','$pergunta_id[$i]','$usuario','$valor',NOW())"; echo $sql."<br />"; } } $resultado=mysql_query($sql) or die(mysql_error()); } #for i }#foreach if($resultado){ print "<h1>Pesquisa de opinião</h1> <h2>Por favor, aguarde enquanto o redirecionamos...</h2>"; } #else do if($resultado) ?> -- Estrutura da tabela `tb_pesquisa_opiniao` -- CREATE TABLE IF NOT EXISTS `tb_pesquisa` ( `pesquisa_id` int(10) NOT NULL AUTO_INCREMENT, `titulo` varchar(250) NOT NULL, PRIMARY KEY (`pesquisa_id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 PACK_KEYS=0 AUTO_INCREMENT=2; CREATE TABLE IF NOT EXISTS `tb_colunas` ( `coluna_id` int(10) NOT NULL AUTO_INCREMENT, `pergunta_id` int(10) NOT NULL DEFAULT '0', `coluna` varchar(25) NOT NULL, PRIMARY KEY (`coluna_id`,`pergunta_id`), KEY `k1` (`coluna_id`), KEY `k2` (`pergunta_id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 PACK_KEYS=0 AUTO_INCREMENT=12; CREATE TABLE IF NOT EXISTS `tb_perguntas` ( `pergunta_id` int(10) NOT NULL AUTO_INCREMENT, `pesquisa_id` int(10) NOT NULL DEFAULT '0', `tipo_pergunta` enum('vertical','horizontal','resposta_linha','texto_explicativo') NOT NULL, `pergunta` varchar(250) NOT NULL, PRIMARY KEY (`pergunta_id`,`pesquisa_id`), KEY `i1` (`pergunta_id`), KEY `i2` (`pesquisa_id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 PACK_KEYS=0 AUTO_INCREMENT=12; CREATE TABLE IF NOT EXISTS `tb_respostas` ( `resposta_id` int(10) NOT NULL AUTO_INCREMENT, `pergunta_id` int(10) NOT NULL DEFAULT '0', `resposta` varchar(250) NOT NULL, PRIMARY KEY (`resposta_id`,`pergunta_id`), KEY `i1` (`resposta_id`), KEY `i2` (`pergunta_id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 PACK_KEYS=0 AUTO_INCREMENT=55; CREATE TABLE IF NOT EXISTS `tb_votos` ( `voto_id` int(10) NOT NULL AUTO_INCREMENT, `pesquisa_id` int(10) NOT NULL, `pergunta_id` int(10) NOT NULL DEFAULT '0', `usuario` int(6) unsigned zerofill NOT NULL DEFAULT '000000', `voto` varchar(250) NOT NULL, `data_votacao` datetime NOT NULL, PRIMARY KEY (`voto_id`,`pesquisa_id`,`pergunta_id`), KEY `pesquisa_id` (`pesquisa_id`), KEY `i2` (`pergunta_id`), KEY `usuario` (`usuario`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 PACK_KEYS=0 AUTO_INCREMENT=201; o html gerado está aqui Obrigada. Olá tudo bem, Agora conseguir compreender melhor o seu objetivo com isso realizei algumas mudanças no seu codigo vou tentar explicar cada mudança para que você possa adaptar da melhor maneira a sua necessidade. <h1>Pesquisa de Opinião</h1> <?php setlocale (LC_CTYPE,"pt_BR"); /* a seguir um array com todos os campos que deverão ser desconsiderados */ $CamposRestritos=array("pergunta_id","pesquisa_id","usuario"); foreach($_POST as $Ncampo => $valor) { /* a seguir uma verificação se exite o nome do campo recuperado dentro do conjunto de nomes de campos restritos */ if (!in_array($Ncampo,$CamposRestritos)) { /* $pesquisa_id=$_POST["pesquisa_id"]; $usuario=$_POST["usuario"]; $pergunta_id=$_POST["pergunta_id"]; */ if((!empty($valor)) and (!is_array($valor)) ) { $sql="INSERT INTO tb_votos (pesquisa_id,pergunta_id,usuario,voto,data_votacao) VALUES ('$pesquisa_id','$pergunta_id[$i]','$usuario','$valor',NOW())"; echo $sql."<br />"; } if((!empty($valor)) and (is_array($valor)) ) { $conta_resp=count($valor); for($r=0; $r<$conta_resp; $r++) { $resposta_r=ltrim($valor[$r]); $sql="INSERT INTO tb_votos (pesquisa_id,pergunta_id,usuario,voto,data_votacao) VALUES ('$pesquisa_id','$pergunta_id[$i]','$usuario','$resposta_r',NOW())"; echo $sql."<br />"; } } $resultado=mysql_query($sql) or die(mysql_error()); }/* in array */ } /* final do foreach */ if($resultado){ print "<h1>Pesquisa de opinião</h1> <h2>Por favor, aguarde enquanto o redirecionamos...</h2>"; } #else do if($resultado) ?> nas primeiras linhas temos a construção de um array com nomes dos campos que devem ser ignorados durante a captura dos mesmos. /* a seguir um array com todos os campos que deverão ser desconsiderados */ $CamposRestritos=array("pergunta_id","pesquisa_id","usuario"); retirei o for que percorre a quantidade de ids das perguntas enviadas $pergunta_id=$_POST["pergunta_id"]; */ porque o for each já está sendo executado e vai percorrer todos os campos não sei se estou certo caso esteja basta incluir-lo novamente. mais a frente adicionei essa linha if (!in_array($Ncampo,$CamposRestritos)) { /* serve pra verifica se o nome do campo que está em evidencia dentro do foreach está incluso nos campos que devem ser ignorados se retornar false ele prossegue caso seja true não faz e pula para o proximo campo sem executar nenhuma ação. Nesse trecho realizei algumas mudanças if((!empty($valor)) and (is_array($valor)) ) { $conta_resp=count($valor); for($r=0; $r<$conta_resp; $r++) { $resposta_r=ltrim($valor[$r]); $sql="INSERT INTO tb_votos (pesquisa_id,pergunta_id,usuario,voto,data_votacao) VALUES ('$pesquisa_id','$pergunta_id[$i]','$usuario','$resposta_r',NOW())"; echo $sql."<br />"; } }no trecho acima anteriormente $resposta_r=ltrim($resposta[$r]); a variavel $resposta_r pega a unidade de array inexistente pois nesse momento o array percorrendo o array valor e não a resposta e ainda na linha do sql você incluia o array valor então realizei essas mudançasaté mais.e qualquer problemas continue postando acho que agora a coisa vai até mais Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Andreia Regina Postado Novembro 30, 2010 Autor Denunciar Share Postado Novembro 30, 2010 rickayron, muito obrigada,realmente estamos quase lá...não estou conseguindo a gravação de 2 tipos de campos:=> checkbox=> text quando tem mais de 1 linha.acho que o problema é com o nome do campo que é um array, no momento da gravação ele não grava todos somente o últimoAlém disso tem 2 registros em branco:INSERT INTO `tb_votos` (`voto_id`, `pesquisa_id`, `pergunta_id`, `usuario`, `voto`, `data_votacao`) VALUES (1, 1, 11, 1234, 'Banco de dados (Preços, Previsão de Safra, Área e Produção, etc.) ', '2010-11-30 11:42:48'), (2, 1, 11, 1234, '', '2010-11-30 11:42:48'), (3, 1, 11, 1234, 'Sim', '2010-11-30 11:42:48'), (4, 1, 11, 1234, 'Atendimento ao associado - Muito satisfeito', '2010-11-30 11:42:48'), (5, 1, 11, 1234, 'Relação custo benefício - Satisfeito', '2010-11-30 11:42:48'), (6, 1, 11, 1234, 'Experiência de uso - Pouco satisfeito', '2010-11-30 11:42:48'), (7, 1, 11, 1234, 'Processo de empréstimo - Satisfeito', '2010-11-30 11:42:48'), (8, 1, 11, 1234, 'Os conteúdos são variados - Eventos', '2010-11-30 11:42:49'), (9, 1, 11, 1234, 'teste', '2010-11-30 11:42:49'), (10, 1, 11, 1234, '', '2010-11-30 11:42:49'), (11, 1, 11, 1234, 'gostei', '2010-11-30 11:42:49');(2, 1, 11, 1234, '', '2010-11-30 11:42:48'), => a última resposta estava em branco (8, 1, 11, 1234, 'Os conteúdos são variados - Eventos', '2010-11-30 11:42:49') => mais respostas foram marcadas(10, 1, 11, 1234, '', '2010-11-30 11:42:49'), => eram 4 linhas apenas as linhas 1 e 2 tinham conteúdo as demais estavam em brandopode me dar uma luz?o html gerado está aquigrata Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 rickayron Postado Dezembro 1, 2010 Denunciar Share Postado Dezembro 1, 2010 rickayron, muito obrigada,realmente estamos quase lá...não estou conseguindo a gravação de 2 tipos de campos:=> checkbox=> text quando tem mais de 1 linha.acho que o problema é com o nome do campo que é um array, no momento da gravação ele não grava todos somente o últimoAlém disso tem 2 registros em branco:INSERT INTO `tb_votos` (`voto_id`, `pesquisa_id`, `pergunta_id`, `usuario`, `voto`, `data_votacao`) VALUES (1, 1, 11, 1234, 'Banco de dados (Preços, Previsão de Safra, Área e Produção, etc.) ', '2010-11-30 11:42:48'), (2, 1, 11, 1234, '', '2010-11-30 11:42:48'), (3, 1, 11, 1234, 'Sim', '2010-11-30 11:42:48'), (4, 1, 11, 1234, 'Atendimento ao associado - Muito satisfeito', '2010-11-30 11:42:48'), (5, 1, 11, 1234, 'Relação custo benefício - Satisfeito', '2010-11-30 11:42:48'), (6, 1, 11, 1234, 'Experiência de uso - Pouco satisfeito', '2010-11-30 11:42:48'), (7, 1, 11, 1234, 'Processo de empréstimo - Satisfeito', '2010-11-30 11:42:48'), (8, 1, 11, 1234, 'Os conteúdos são variados - Eventos', '2010-11-30 11:42:49'), (9, 1, 11, 1234, 'teste', '2010-11-30 11:42:49'), (10, 1, 11, 1234, '', '2010-11-30 11:42:49'), (11, 1, 11, 1234, 'gostei', '2010-11-30 11:42:49');(2, 1, 11, 1234, '', '2010-11-30 11:42:48'), => a última resposta estava em branco (8, 1, 11, 1234, 'Os conteúdos são variados - Eventos', '2010-11-30 11:42:49') => mais respostas foram marcadas(10, 1, 11, 1234, '', '2010-11-30 11:42:49'), => eram 4 linhas apenas as linhas 1 e 2 tinham conteúdo as demais estavam em brandopode me dar uma luz?o html gerado está aquigrataposte o codigo atual da sua pagina. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Andreia Regina Postado Dezembro 1, 2010 Autor Denunciar Share Postado Dezembro 1, 2010 Olá,o script de gravação está assim:<?php setlocale (LC_CTYPE,"pt_BR"); $CamposRestritos=array("pergunta_id","pesquisa_id","usuario"); $i=0; foreach($_POST as $Ncampo => $valor) { if(!in_array($Ncampo,$CamposRestritos)){ #verifica se o campo está nos nomes restritos $pesquisa_id=$_POST["pesquisa_id"]; $usuario=$_POST["usuario"]; $pergunta_id=$_POST["pergunta_id"]; $contador=count($pergunta_id); for($i=0; $i<$contador; $i++) { echo $pergunta_id[$i]." pergunta<br/> "; if((!empty($valor)) and (!is_array($valor)) ){ $sql="INSERT INTO tb_votos (pesquisa_id,pergunta_id,usuario,voto,data_votacao) VALUES ('$pesquisa_id','$pergunta_id[$i]','$usuario','$valor',NOW())"; echo $sql."<br />"; } if((!empty($valor)) and (is_array($valor)) ){ $conta_resp=count($valor); echo $conta_resp." resp <br/>"; for($r=0; $r<$conta_resp; $r++){ echo $r." r <br/>"; $resposta_r=ltrim($valor[$r]); $sql="INSERT INTO tb_votos (pesquisa_id,pergunta_id,usuario,voto,data_votacao) VALUES ('$pesquisa_id','$pergunta_id[$i]','$usuario','$resposta_r',NOW())"; echo $sql."<br />"; } } } #for $resultado=mysql_query($sql) or die(mysql_error()); }#in array # ++$i; } #foreacha linha: $resultado=mysql_query($sql) or die(mysql_error());está posicionada em local incorreto?obrigada Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Dinho19sp Postado Dezembro 2, 2010 Denunciar Share Postado Dezembro 2, 2010 (editado) Boa tarde,estou desenvolvendo um projeto onde gero um formulário conforme os dados vindos do banco. Agora preciso gravar os dados marcados neste formulário.Alguns campos podem gerar arrays, os nomes dos inputs também são dinâmicos.Como posso fazer?foreach($_POST as $campo => $valor){ $$campo=$valor; echo $$campo." ".$valor." <br />"; } Ele me retorna o seguinte erro:1 1 Array Array Array Array Array Array Array Array 8 Neste caso o formulário está todo em uma página somente. Agradeço a quem puder me ajudar. Ola ... eu posso te falar que eu fiz uma sql dinamica , onde o form tem que ter os campos com o mesmo nome que esta no BD assim você não precisa mexer muito na sql ... so no form e no BD ... e acredito que você pode resolver sua duvida... acho que vai ajudar ... assim essa sql eu fiz pra usar com xajax mas pode ser usada via post tambem. Segue a sql estruturada... $sql = "insert into ".DATABASE.".".TABELA1." ("; // Inicia SQL foreach($vForm as $campo => $valor){ $sql .= (($i>0)? ",": "").$campo; $i++; } $sql .= ") values ("; $i = 0; foreach($vForm as $campo => $valor){ $sql .= (($i>0)? ",": "").utf8_decode("'".$valor."'"); $i++; } $sql .= ")"; $qdf = mysql_query($sql,$connect); Editado Dezembro 2, 2010 por Dinho19sp Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 rickayron Postado Dezembro 2, 2010 Denunciar Share Postado Dezembro 2, 2010 Olá,o script de gravação está assim:<?php setlocale (LC_CTYPE,"pt_BR"); $CamposRestritos=array("pergunta_id","pesquisa_id","usuario"); $i=0; foreach($_POST as $Ncampo => $valor) { if(!in_array($Ncampo,$CamposRestritos)){ #verifica se o campo está nos nomes restritos $pesquisa_id=$_POST["pesquisa_id"]; $usuario=$_POST["usuario"]; $pergunta_id=$_POST["pergunta_id"]; $contador=count($pergunta_id); for($i=0; $i<$contador; $i++) { echo $pergunta_id[$i]." pergunta<br/> "; if((!empty($valor)) and (!is_array($valor)) ){ $sql="INSERT INTO tb_votos (pesquisa_id,pergunta_id,usuario,voto,data_votacao) VALUES ('$pesquisa_id','$pergunta_id[$i]','$usuario','$valor',NOW())"; echo $sql."<br />"; } if((!empty($valor)) and (is_array($valor)) ){ $conta_resp=count($valor); echo $conta_resp." resp <br/>"; for($r=0; $r<$conta_resp; $r++){ echo $r." r <br/>"; $resposta_r=ltrim($valor[$r]); $sql="INSERT INTO tb_votos (pesquisa_id,pergunta_id,usuario,voto,data_votacao) VALUES ('$pesquisa_id','$pergunta_id[$i]','$usuario','$resposta_r',NOW())"; echo $sql."<br />"; } } } #for $resultado=mysql_query($sql) or die(mysql_error()); }#in array # ++$i; } #foreach a linha: $resultado=mysql_query($sql) or die(mysql_error()); está posicionada em local incorreto? obrigada Fiz algumas alterações troquei o for por foreach por que nessas condições talves haja falha no for por que o for utiliza o contador para acessar os elementos caso o array venha desordenado isso fará com que os elementos fique inalcansaveis pelo for ex: $a é igual a um array que chave =1 e elemento =a e chave =3 e elemento =b o segundo elemento não será alcançado pelo for , o foreach fará isso perfeitamente. 2° alteração (!empty($PerguntaDescricao)) foi adicionar uma verificação nos dados provinientes da pergunta_id para evitar que seja inserido em branco. 3° sim o mysql_query está no local certo. 4° a questão de não recuperar todos os checkbox pode que talves as propriedades values deles não estejam setadas ou em branco, ou ainda pode ser porque você esteja usando o for e os seus elementos estejam vindo desordenados dentro do array fazendo assim que alguns elementos fiquem inassessiveis. de qualquer forme cheque para ver se os checkbox estão recebendo valores na pagina anterior <?php setlocale (LC_CTYPE,"pt_BR"); $CamposRestritos=array("pergunta_id","pesquisa_id","usuario"); $i=0; foreach($_POST as $Ncampo => $valor) { if(!in_array($Ncampo,$CamposRestritos)){ #verifica se o campo está nos nomes restritos $pesquisa_id=$_POST["pesquisa_id"]; $usuario=$_POST["usuario"]; $pergunta_id=$_POST["pergunta_id"]; $contador=count($pergunta_id); foreach($pergunta_id as $CodPes => $PerguntaDescricao) { echo $PerguntaDescricao." pergunta<br/> "; if((!empty($valor)) and (!is_array($valor)) && (!empty($PerguntaDescricao)) ){ $sql="INSERT INTO tb_votos (pesquisa_id,pergunta_id,usuario,voto,data_votacao) VALUES ('$pesquisa_id','$PerguntaDescricao','$usuario','$valor',NOW())"; echo $sql."<br />"; } if((!empty($valor)) and (is_array($valor)) && (!empty($PerguntaDescricao)) ){ $conta_resp=count($valor); echo $conta_resp." resp <br/>"; foreach($valor as $KeyValor => $ValorDescricao){ echo $KeyValor." r <br/>"; $resposta_r=ltrim($ValorDescricao); $sql="INSERT INTO tb_votos (pesquisa_id,pergunta_id,usuario,voto,data_votacao) VALUES ('$pesquisa_id','$PerguntaDescricao','$usuario','$resposta_r',NOW())"; echo $sql."<br />"; } } } #for $resultado=mysql_query($sql) or die(mysql_error()); }#in array # ++$i; } #foreachaté mais. qualquer coisa poste ai Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Andreia Regina
Boa tarde,
estou desenvolvendo um projeto onde gero um formulário conforme os dados vindos do banco. Agora preciso gravar os dados marcados neste formulário.
Alguns campos podem gerar arrays, os nomes dos inputs também são dinâmicos.
Como posso fazer?
Ele me retorna o seguinte erro:
Neste caso o formulário está todo em uma página somente.
Agradeço a quem puder me ajudar.
Link para o comentário
Compartilhar em outros sites
19 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.