Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal, estou tendo alguns problemas para inserir uma ordenação no banco de dados, estou utilizando um sistema de drag e drop, que baixei na net.
E o sistema funciona exatamente como eu preciso e quero. Só que eu estou com um problema, para ser resolvido, que é salvar a ordem do sistema de drag e drop no banco de dados.
A ideia é o seguinte, o cliente quer um sistema de galerias que arraste as fotos da galeria, de modo que fique na ordem que ele determinou, o drag & drop já faz isso. Já consigo recuperar o ID, de cada imagem. Agora tudo que eu preciso é determinar um valor tipo fazer a contagem de 1 até a quantidade de imagens, tipo: se tiver 10 imagens e o cliente fez a ordenação. eu preciso listar os numeros de 1 a 10, e salvar esses numeros na tabela, no campo ordem, pra que quando eu listar as imagens no site eu ordene exatamente pela ordem.
Não sei se conseguiram entender, mais vou mostrar o trecho do meu código.
<div id="redips-drag">
<?php
$order = filter_input_array(INPUT_POST, FILTER_DEFAULT);
if (isset($order['SelectOrdem']) AND $order['SelectOrdem'] == 'Salvar Ordem'):
unset($order['SelectOrdem']);
endif;
?>
<form action="" method="post">
<table style='width:100%;'>
<colgroup>
<col width="250"/>
<col width="250"/>
<col width="250"/>
<col width="250"/>
</colgroup>
<tbody>
<tr>
<?php
$gbi = 0;
$Gallery = new Read;
$Check = new Check;
$Gallery->ExeRead("ws_posts_gallery", "WHERE post_id = :post", "post={$postid}");
if ($Gallery->getResult()):
$LoopHorizontal = 4;
$i = 1;
foreach ($Gallery->getResult() as $gb):
if ($i < $LoopHorizontal):
$gbi++;
?>
<td
<div class="redips-drag">
<input type="text" name="ordem[]" value="<?= $gbi; ?>">
<input type="text" name="id[]" value="<?= $gb->gallery_id; ?>">
<?= $Check->Image('../uploads/' . $gb->gallery_image, $gbi, 146, 100); ?><br>
<a href="painel.php?exe=produtos/update&postid=<?= $postid; ?>&gbdel=<?= $gb->gallery_id; ?>#gbfoco" class="del btn btn-danger">Deletar</a>
</div>
</td>
<?php elseif ($i = $LoopHorizontal):
?>
<td>
<div class="redips-drag">
<input type="text" name="ordem[]" value="<?= $gbi; ?>">
<input type="text" name="id[]" value="<?= $gb->gallery_id; ?>">
<?= $Check->Image('../uploads/' . $gb->gallery_image, $gbi, 146, 100); ?><br>
<a href="painel.php?exe=produtos/update&postid=<?= $postid; ?>&gbdel=<?= $gb->gallery_id; ?>#gbfoco" class="del btn btn-danger">Deletar</a>
</div>
</td>
</tr>
<tr>
<?php
$i = 0;
endif;
$i++;
endforeach;
endif;
?>
</tr>
</tbody>
</table>
<div class="form-actions">
<input type="submit" class="btn btn-primary green" value="Salvar Ordem" name="SelectOrdem" />
</div>
</form>
</div>
Eu não sei pessoal, se eu fiz isso aí da forma correta, tipo envolvi a tabela do drag & drop em um form, para tentar recuperar os valores, mais sem sucesso. Se alguém puder ajudar com este problema, eu fico muito grato!Me dá um exemplo, de como eu posso proceder, eu tentei até utilizar um exemplo que você fez em um post, mais eu não consegui.
Criei um sistema parecido, mas ao invés de imagens, eu ordenava os links do menu, a ideia é a seguinte:
$order = 'id1, id2, id3, id4';
$order = explode(',', $order);
$a = 1;
for($i = 0; $i < count($order); $i++){
$ordem = $a++;
$update = $this->update(array('ordem' => $ordem), array('id' => $order[$i]));
}>
Citar
que é salvar a ordem do sistema de drag e drop no banco de dados.
A ideia é o seguinte, o cliente quer um sistema de galerias que arraste as fotos da galeria, de modo que fique na ordem que ele determinou, o drag & drop já faz isso.
Eu normalmente faço um prototipo qnd acho q o desafio é muito grande para inserir direto no projeto.
Basicamente as tarefas:
- Arraste as fotos da galeria (drag ta rolando já correto)? (Enviado tudo certinho via Ajax ou Post com a numeração)
- Ordem (envolve um campo 'ordem' no banco)
- *Salvar o campo ordem. (a cada alteração por exemplo)
Da uma lida nisso:
[http://pt.stackoverflow.com/questions/46044/passar-variavel-com-varios-input-select](http://pt.stackoverflow.com/questions/46044/passar-variavel-com-varios-input-select)
Que talvez o exemplo do William vai fazer mais sentido.
Por exemplo se você tiver uma lista:
<input name="itens[]" value="498498" type="text" /><br>
<input name="itens[]" value="98484" type="text" /><br>
<input name="itens[]" value="1212" type="text" /><br>
<input name="itens[]" value="51588" type="text" /><br>
No php você vai/deveria receber um POST assim:
'itens' =>
array (size=4)
0 => string '498498' (length=5)
1 => string '98484' (length=5)
2 => string '1212' (length=5)
3 => string '51588' (length=5)Eu entendi a lógica do Mateus, e entendi lógica do Bruno, vou ver se consigo conforme esses exemplos do gabriel, vou postar o resultado aqui ainda hoje.
Olá pessoal, consegui, peço muito obrigado a ajuda de vocês, se não fosse as suas ajudas, eu acho que iria ficar quebrando cabeça achando que era bicho de sete cabeças. Olha o que eu simplesmente fiz, não alterei quase nada no formulário, apenas tirei o campo oculto de ordem, como o Bruno recomendou, e fiz isso:
foreach ($order['id'] as $key => $value):
$ordem['ordem'] = $key;
$id_ordem = $order['id'][$key];
$Update = new Update;
$Update->ExeUpdate("ws_posts_gallery", $ordem, "WHERE gallery_id = :id", "id={$id_ordem}");
endforeach;
Fico grato e feliz por todos vocês terem me formado a lógica adequada, para esse "problema".
Abraços!@sacjamm não sei como funciona o seu CRUD, mas te recomendo a criar a instancia da classe Update fora do foreach e deixar dentro apenas a query!
Joia, eu vim analisando essa questao Mateus Silva, eu andei analisando e vi que carregamento da pagina quando executa alguma função que tem a instancia dentro de um for ou foreach, fica mais demorada, eu já corrigi, vlw pelo lembrete.
o campo ordem[] não vai te ajudar.
você tem que inserir a ordem depois no php, quando estiver recebendo os dados.
Ex: