Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

DouGuAra

Só consigo duas Array, preciso de mais

Recommended Posts

Coisa simples, estou criando um, formulário dinâmico, está tudo okay. O problema que que só consigo fazer array com dois campos, preciso na verdade de uns 7 campos.

 

Mas ja tentei de todas as formas. Alguém poderia me dar um help.

 

Grato.

 

<?php

if(isset($_POST))
{
$array1=$_POST['hobby'];
$array2=$_POST['hobby2'];
//$array3=$_POST['hobby3'];
//$array4=$_POST['hobby4'];
//$array4=$_POST['hobby5'];
//$array4=$_POST['hobby6'];
//$array4=$_POST['hobby7'];

foreach (array_combine($array1, $array2) as $name => $mobile) {

//echo $name . ' ' . $mobile . '' . $array3 . '<br>';
echo $name . ' ' . $mobile . '<br>';

}

}



?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Jquery Duplicate Fields Submit Form</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script type="text/javascript" src="http://ajax.googleapis.com/
ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript" src="reCopy.js"></script>
<script type="text/javascript">
$(function(){
  var removeLink = ' <a class="remove" href="#" onclick="$(this).parent().slideUp(function(){ $(this).remove() }); return false">remove</a>';
$('a.add').relCopy({ append: removeLink});	
});
</script>
<style type="text/css">
body{ font-family:Arial, Helvetica, sans-serif; font-size:13px; }
.remove {color:#cc0000}
.input{ border: solid 1px #006699; padding:3px}

</style>
</head>

<body>


   <form method="post" action="">
   <p class="clone">
   <input type="text" name="hobby[]" class='input'/>
   <input type="text" name="hobby2[]" class='input'/>
   <input type="text" name="hobby3[]" class='input'/>
   <input type="text" name="hobby4[]" class='input'/>
   <input type="text" name="hobby5[]" class='input'/>
   <input type="text" name="hobby6[]" class='input'/>
   <input type="text" name="hobby7[]" class='input'/>

   </p>
   <p><a href="#" class="add" rel=".clone">Adicionar</a></p>
   <input type="submit" value=" Submit " />
   </form>
</body>
</html>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se você quer todos os inputs ->hobby como array, faça assim:

<input type="text" name="hobby[]" class='input'/>
<input type="text" name="hobby[]" class='input'/>
<input type="text" name="hobby[]" class='input'/>
<input type="text" name="hobby[]" class='input'/>
<input type="text" name="hobby[]" class='input'/>
<input type="text" name="hobby[]" class='input'/>
<input type="text" name="hobby[]" class='input'/>

foreach ($_POST['hobby'] as $key => $value) {
 echo( $key. ' - '. $value);
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

dochipis, grato pela ajuda, mas como pode ver, são campos com nomes diferentes. A diferença está no 1-2, depois troco pelo nomes corretos, só pra simplificar.

 

Na verdade será sete campo.

 

Grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se são 7 campos diferentes para que coloca-los em um array? Qual a necessidade de fazer isso?

Se for só para pegar os valores tente assim:

foreach ($_POST as $nome => $valor ) {
 echo( $nome. ' - '. $valor );
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

é que são 7 campos com nomes diferentes, roda ele pra vc ver, vou add no banco - hora, dia, mensagem1, autor, etc...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, ta muito confuso sua dúvida... Eu concordo com o @dochipis, se são 7 campos diferentes, pq você quer armazená-los em um array ? Porque você não pega o array $_POST !?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou trabalhando com chave, é um formulário que eu posso inserir vários formulários iguais ao mesmo tempo, não é apenas 1 form, mas pode ser 100 form

Compartilhar este post


Link para o post
Compartilhar em outros sites

O código que vocẽ colocou acima não aparece nada escrito. Só um monte de caixas em branco. O que eu tenho que escrever nelas pra funcionar?

 

Meu navegador reclamou de um erro

reCopy is not a function

Eu sugiro que você releia o tutorial do plugin e entenda o que está fazendo. Na página oficial sugerem que você trabalhe da mesma forma que informaram aqui no fórum. Não existe esse negócio de campo1[], campo2[] e etc.

 

Um teste bem simples e básico pra você entender como a coisa funciona

<!DOCTYPE html>
<html lang="pt_BR">
    <head>
        <meta charset="utf-8" />
        <title>Untitled Document</title>
    </head>

    <body>
        <form action="" method="post">
            <p>
                <?php isset($_POST['hobby']) ? print_r($_POST['hobby']) : echo 'Você não informou nenhum hobby.'; ?>
            </p>
            <fieldset>
                <legend>Informe seus hobbies</legend>
                <ul>
                    <li>
                        <label for="hobby1">
                            <span>#1:</span>
                            <input type="text" name="hobby[]" id="hobby1" />
                        </label>
                    </li>
                    <li>
                        <label for="hobby2">
                            <span>#2:</span>
                            <input type="text" name="hobby[]" id="hobby2" />
                        </label>
                    </li>
                </ul>
            </fieldset>
            <p><button type="submit">Enviar</button></p>
        </form>
    </body>
</html>

Fica como lição de casa você implementar o plugin nessa bagunça que eu fiz aí em cima. Pq se até isso eu fizesse, só faltaria o backend.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Evandro Oliveira, obrigado pela ajuda, mas o negócio pra mim vou simplificar o código que eu fiz.

 

vamos lá

 

 

<?php

if(isset($_POST))
{
$array1=$_POST['obs'];
$array2=$_POST['telefone'];
//$array3=$_POST['dados'];
//$array4=$_POST['obs2'];
//$array4=$_POST['valor'];
//$array4=$_POST['NF'];
//$array4=$_POST['qtd'];

foreach (array_combine($array1, $array2) as $obs => $telefone) {

//echo $obs . ' ' . $telefone . '' . $array3 . '<br>';
echo $obs . ' ' . $telefone . '<br>';

}

}



?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Jquery Duplicate Fields Submit Form</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script type="text/javascript" src="http://ajax.googleapis.com/
ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript" src="reCopy.js"></script>
<script type="text/javascript">
$(function(){
  var removeLink = ' <a class="remove" href="#" onclick="$(this).parent().slideUp(function(){ $(this).remove() }); return false">remove</a>';
$('a.add').relCopy({ append: removeLink});    
});
</script>
<style type="text/css">
body{ font-family:Arial, Helvetica, sans-serif; font-size:13px; }
.remove {color:#cc0000}
.input{ border: solid 1px #006699; padding:3px}

</style>
</head>

<body>


   <form method="post" action="">
   <p class="clone">
   <input type="text" name="obs[]" class='input'/>
   <input type="text" name="telefone[]" class='input'/>
   <input type="text" name="dados[]" class='input'/>
   <input type="text" name="obs2[]" class='input'/>
   <input type="text" name="valor[]" class='input'/>
   <input type="text" name="NF[]" class='input'/>
   <input type="text" name="qtd[]" class='input'/>

   </p>
   <p><a href="#" class="add" rel=".clone">Adicionar</a></p>
   <input type="submit" value=" Submit " />
   </form>
</body>
</html>

 

O problema é que só consigo recuperar obs e telefone..

 

 

Vê agora se esclarece um pouco!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos lá de novo:

<form method="post" action="<?php echo( $_SERVER['REQUEST_URI'] ); ?>">
<p class="clone">
<input type="text" name="campo[obs]" class='input'/>
<input type="text" name="campo[telefone]" class='input'/>
<input type="text" name="campo[dados]" class='input'/>
<input type="text" name="campo[obs2]" class='input'/>
<input type="text" name="campo[valor]" class='input'/>
<input type="text" name="campo[NF]" class='input'/>
<input type="text" name="campo[qtd]" class='input'/>

</p>
<p><a href="#" class="add" rel=".clone">Adicionar</a></p>
<input type="submit" value=" Submit " />
</form>

Para pegar os valores faça assim:

 $campos  =   implode(", ", array_keys( $_POST['campo' ]) );
 $valores =   implode(", ", array_values( $_POST['campo'] ) );

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você vai ter vários forms na mesma página?

 

 

<p><a href="#" class="add" rel=".clone">Adicionar</a></p>

O trecho acima adiciona um novo form ou um novo campo no formulário?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esse exemplo mostra como inserir 1 campo.

 

Agora eu consigo inserir 2 campo..

 

Agora gostaria de saber como faço pra inserir 7 campos, só consigo trabalhar com 2 campos

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você disse que não poderia usar as soluções que os colegas apresentaram porque iria trabalhar com vários formulários quando na verdade você irá trabalhar com vários campos. Neste caso a solução apresentada no post #2 já resolve o seu problema, você precisa ter todos os campos com o mesmo nome, porém em forma de array (usando colchetes).

 

Como o Evandro mencionou, o método relCopy não existe, eu pesquisei na API no jQuery e ele realmente não existe, talvez existisse em uma versão mais antiga, já que o post que você usou como base é de 2010 :seta: http://api.jquery.com/?s=relCopy

 

Sugiro que você tente adaptar o seu código usando método clone.



EDIT:

 

Desculpe, agora que notei que você está usando um plugin com esse nome reCopy. Note o seguinte, o nome do arquivo JS que você está chamando é reCopy, e no seu código está relCopy. Talvez seja este o problema.

 

Mas pelo o que eu entendi este plugin faz a mesma função do método clone que é nativo do jQuery, então o uso do plugin pode ser dispensado.



EDIT 2:

 

Aqui tem um exemplo de como adicionar o elemento dinamicamente usando somente jQuery, ele mostra inclusive como receber os dados no PHP :seta:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Leozitho, obrigado pela atenção.

 

Esse video faz a mesma coisa, o problema é que não consigo trabalhar com 3 ou mais campo....por causa fo foreach

Compartilhar este post


Link para o post
Compartilhar em outros sites

array_combine faz de 2 em 2 arrays.

 

ou vc faz vários array_combine, ou vc faz de uma forma melhor. Por exemplo, nomeando pelo grupo:

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>

<form action="" method="post">

    <input type="text" name="data[group1][]" value="1.0" /><br />
    <input type="text" name="data[group1][]" value="2.0" /><br />
    <input type="text" name="data[group1][]" value="3.0" /><br />
    <input type="text" name="data[group1][]" value="4.0" /><br />
    <input type="text" name="data[group1][]" value="5.0" /><br />

    <input type="text" name="data[group2][]" value="1.1" /><br />
    <input type="text" name="data[group2][]" value="2.1" /><br />
    <input type="text" name="data[group2][]" value="3.1" /><br />
    <input type="text" name="data[group2][]" value="4.1" /><br />
    <input type="text" name="data[group2][]" value="5.1" /><br />

    <input type="submit" name="ok" value="ok" />

</form>


<?php
    echo '<pre>';

    foreach( $_POST['data'] AS $datas ) {
        var_dump( $datas );
    }
?>
</body>
</html>

saida:

array(5) {
  [0]=>
  string(3) "1.0"
  [1]=>
  string(3) "2.0"
  [2]=>
  string(3) "3.0"
  [3]=>
  string(3) "4.0"
  [4]=>
  string(3) "5.0"
}
array(5) {
  [0]=>
  string(3) "1.1"
  [1]=>
  string(3) "2.1"
  [2]=>
  string(3) "3.1"
  [3]=>
  string(3) "4.1"
  [4]=>
  string(3) "5.1"
}

dessa forma não fica confuso

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.