Jump to content
Fórum Script Brasil
  • 0

(Resolvido) Inserir Dados


3dmaniaco

Question

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 to comment
Share on other sites

18 answers to this question

Recommended Posts

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

                }

Link to comment
Share on other 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 to comment
Share on other 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);  
?>

Edited by 3dmaniaco
Link to comment
Share on other 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á.

Edited by Linkbes
Link to comment
Share on other 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 ?

Edited by 3dmaniaco
Link to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...