Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
hi people...
tenho um form que tem uma dinâmica de adicionar campos com jquery... você clica no menu adicionar e um novo campo surge na tela imediatamente...
no meu campo inicial tenho um select com as opções 'regular' e 'pendente' ele esta assim:
<span>
<label for="situacao">situação</label>
<select name="situacao[]">
<option value="regular">regular</option>
<option value="pendente">pendente</option>
</select>
</span>
e no PHP recupero normalmente os dados deste campo fazendo um loop, assim:
<?php
if (isset($_POST['salvar'])) :
$descricao = $_POST['descricao'];
$valor = $_POST['valor'];
$situacao = $_POST['situacao'];
$total = 0;
for ($i = 0; $i < count($descricao); $i++) :
$total += $valor[$i];
echo $situacao[$i];
endfor;
endif;
?>
meu problema é o seguinte, se eu adiciono dois campos dinâmicos no meu formulário, e seleciono no select uma opção diferente da outra, quando envio o formulário ele pega o valor do último select selecionado e ainda mostra apenas duas letras da palavra, isso por causa da iteração do loop...
gostaria de saber como recuperar o valor do select de forma correta?>
O único campo dinâmico é o select? Se sim o que você postou nunca vai funcionar, pois isto:
$_POST['situacao']
Sempre vai retornar Array, por causa disto:
situacao[]
A única forma de resolver isto se o select está sendo montado desta forma é recuperar assim:
foreach($_POST['situacao'] as $ind=>$val){
echo "$ind - $val <br>";
}
não, existem os outros campos que tambem são dinamicos, como o campo descrição, valor, situação, em todos eles eu uso o colchetes [] para caso precise torna-los um array...
o campo situação que é um select option tambem uso o [ ] e eles são html puro.
Se todos são dinâmicos e criados ao mesmo tempo, todos terão o mesmo número de índice, então bastaria:
foreach($_POST['situacao'] as $ind=>$val){
$valor = $_POST['valor'][$ind];
$valor = $_POST['descricao'][$ind];
$situacao = $val;
//Assim por diante...
}>
Se todos são dinâmicos e criados ao mesmo tempo, todos terão o mesmo número de índice, então bastaria:
foreach($_POST['situacao'] as $ind=>$val){
$valor = $_POST['valor'][$ind];
$valor = $_POST['descricao'][$ind];
$situacao = $val;
//Assim por diante...
}
não deu certo, é quase a mesma coisa que usar o for, mas o for não gera erro, o foreach que você implementou gerou a seguinte mensagem de erro: Warning: Invalid argument supplied for foreach() in D:\wamp\www\orcamento\index.php on line 52
a linha 52 é esta:
foreach($_POST['situacao'] as $ind=>$val)
Sempre vai retornar Array, por causa disto:
situacao[]