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

(Resolvido) Inserir Dados


3dmaniaco

Pergunta

Olá Pessoal. Tudo Bem ?

Eu criei um formulario, onde eu consigo inserir varios dados ao mesmo tempo no BD MySql, onde eu aperto um botão chamado Adicionar +, aparece outro input abaixo do anterior, onde eu posso cadastrar outra informação, vejam :

formulario.png

Onde esta os dados 10, 11, 12, 13, 14 é o campo nome[] - Onde deverá salva no BD, na tabela qtde_produto

Onde esta os dados 20, 21, 22, 23, 24 é o campo quantidade[] - Onde deverá salvar no BD, na tabela status_preenchimento

Quando eu envio as informações, ele só salva as informações do campo nome[], então salva os dados 10, 11, 12, 13, 14, ele não esta salvando as informações do campo quantidade[].

Vejam meu codigo:

<?php 
    if( $_POST['enviar'] ){ 
            $campos = Array(); 
                foreach( $_POST['nome'] as $campo ){ 
                    if(!empty( $campo )) 
                $campos[] = "('$campo')"; 
                } 
                $query = "INSERT INTO torre ( qtde_produto, status_preenchimento ) VALUES ".implode(",", $campos); 
        echo $query;  
      mysql_query($query) or die(mysql_error());            
        } 
?>

Oque posso modificar, para que ele salve os dados de todos os campos no BD.

Toda Ajuda será muito bem vinda

Obrigado desde já.

Link para o comentário
Compartilhar em outros sites

18 respostass a esta questão

Posts Recomendados

  • 0
foreach( $_POST['nome'] as $indice=>$campo ){
                    if(!empty( $campo )){
                $campos[] = "('$campo')";
                
                $quantidades[] = $_POST['quantidade']['indice'];
                }

                }

Link para o comentário
Compartilhar em outros sites

  • 0

Então amigo, deu erro, veja como ficou o codigo

<?php 
    if( $_POST['enviar'] ){ 
            $campos = Array(); 
                foreach( $_POST['nome'] as $indice=>$campo ){
                    if(!empty( $campo )){
                $campos[] = "('$campo')";
                
                $quantidades[] = $_POST['quantidade']['indice'];
                }

                }

                $query = "INSERT INTO torre ( qtde_produto, status_preenchimento ) VALUES ".implode(",", $campos); 
        echo $query;  
      mysql_query($query) or die(mysql_error());            
        } 
?>

E valeu pela força

Link para o comentário
Compartilhar em outros sites

  • 0

Este é meu codigo completo

E esta dando esse erro.

INSERT INTO torre ( qtde_produto, status_preenchimento ) VALUES ('1')Column count doesn't match value count at row 1

<?php  
$conexao = mysql_connect("localhost", "root", "safebd") or die(mysql_error());  
$db = mysql_select_db("abyara");  
?>  
<script type="text/javascript" src="http://code.jquery.com/jquery-1.5.1.min.js"></script> 
<script type="text/javascript"> 
   $(document).ready(function(){ 
         $("#add").click(function(){ 
                      $("div").append('<table border="0" width="470" cellspacing="0" cellpadding="0"><tr><td width="200"><font face="Verdana" style="font-size: 3pt">&nbsp;</font></td><td width="200"><font face="Verdana" style="font-size: 3pt">&nbsp;</font></td><td width="200"><font face="Verdana" style="font-size: 3pt">&nbsp;</font></td><td width="200"><font face="Verdana" style="font-size: 3pt">&nbsp;</font></td></tr><tr><td width="200"><center><input type="text" name="nome[]" size="15" style="font-weight: 700"></center></td><td width="200"><center><input type="text" name="quantidade[]" size="4" style="font-weight: 700"></center></td><td width="200"><center><input type="text" name="peso[]" size="8" style="font-weight: 700"></font><b><font color="#FF0000" size="2" face="Verdana"></font></b></center></td><td width="200"><center><input type="text" name="valor[]" size="6" style="font-weight: 700"></center></td></tr></table>'); 
                 }); 
   }); 
</script> 
<form method="post"> 
<div></div> 
<table border="0" width="470" cellspacing="0" cellpadding="0"><tr><td width="200"><font face="Verdana" style="font-size: 3pt">&nbsp;</font></td><td width="200"><font face="Verdana" style="font-size: 3pt">&nbsp;</font></td><td width="200"><font face="Verdana" style="font-size: 3pt">&nbsp;</font></td><td width="200"><font face="Verdana" style="font-size: 3pt">&nbsp;</font></td></tr><tr><td width="200"><center><input type="text" name="nome[]" size="15" style="font-weight: 700"></center></td><td width="200"><center><input type="text" name="quantidade[]" size="4" style="font-weight: 700"></center></td><td width="200"><center><input type="text" name="peso[]" size="8" style="font-weight: 700"></font><b><font color="#FF0000" size="2" face="Verdana"></font></b></center></td><td width="200"><center><input type="text" name="valor[]" size="6" style="font-weight: 700"></center></td></tr></table><input type="button" id="add" value="Addicionar"><input type="submit" name="enviar"> 
</form> 

<?php 
    if( $_POST['enviar'] ){ 
            $campos = Array(); 
                foreach( $_POST['nome'] as $indice=>$campo ){
                    if(!empty( $campo )){
                $campos[] = "('$campo')";
                
                $quantidades[] = $_POST['quantidade']['indice'];
                }

                }

                $query = "INSERT INTO torre ( qtde_produto, status_preenchimento ) VALUES ".implode(",", $campos); 
        echo $query;  
      mysql_query($query) or die(mysql_error());            
        } 
?> 

<?php  
mysql_close($conexao);  
?>

Editado por 3dmaniaco
Link para o comentário
Compartilhar em outros sites

  • 0

Boa noite amigo, olha, tem 2 coisas que precisam estar certas para seu código funcionar

1) HTML : os inputs devem sercriados assim:

<input name="campo[1][nome]" type="text" />
<input name="campo[1][quantidade]" type="text" />
<br />
<input name="campo[2][nome]" type="text" />
<input name="campo[2][quantidade]" type="text" />
<br />
<input name="campo[x][nome]" type="text" />
<input name="campo[x][quantidade]" type="text" />
<br />
.......
2) PHP : uma vez que os input's tem ligação pelo indice no array, ai você vai poder criar a função no php. a sua está pegando realmente somente o nome, em seu caso, que foi digitado, para pegar o nome e o valor, faça assim:
if( $_POST['enviar'] )
{
    $novosRegistros = Array();

    foreach( $_POST['nome'] as $linha )//Rodar todo o post linha por linha, e econtrar os que possuem nome e quantdiade
    {
        /*
         * Validação necessária para garantir que a linha 
         * tenha os valores necessários para ir ao banco de dados
         * Caso não tenha, passa direto para próxima.
        */

        if( isset($linha["nome"]) && isset($linha["quantidade"]) )
        {
            $novosRegistros[] = "( ". $linha["nome"] .", ". $linha["quantidade"] ." )";
        }
    }

    $query = "INSERT INTO torre ( qtde_produto, status_preenchimento ) VALUES ". implode(", ", $novosRegistros);
    echo $query;
    mysql_query($query) or die(mysql_error());

}
Certeza que assim vai funcionar, não esqueça de postar o resultado ein, abraço. :rolleyes:
Olá Pessoal. Tudo Bem ? Eu criei um formulario, onde eu consigo inserir varios dados ao mesmo tempo no BD MySql, onde eu aperto um botão chamado Adicionar +, aparece outro input abaixo do anterior, onde eu posso cadastrar outra informação, vejam : formulario.png Onde esta os dados 10, 11, 12, 13, 14 é o campo nome[] - Onde deverá salva no BD, na tabela qtde_produto Onde esta os dados 20, 21, 22, 23, 24 é o campo quantidade[] - Onde deverá salvar no BD, na tabela status_preenchimento Quando eu envio as informações, ele só salva as informações do campo nome[], então salva os dados 10, 11, 12, 13, 14, ele não esta salvando as informações do campo quantidade[]. Vejam meu codigo:
<?php 
    if( $_POST['enviar'] ){ 
            $campos = Array(); 
                foreach( $_POST['nome'] as $campo ){ 
                    if(!empty( $campo )) 
                $campos[] = "('$campo')"; 
                } 
                $query = "INSERT INTO torre ( qtde_produto, status_preenchimento ) VALUES ".implode(",", $campos); 
        echo $query;  
      mysql_query($query) or die(mysql_error());            
        } 
?>

Oque posso modificar, para que ele salve os dados de todos os campos no BD.

Toda Ajuda será muito bem vinda

Obrigado desde já.

Editado por Linkbes
Link para o comentário
Compartilhar em outros sites

  • 0

Primeiramente, obrigado Linkbes, pela força cara.

Eu copiei e colei o seu comigo no meu codigo, e o formulario, envia sem dar erro, mas não grava no BD, olha como ficou meu codigo.

<?php  
$conexao = mysql_connect("localhost", "root", "ondemand@2011") or die(mysql_error());  
$db = mysql_select_db("abyara");  
?>  
<script type="text/javascript" src="http://code.jquery.com/jquery-1.5.1.min.js"></script> 
<script type="text/javascript"> 
   $(document).ready(function(){ 
         $("#add").click(function(){ 
                      $("div").append('<table width="100" border="0" cellspacing="0" cellpadding="0"><tr><td><input name="campo[1][nome]" type="text" /></td><td><input name="campo[1][quantidade]" type="text" /></td></tr></table>'); 
                 }); 
   }); 
</script> 
<form method="post"> 
<div></div>
<table width="100" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td><input name="campo[1][nome]" type="text" /></td>
    <td><input name="campo[1][quantidade]" type="text" /></td>
  </tr>
  <tr>
    <td><input type="button" id="add" value="Addicionar"></td>
    <td><input type="submit" name="enviar"></td>
  </tr>
</table>
</form> 

<?php 
    if( $_POST['enviar'] )
            { 
                foreach( $_POST['nome'] as $linha )//Rodar todo o post linha por linha, e econtrar os que possuem nome e quantdiade
                {
                /*
                 * Validação necessária para garantir que a linha 
                 * tenha os valores necessários para ir ao banco de dados
                 * Caso não tenha, passa direto para próxima.
                */
                    if( isset($linha["nome"]) && isset($linha["quantidade"]) )
                {
                    $query = "INSERT INTO torre ( qtde_produto, status_preenchimento ) VALUES (". implode(", ", $linha) .")";
                    echo $query;
                    mysql_query($query) or die(mysql_error());
                }

                }
          
        }

?> 

<?php  
mysql_close($conexao);  
?>

Oque pode estar errado agora ?

Editado por 3dmaniaco
Link para o comentário
Compartilhar em outros sites

  • 0

Seguinte amigo, acho que a melhor maneira de checar é assim:

Troca de :

if( $_POST['enviar'] )
para
if( isset( $_POST['enviar'] ) )

porque como você criou o input submit contendo apenas o name = "enviar" e não definiu o value, o if do php não entra pois o enviar existe mas está vazio.

checando com isset() vai funcionar.

Link para o comentário
Compartilhar em outros sites

  • 0

Mais uma vez, obrigado cara.

Mas esse codigo já esta se tornando um enigma cara, não ta salvando o conteudo das input's no BD

Cara, vê se você consegue localizar o erro, pois já revirei esse codigo e não achei nada de errado.

Agradeço se puder me dar essa força mano

Vou disponibilizar o codigo e o SQL do BD da tabela, para você testar, e ver oque estou te falando.

Codigo MySql

CREATE TABLE `torre` (
  `id_torre` int(10) unsigned NOT NULL auto_increment,
  `fk_id_produto` varchar(50) NOT NULL default '0',
  `qtde_produto` varchar(50) NOT NULL default '0',
  `status_preenchimento` varchar(45) NOT NULL,
  PRIMARY KEY  (`id_torre`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=36;
Codigo Cadastrar.php
<?php  
$conexao = mysql_connect("localhost", "root", "teste") or die(mysql_error());  
$db = mysql_select_db("abyara");  
?>  
<script type="text/javascript" src="http://code.jquery.com/jquery-1.5.1.min.js"></script> 
<script type="text/javascript"> 
   $(document).ready(function(){ 
         $("#add").click(function(){ 
                      $("div").append('<table width="100" border="0" cellspacing="0" cellpadding="0"><tr><td><input name="campo[1][nome]" type="text" /></td><td><input name="campo[1][quantidade]" type="text" /></td></tr></table>'); 
                 }); 
   }); 
</script> 
<form method="post"> 
<div></div>
<table width="100" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td><input name="campo[1]['nome']" type="text" /></td>
    <td><input name="campo[1]['quantidade']" type="text" /></td>
  </tr>
  <tr>
    <td><input name="campo[x][nome]" type="text" /></td>
    <td><input name="campo[x][quantidade]" type="text" /></td>
  </tr>
  <tr>
    <td><input type="button" id="add" value="Addicionar"></td>
    <td><input type="submit" name="enviar"></td>
  </tr>
</table>
</form> 

<?php 
    if( isset( $_POST['enviar'] ) ) // Verifica se a variavel existe
            { 
                foreach( $_POST['nome'] as $linha )//Rodar todo o post linha por linha, e econtrar os que possuem nome e quantdiade
                {
                /*
                 * Validação necessária para garantir que a linha 
                 * tenha os valores necessários para ir ao banco de dados
                 * Caso não tenha, passa direto para próxima.
                */
                    if( isset($linha['nome']) && isset($linha['quantidade']) )
                {
                    $query = "INSERT INTO torre (qtde_produto, status_preenchimento) VALUES (". implode(", ", $linha) .")";
                    echo $query;
                    mysql_query($query) or die(mysql_error());
                }

                }
          
        }

?> 

<?php  
mysql_close($conexao);  
?>

Link para o comentário
Compartilhar em outros sites

  • 0

Olha, eu não tinha testado o código quando postei.

Sem contar que você mexeu bastante no código que te passsei.

Esse novo código eu criei a tabela que citou acima, teste e está funcionando 100%.

Fiz algumas alterações para o seu PHP mostrar todos os tipos de erros e você poder localizar alguma coisa errada por ai.

Lembro que testei e está funcionando OK.

Mudei tambem o seu Javascript porque não estava otimizado, você não precisa inserir uma tabela inteira, somente o TR dentro da tabela existente já é o suficiente.

<?php
error_reporting(E_ALL | E_STRICT);//Para mostrar todos os tipos de erros e poder encontrar aonde está errado.
?>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.5.1.min.js"></script> 
<script type="text/javascript"> 
$(document).ready(function()
{
    /*
     * Alterer este valor para quantos inputs você já deixar pronto no form. 
     * no meu caso, deixei 2 inputs prontos. deixe quantos quiser mas mude aqui
     **/
    var qtdInputs = 2;
    
    $("#add").click(function()
    {
        qtdInputs++;//Aumento em 1 a quantidade de inputs para não ter numeros repetidos
        $("table tbody").append(
            '<tr><td><input name="campo[' + qtdInputs + '][nome]" type="text" /></td><td><input name="campo[' + qtdInputs + '][quantidade]" type="text" /></td></tr>'); 
    }); 
}); 
</script> 
    <form method="post"> 
            <table width="100" border="0" cellspacing="0" cellpadding="0">
                <tbody>
                    <tr>
                        <td><input name="campo[1][nome]" type="text" /></td>
                        <td><input name="campo[1][quantidade]" type="text" /></td>
                    </tr>
                    <tr>
                        <td><input name="campo[2][nome]" type="text" /></td>
                        <td><input name="campo[2][quantidade]" type="text" /></td>
                    </tr>
                </tbody>
                <tfoot>
                    <tr>
                        <td><input type="button" id="add" value="Addicionar"></td>
                        <td><input type="submit" name="enviar" value="Cadastrar"></td>
                    </tr>
                </tfoot>
            </table>
        </form> 

<?php 
if( isset( $_POST['enviar'] ) ) // Verifica se a variavel existe
{ 
    $conexao = mysql_connect("localhost", "root", "P@ssw0rd") or die(mysql_error());  
    $db = mysql_select_db("d_confec_wigam"); 
    $linhasOk = array();

    foreach( $_POST["campo"] as $linha )//Rodar todo o post linha por linha, e econtrar os que possuem nome e quantdiade
    {
        print_r($linha);
        echo "<br>";
        /*
         * Validação necessária para garantir que a linha 
         * tenha os valores necessários para ir ao banco de dados
         * Caso não tenha, passa direto para próxima.
         */
        if( isset($linha['nome']) && isset($linha['quantidade']) )
        {
            $linhasOk[] = "('{$linha["nome"]}', '{$linha["quantidade"]}')";
        }
    }
    $query = "INSERT INTO torre (qtde_produto, status_preenchimento) 
VALUES 
" . implode(", \n", $linhasOk);
    echo "<pre>{$query}<pre>";
    mysql_query($query) or die(mysql_error());
    mysql_close($conexao);
}

Posta ai se deu certo.

Link para o comentário
Compartilhar em outros sites

  • 0

Agora sim esta funcionando perfeitamente, legal !!!!

Mas só por curiosidade, oque estava errado no meu codigo ?

Você poderia postar a parte que estava errada e como era o certo ?

Somente para fins de estudo mesmo.

Mas muito obrigado mesmo amigo pela força, você é mano mesmo.

Se eu puder te ajudar em algo, conta comigo amigo, valeu.

Link para o comentário
Compartilhar em outros sites

  • 0

Tinha algumas coisas erradas no PHP. No javascript eu apenas otimizei.

Não lembro de tudo que mexi, mas algumas coisas:

a conexão ao banco só deve ser feita se o form foi enviado, por isso coloquei dentro do IF.

o FOREACH não pode ser usado diretamente na variaveal $_POST porque o post tem outros itens tambem.

o formulario foi enviado com um array de campos que serão usados para ser inseridos no bd

então :

$_POST["campo"] = array(
    1 => array( "nome", "quantidade" ),
    2 => array( "nome", "quantidade" ),
    3 => array( "nome", "quantidade" ),
    xx... => array( "nome", "quantidade" )
);
por isso devemos colocar o foreach assim:
foreach( $_POST["campo"] as $linha )//Rodar todo o post linha por linha, e econtrar os que possuem nome e quantdiade
{
.....// aqui rodaremos cada 1 dos campos que estão no array do POST
}
O array $linhasOk já fica formatado para ser inserido diretamente na sql seguindo o seguinte padrão
$linhasOk = array(
    0 => "('nome', 'quantidade')",
    1 => "('nome', 'quantidade')",
    xx... => "('nome', 'quantidade')"
);
Os parentes e as aspas simples em volta da string já são colocados. No final, você executará 1 Query só, e se todas as linhas ok não forem inseridas, nenhuma fica no banco. todas são eliminadas, mantendo assim a certeza de que este form foi todo inserido no bd.
$query = "INSERT INTO torre (qtde_produto, status_preenchimento) VALUES " . implode(", \n", $linhasOk);
O que esta linha faz é gerar o inicio da SQl e no final colocar os values já formatados com parentes e aspas e separa-los por virgula oque ficaria assim:
INSERT INTO torre (qtde_produto, status_preenchimento) 
VALUES 
('01', '150'), 
('02', '300')

Que é o padrão para inserir várias linhas de 1 vez no MySql.

Espero ter ajudado mesmo, pois pelo que percebi tem pouca gente ajudando as pessoas nos foruns, a maioria indica outro lugar para estudo ao invés de tirar as duvidas.

Abraço.

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