Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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>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.
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 );
}é que são 7 campos com nomes diferentes, roda ele pra vc ver, vou add no banco - hora, dia, mensagem1, autor, etc...
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 !?
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
Tem um exemplo do formulário pra gente rodar e entender direito o que tá passando na sua cabeça?
Tem sim, ta no código que coloquei acima!
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>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!
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'] ) );infelizmente assim pra mim não é possível.
Eu vou ter vários forms.
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?
Exato.....
da um look aqui e baixa o exemplo..
http://www.9lessons.info/2010/04/jquery-duplicate-field-form-submit-with.html
Este link que você postou mostra como inserir vários campos e não vários formulários.
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
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:
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
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>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
Infelizmente esse sistema aplicação acima me deixou muito confuso.
Se array_combine faz de 2 em 2 arrays não tem como aplicar pro meu sistema acima?
Se você quer todos os inputs ->hobby como array, faça assim: