Ir para conteúdo
Fórum Script Brasil
  • 0

Gravar dados de formulário dinâmico


Andreia Regina

Pergunta

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.

Link para o comentário
Compartilhar em outros sites

19 respostass a esta questão

Posts Recomendados

  • 0
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');
}
?>

Link para o comentário
Compartilhar em outros sites

  • 0

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 por Andreia Regina
Link para o comentário
Compartilhar em outros sites

  • 0
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

voce 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 nomes

for($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

Link para o comentário
Compartilhar em outros sites

  • 0

Olá, rickayron

nã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 retorna
INSERT 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

Link para o comentário
Compartilhar em outros sites

  • 0
Olá, rickayron

nã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 retorna
INSERT 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

foreach($_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

Link para o comentário
Compartilhar em outros sites

  • 0

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 bd

INSERT 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

Link para o comentário
Compartilhar em outros sites

  • 0

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
    }#foreach

outra 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

Link para o comentário
Compartilhar em outros sites

  • 0
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
    }#foreach

outra 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

olá tudo bem

você 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?

Link para o comentário
Compartilhar em outros sites

  • 0

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.

Link para o comentário
Compartilhar em outros sites

  • 0
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ças

até mais.

e qualquer problemas continue postando acho que agora a coisa vai até mais

Link para o comentário
Compartilhar em outros sites

  • 0

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 último

Alé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 brando

pode me dar uma luz?

o html gerado está aqui

grata

Link para o comentário
Compartilhar em outros sites

  • 0
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 último

Alé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 brando

pode me dar uma luz?

o html gerado está aqui

grata

poste o codigo atual da sua pagina.

Link para o comentário
Compartilhar em outros sites

  • 0

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

Link para o comentário
Compartilhar em outros sites

  • 0
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 por Dinho19sp
Link para o comentário
Compartilhar em outros sites

  • 0
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;
    } #foreach

até mais. qualquer coisa poste ai

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...