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

foreach e insert


MTavares

Pergunta

Pessoal,

é o seguinte, tenho um foreach que vem de um campo. Gostaria de pegar os dados de dentro de foreach e colocar dentro de um determinado campo da tabela em mysql. Se eu colocar o insert dentro do foreach, ele duplica o cadastro. Ex:

<?php      
 foreach($Nome as $NomeCliente){
            $NomeClientes = $NovosCliente;
 }

 $sqlCadastrar = mysql_query("INSERT....");
?>

<input type="text" name="Nome[]" value="">

Tem solução para esse caso?!?!? rsrsrsrsrs

Vlw

Link para o comentário
Compartilhar em outros sites

14 respostass a esta questão

Posts Recomendados

  • 0

voce colocou

foreach($Nome as $NomeCliente){
            $NomeClientes = $NovosCliente;
}

tem um "s" no final da variavel dentro do foreach...

e se você quiser inserir no banco, cada cliente, tem que colocar o insert dentro do foreach também

Link para o comentário
Compartilhar em outros sites

  • 0

Olá blew,

na verdade foi erro de digitação na hora de postar aqui. O que quero na verdade não é ter um registro para cada cliente, mas um registro que armazene todos os clientes em um só campo. Por ex:

foreach($Nome as $NomeCliente){
            $NomeClientes = $NomeCliente;
}
Em vez de:
insert into tabela values(null, '$NomeClientes  1');
insert into tabela values(null, '$NomeClientes  2');
insert into tabela values(null, '$NomeClientes  3');
Gostaria de que ficasse dessa forma:
insert into tabela values(null, '$NomeClientes 1,$NomeClientes 2, $NomeClientes  3');

Abs.

Link para o comentário
Compartilhar em outros sites

  • 0

cara, pelo que eu sei , isso não é possivel, pois desse modo que você quer, você ta inserindo vários campos, e não apenas um unico que você quer, q é o nome do cliente

você teria que dar um insert pra cada cliente... provavelmente, se fisse o foreach, e dentro do foreach você criasse um for pra ele puxar o nome do cliente no array e colocasse a instrução de insert dentro do foreach..

também não sei direito, meu nivel não é tão avançado assim hehehe

eu estou para sair de casa, senao testaria o código para vc

mas vai tentando cara.. procura tutoriais na internet, é o unico jeito de aprender :)

aff, desconsidera a mensagem acima, viajei total...

seria na verdade:

$NomeClientes[1] $NomeClientes[2] etc

quando se trata de um array(), você usa o [chave_posição] para indicá-lo no array..

assim você resgata os nome e insere em um só campo

Link para o comentário
Compartilhar em outros sites

  • 0

Olá blew,

funfou, mas na minha situação ainda esbarro com um obstáculo. Os campos são gerados automaticamente conforme o usuário escolher. Por ex:

No formulário tem um campo que diz: Quantas pessoas irão viajar? Ao selecionar por ex 3, aparecerão 03 campos do tipo array, Veja:

<input type="text" name="NomeCliente[]">
Após isso, ele preenche o restante dos campos e dá OK. Ao apertar o botão cadastrar, ele vai para o PHP, do qual usei o código que debatemos aqui. Até aqui tudo bem, porém esbarro no seguinte dilema, veja:
foreach($Nome as $NomeCliente){
            $NomeClientes = $NomeCliente;
}

$clientesUsuarios = $NomeClientes[1]. ",".$NomeClientes[2];
E se o cliente escolher por ex. 5 pessoas, como irei criar o array para colocar na variável clienteUsuarios para ficar:
$clientesUsuarios = $NomeClientes[1]. ",".$NomeClientes[2]. ",".$NomeClientes[3]. ",".$NomeClientes[4]. ",".$NomeClientes[5];

Quero pegar essa variável e colocar dentro de um campo mencionado anteriormente. Isso não estou conseguindo....

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0
Pensei em gravar no txt e depois jogar no campo do banco de dados. Não sei se seria o certo, porém ao fazer, só grava o primeiro valor:

for($a = 0; $a < count($_POST["NomeClientes"]); $a++){                 
  $clientes = $_POST["NomeClientes"][$a];
  $abrir =fopen("clientestxt.txt",w);
  $array = fwrite($abrir,$clientes);
   fclose($abrir);
}

Realmente as minhas opções estão se esgotando... :(

Consegui gravar no TXT... troquei o w pela letra a...

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

  • 0

Pessoal,

consegui resolver, porém quero pedir aos moderadores para não fechar esse tópico, pois fiz da seguinte forma:

for($a = 0; $a < count($_POST["NomeClientes"]); $a++){
                $clientes = $_POST["NomeClientes"][$a];
                $abrir =fopen("ClientesTXT.txt","a");
                $gravar = fwrite($abrir,$clientes);
                fclose($abrir);
            }

        $abrir = fopen ("ClientesTXT.txt","r");
        $conteudo = fread ($abrir, filesize ("ClientesTXT.txt"));

$sqlCadastrar = mysql_query(sprintf("INSERT INTO tabela VALUES('%s','%s','%s','%s','%s',)",valor1,valor2,valor3,[b]$conteudo[/b],valorn));

Particularmente não gostei muito dessa solução, mas se alguém tiver uma outra solução que não tenha que gravar em um arquivo txt ou sessões e cookies, agradeço....

abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Bom, não sei se entendi direito. Você possui uma página HTML que contém um formulário onde existem vários elementos do tipo TEXT com o nome "NomeClientes". Você quer recupera essa informação no PHP e colocar cada nome de cliente separando-os por vírgula?

<?php

$arrClientes = array('Cliente 1','Cliente 2','Cliente 3','Cliente 4');

echo implode(',',$arrClientes);

/* 
 *  O resultado será: Cliente 1,Cliente 2,Cliente 3,Cliente 4
 */

Link para o comentário
Compartilhar em outros sites

  • 0

Olá Romero,

eu tenho um formulário aonde um dos campos é um combobox, do qual o usuário escolhe em qtos eventos quer participar. Esse campo é dinâmico, ou seja, vamos supor que o administrador do site cadastre 5 eventos, logo no combobox irá aparecer 5 options de com os números de 1 a 5 como valor. O usuário quer participar em 3 eventos, então ele selecionar o número 03 e aparecerá 3 campos texto para preencher com os nomes.

<input type="text" name="NomeCliente">
Só que quero pegar esses nomes do campo texto e adicionar em uma tabela. Se eu colocar dentro do foreach conforme citado nos posts anteriores, irei dar 03 "insert's", quando na verdade quero dar apenas um insert e dentro do campo da tabela "NomeParticipantes", ficasse dessa forma:
$sqlCadastrar = mysql_query(sprintf("INSERT INTO tabela VALUES('%s','%s','%s','%s','%s',)",valor1,valor2,valor3,'[b]NomeCliente 1,NomeCliente 2,NomeCliente 3[/b]',valorn));

A única solução está no post anterior, do qual uso o txt para fazer essa inserção, porém não estou satisfeito com essa solução. Se tiver outra solução que não use txt, sessão ou cookie, será melhor do que essa que fiz.

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

cara, na verdade, eu não sei se campo de texto aceita isso que voce quer..

o uso de value = "lalala[]", pelo que eu conheço, é só usado em checkbox..

mas enfim, como eu falei, meu conhecimento é de programador junior, então eu posso estar errado...

se voce conseguir colocar o codigo todo ai, seria melhor..

porque eu copio e colo aqui, e tento resolver também...

visualizando a pagina fica ateh melhor pra eu entender direito o que voce quer...

Link para o comentário
Compartilhar em outros sites

  • 0

Montei esse codigo bem simples, só para você entender.

a primeira mensagem recebe a criaçao da variavel então na ARRAY é 0 fixo ou seja primeiro apontamento. na hora de percorrer a array voce já na comeca do 0 porque já foi colocado na variavel mensagem, sendo assim comecamos do 1 ...

espero que resolva seu problema ^^.

<?php
if($_POST) {

$a = 1;
$mensagem = "Clientes: ".$_POST['NomeCliente'][0]." \n";
while($a <= 2 ) 
{
    

$mensagem .= "Clientes: ".$_POST['NomeCliente'][$a]." \n";

$a++;

}

            }
            
            
?>

<?php echo $mensagem; ?>

<form action="" method="post">
    
    <input type="text" name="NomeCliente[]">
    <input type="text" name="NomeCliente[]">
    <input type="text" name="NomeCliente[]">
    
    <input type="submit" />
    
</form>

Link para o comentário
Compartilhar em outros sites

  • 0

Da uma olhada se te ajuda! Faça o teste!

<html>
<body>
    
    <form method="post" ACTION="teste.php">
        Cliente 1: <br/>
        <INPUT TYPE="text" NAME="Cliente[]"/><br/>
        Cliente 2: <br/>
        <INPUT TYPE="text" NAME="Cliente[]"/><br/>
        Cliente 3: <br/>
        <INPUT TYPE="text" NAME="Cliente[]"/><br/>                
        
        <INPUT TYPE="submit" VALUE="Entrar"/>
    </form>

</body>
</html>

<?php

if($_POST['Cliente']){
    echo implode(',',$_POST['Cliente']);
}

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,9k
×
×
  • Criar Novo...