Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Jak zapisać kolejność tabeli sortable?
Laravelson
post 24.01.2017, 22:35:19
Post #1





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 7.01.2017

Ostrzeżenie: (0%)
-----


Dobry wieczór,

Jestem nowym użytkownikiem a także początkującym w php, chciałbym prosić o poradę jak zapisać kolejność wierszy w tabeli do bazy danych, żeby po kolejnym odczycie ułożone były tak jak je zostawiłem.
Każdy <tr> posiada ID który jest ID w tabeli, kolejność jest zapisana w tabeli w kolumnie sort.
  1. $line .= '<table name="items"><tbody>';
  2.  
  3. $i = 1;
  4.  
  5. while($file = $list->fetch_array()) {
  6.  
  7. if($file['active']){
  8. $selected = 'checked';
  9. }else{
  10. $selected = '';
  11. }
  12.  
  13. $line .= '<tr id="'.$i.'" class="item-data"><td width="5px">▲ ▼</td><td value="'.$file['order'].'"> ' .$file['file_name']. ' </td><td><input type="checkbox" class="tick" '.$selected.' value="'.$file['active'].'" id="'.$file['id'].'"/></td></tr>';
  14.  
  15. $i++;
  16.  
  17. }
  18.  
  19.  
  20. $line .= '</tbody></table>';

ten kod generuje moją tabelkę.
Nie mogę zrozumieć, jak przygotować ajax i wysłać dane do php żeby zapisać nową kolejność.
Go to the top of the page
+Quote Post
lukaskolista
post 25.01.2017, 10:15:31
Post #2





Grupa: Zarejestrowani
Postów: 872
Pomógł: 94
Dołączył: 31.03.2010

Ostrzeżenie: (0%)
-----


Kolejność zapisu tak na prawdę nie ma znaczenia. Przy odczycie po prostu je posortuj "SELECT * FROM ... ORDER BY table.column {rosnąco/malejąco}"
Go to the top of the page
+Quote Post
trueblue
post 25.01.2017, 21:26:33
Post #3





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Najpierw musisz wywołać jakoś ajax, a ten będzie wywoływany przy klikaniu strzałek /\ \/, trzeba więc tam podpiąć zdarzenia na click.
Kiedy sortujesz w górę, to ustawiasz dla rekordu wyżej klucz sortowania jak obecny, a obecnemu klucz sortowania z tego wyżej. Analogicznie przy sortowaniu w dół. Czyli zamieniasz klucze dwóch sąsiadujących rekordów.
Sąsiada nad i pod znajdziesz sortując ASC lub DESC rekordy i wybierając jeden rekord gdzie klucz sortowania > lub < klucz sortowania sortowanego rekordu.


--------------------
Go to the top of the page
+Quote Post
Laravelson
post 26.01.2017, 22:24:09
Post #4





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 7.01.2017

Ostrzeżenie: (0%)
-----


Chyba prawie sobie poradziłem ale .... nie do końca bo:
Kiedy przesunę rząd np z początku na koniec tabelki zapisany porządek w DB jest jakby niepoprawny

i kiedy odświeżę stronę rząd który powinien być "teoretycznie" ostatni magicznie jest pierwszy, a czasem nawet drugi smile.gif
i nic mi się nie zgadza sad.gif
Już praawie wszystkie włosy sobie wyrwałem z głowy, tak mnie to irytuje smile.gif
generuję nowy porządek w ten sposob:
  1. jQuery('tbody').sortable({
  2. axis: 'y',
  3. update: function(event, ui) {
  4. var newOrder = jQuery(this).sortable('toArray').toString();// efektem działania jest "lista"
  5. // czy a jeśli tak, to jak zbudować tablicę np nazwa => wartość
  6. // próbowałem tak: var newOrder = jQuery(this).sortable('toArray',{id: 'id'}).toString();
  7. // ale najwyraźniej sortable toArray robi to po swojemu i nie interesuje "go" co ja tam sobie wymyśliłem ;)
  8.  
  9. jQuery.ajax({
  10. url: 'updateCssList.php',
  11. type: 'POST',
  12. data: {
  13. 'order': newOrder,
  14. },
  15. success: function(result)
  16. {
  17. console.log(result);
  18. },
  19. });
  20. }
  21. });

Nie wiem gdzie tkwi problem. Zapisuje dane w ten sposób:
  1. if( isset ( $_POST ) ) {
  2. $myarray = explode(',',$_POST['order']);
  3. $i = 1;
  4. require_once 'config.php' ;
  5. if (!$conn) {
  6. echo 'Connection Failed';
  7. die("Connection failed: " . mysqli_connect_error());
  8. }
  9.  
  10. foreach($myarray as $item){
  11. $sqlNeworder = "UPDATE `tblCssList` SET `order` = '$i' WHERE `id` = $item";
  12. mysqli_query($conn,$sqlNeworder);
  13. $i++;
  14. }
  15. }

Podpowiedzcie gdzie zrobiłem błąd, nie rozumiem dlaczego mimo, iż porządek jest generowany i widzę go w konsoli gdzie wygląda prawidłowo.

Ten post edytował Laravelson 26.01.2017, 22:27:02
Go to the top of the page
+Quote Post
phpamator
post 27.01.2017, 11:32:41
Post #5





Grupa: Zarejestrowani
Postów: 321
Pomógł: 3
Dołączył: 10.07.2016
Skąd: UK-raine

Ostrzeżenie: (0%)
-----


Mam bardzo podobny problem, to co jest na ekranie nie oddaje tego co jet przesyłane do php.
Wygląda jakby wysyłany był stan z "przed" wykonania ruchu.
np jeśli mam aktualnie 1,2,3 i zmienię 2,3,1 wysyła mi 1,2,3 a jeśli teraz wykonam ponowny ruch na ekranie przeciągając 1 na początek w konsoli widzę 2,3,1, czyli stan przed wykonaniem ruchu smile.gif
Go to the top of the page
+Quote Post
trueblue
post 27.01.2017, 12:18:44
Post #6





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Cytat(Laravelson @ 26.01.2017, 22:24:09 ) *
Podpowiedzcie gdzie zrobiłem błąd, nie rozumiem dlaczego mimo, iż porządek jest generowany i widzę go w konsoli gdzie wygląda prawidłowo.

Czytaj dokumentację.
sortable('toArray') domyślnie zwraca listę id elementów. Nawet kiedy podasz jako drugi parametr {attribute:'id'}, to i tak nic nie zmieni, bo wiersze nie mają nadanych id.

Tu masz przykład z użyciem innego atrybutu (data-sort). Możesz go zmienić na id (w html, a w js zmienić lub usunąć).
https://jsfiddle.net/khzcn586/


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.04.2024 - 10:41