Jump to content
Fórum Script Brasil
  • 0

foreach e insert


MTavares

Question

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

14 answers to this question

Recommended Posts

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

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