Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bom,
Tenho uma estrutura aonde gerencio os acontecimentos de um dia e a programação para o mesmo.
E cada dia é um formulário independete. Preciso disso porque visualizo somente de 5 em 5 dias e tenho a opção de avançar ou retroceder dias.
e devo poder salvar individualmente cada dia.
meu formulário é desta hierarquia
<form>
<div>
<input/>
<input/>
<input/>
</div>
<div>
<input/>
<input/>
<input/>
</div>
<div>
<input/>
<input/>
<input/>
</div>
</form>
<form>
<div>
<input/>
<input/>
<input/>
</div>
<div>
<input/>
<input/>
<input/>
</div>
<div>
<input/>
<input/>
<input/>
</div>
</form>
Em cada formulário eu incluo e excluo via DOM o conteúdo, e naturalmente eu preciso postar o resultado.
porém não está sendo postado
Com um submit normal não funciona, nem jquery submit(), ou mesmo via ajax.
alguém tem alguma idéia?
Abraços ;D
>
mas ai você só tem UM UNICO formulario.
São vários forms cada um dentro de um container.
>
Corrija oque aparecer no Ctrl+Shif+J do Firefox.
Sem erros de Javascript.
>
apresente o codigo da situação real.
se for um erro, não vamos conseguir notar pelo pseudo codigo.
<table class="programacao" cellspacing="3" id="tabela_programacao">
<tr>
<?php $indice_obra=0; ?>
<?php foreach($dias as $key=>$dia) :?>
<td class="programacao-dia" id="d_<?php echo $key ?>">
<form action="/obras/programacao/salvar/" class="dia" method="post">
<div class="programacao-dia-topo">
<span class="programacao-dia-data"><?php echo $dia['data'] ?></span>
<span class="programacao-dia-data-extenso"> - <?php echo $dia['dia_da_semana'] ?></span>
<div class="action copiar_dia"></div>
<div class="action adicionar_obra"></div>
<!-- era um submit, só está button para testar via submit pelo js -->
<input type="button" class="salvar-obra" value="Salvar" />
<input type="hidden" name="programacao_dia[data]" value="<?php echo $dia['data'] ?>"/>
</div>
<div class="programacao-dia-funcionarios">
<div class="header">
<span class="left">Funcionários disponíveis para </span>
<span class="nome left"></span>
<div class="fechar"></div>
</div>
<div class="content">
<?php
$count_f = count($funcionarios);
$cols = ceil($count_f/10);
$width = 820;
$padding = 5;
$margin = 1;
$border = 1;
$col_width = (($width/$cols) - ($padding*2) - ($margin*2) - ($border*2));
$col_width = $col_width.'px';
?>
<div class="funcionarios">
<?php foreach($funcionarios as $key_f=>$funcionario_lista) :?>
<div class="funcionario" style="width:<?php echo $col_width ?> !important">
<div class="nome"><?php echo $funcionario_lista['nome'] ?></div>
<input class="codigo" type="hidden" value="<?php echo $funcionario_lista['codigo'] ?>"/>
</div>
<?php endforeach ?>
</div>
</div>
</div>
<?php foreach($dia['obras'] as $key_o=>$obra) :?>
<div class="programacao-dia-obra" id="o_<?php echo $indice_obra ?>">
<input type="hidden" name="programacao_dia[obra][<?php echo $indice_obra ?>][codigo]" class="obra_codigo" value="<?php echo $obra['codigo'] ?>"/>
<div class="header">
<span class="nome"><?php echo $obra['nome'] ?></span>
<span class="cidade"><?php echo $obra['cidade'] ?></span>
<span class="uf">- <?php echo $obra['uf'] ?></span>
<div class="action-minimize"></div>
<div class="action-maximize"></div>
</div>
<div class="content">
<div class="actions">
<img class="action add_funcionarios" border="0" src="/img/add_worker.png"/>
<img class="action observacao" border="0" src="/img/observacao.png"/>
<img class="action veiculo" border="0" src="/img/truck.png"/>
</div>
<div class="titulo">Metragem :<?php echo $obra['metragem'] ?></div>
<div class="titulo"><?php echo $obra['representante'] ?></div>
<div class="funcionarios">
<?php foreach($obra['funcionarios'] as $key_of=>$funcionarios_obra): ?>
<input type="hidden" name="programacao_dia[obra][<?php echo $indice_obra ?>][funcionario][]" value="<?php echo $funcionarios_obra['codigo']?>"/>
<div class="funcionario">
<div class="excluir"></div>
<div class="nome"><?php echo $funcionarios_obra['nome']?></div>
<input class="codigo" type="hidden" value="<?php echo $funcionarios_obra['codigo']?>" />
</div>
<?php endforeach ?>
</div>
</div>
<textarea class="content-observacao"><?php echo $obra['observacao'] ?></textarea>
</div>
<?php $indice_obra++ ?>
<?php endforeach?>
</form>
</td>
<?php endforeach ?>Não entendo de php meu lance é asp mais isso me chamou a atenção
<?php foreach($dia['obras'] as $key_o=>$obra) :?>
Pra que aquele ":" no final do code? o correto não seria
<?php foreach($dia['obras'] as $key_o=>$obra) ?>
????
alguns inputs teus não tem name, e outros estão incorretos.
se você quer trabalhar com arrays, o name deles devem terminar em []
'não funciona' é muito genérico.
Oque acontece ? não recebe os dados ? você já debugou com um var_dump( $_POST ); ?
coloque tb o código js que você está usando.
com um submit no final do form, apos os campos, dá certo ?
>
Pra que aquele ":" no final do code? o correto não seria
sintaxe do php.ASP não tem {}, mas php sim. No caso o : indica o inicio do bloco de instruções. (o mesmo que as chaves)
>
Não entendo de php meu lance é asp mais isso me chamou a atenção
<?php foreach($dia['obras'] as $key_o=>$obra) :?>
Pra que aquele ":" no final do code? o correto não seria
<?php foreach($dia['obras'] as $key_o=>$obra) ?>
????
O escope serve justamente para eu poder abrir uma tag php dentro inline, quer dizer, escrevo o html ao invés de usar
o echo "<div>".$nome."</div>" eu uso <div><?php echo $nome ?></div>
e para abrir statements php desta maneira se usa o " : " , incluido condicionais como
<?php if(1==1) : ?>
<div class="nome">Guilherme</div>
<?php else: ?>
<div class="nome">Astrogildo</div>
<?php endif ?>
;)Entendi, entendo PHP minimamente rsrsrsrs, mais siga a sugestão do William abaixo do meu post anterior a este, faz sentido o que ele colocou.
>
alguns inputs teus não tem name, e outros estão incorretos.
se você quer trabalhar com arrays, o name deles devem terminar em []
'não funciona' é muito genérico.
Oque acontece ? não recebe os dados ? você já debugou com um var_dump( $_POST ); ?
Então, recebe, porém que só os que ja estavam no form os que inclúo não aparecem. Se eu excluir algo que ja estava , ai não posta pro controller, porém incluir não rola.. e os inputs que não tem name , no caso são irrelevantes.
>
coloque tb o código js que você está usando.
com um submit no final do form, apos os campos, dá certo ?
Não, se eu der um submit igual ele posta só os que ja estavam carregados no html;
$(".salvar-obra").live("click",function() {
$form = $(this).parent().parent().serialize();
$.post("/obras/programacao/salvar",$form,function(data) {
$("#custom_message").show();
$("#custom_message").html(data);
});
});
OU
$(".salvar-obra").live("click",function() {
$(this).parent().parent().submit();
});
Este é o array que ele me retorna no print_r
e está na ordem perfeita , só faltam os ítens que inclui via DOM
Array
(
[programacao_dia] => Array
(
[data] => 17/05/2011
[obra] => Array
(
[0] => Array
(
[codigo] => 01
[funcionario] => Array
(
[0] => 0
[1] => 1
[2] => 2
)
)
[1] => Array
(
[codigo] => 02
[funcionario] => Array
(
[0] => 3
[1] => 4
[2] => 5
)
)
[2] => Array
(
[codigo] => 03
[funcionario] => Array
(
[0] => 6
[1] => 7
[2] => 8
)
)
[3] => Array
(
[codigo] => 04
[funcionario] => Array
(
[0] => 9
[1] => 10
)
)
[4] => Array
(
[codigo] => 05
[funcionario] => Array
(
[0] => 11
[1] => 12
[2] => 13
[3] => 14
)
)
[5] => Array
(
[codigo] => 06
[funcionario] => Array
(
[0] => 15
[1] => 16
[2] => 17
[3] => 18
)
)
)
)
)Mostre como você está tentando inserir via DOM.
estou desconfiando, que os inputs que você está inserindo, estão caindo fora do form
verifique com o FireBug.
Olha só você tinha toda razão.
O que estava acontecendo era o seguinte.
O meu script que controla a interface é muito grande e carregado de informações e funções, por isso não coloquei ele aqui,
mas o problema era bem simples: Não estava incluindo dentro do Form. Bom como eu disse, o script da interface é bem grande, e eu criei um desfazer e refazer ações
que incluíam adição e exclusão de "obras"( no caso ), e salvo as alterações no DOM o que gerou a confusão, porque no fim o html estava sendo incluido no dom do histórico das alterações.
De qualquer forma, fico grato pela presteza. Faz tempo que não posto nada por aqui.
Vou voltar com minha atividade.
Abraços a todos ;)
mas ai você só tem UM UNICO formulario.
>
Com um submit normal não funciona, nem jquery submit(), ou mesmo via ajax.
alguém tem alguma idéia?
apresente o codigo da situação real.se for um erro, não vamos conseguir notar pelo pseudo codigo.
Corrija oque aparecer no Ctrl+Shif+J do Firefox.