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.
$line .= '<table name="items"><tbody>'; $i = 1; while($file = $list->fetch_array()) { if($file['active']){ $selected = 'checked'; }else{ $selected = ''; } $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>'; $i++; } $line .= '</tbody></table>';
Kolejność zapisu tak na prawdę nie ma znaczenia. Przy odczycie po prostu je posortuj "SELECT * FROM ... ORDER BY table.column {rosnąco/malejąco}"
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.
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
i nic mi się nie zgadza
Już praawie wszystkie włosy sobie wyrwałem z głowy, tak mnie to irytuje
generuję nowy porządek w ten sposob:
jQuery('tbody').sortable({ axis: 'y', update: function(event, ui) { var newOrder = jQuery(this).sortable('toArray').toString();// efektem działania jest "lista" // czy a jeśli tak, to jak zbudować tablicę np nazwa => wartość // próbowałem tak: var newOrder = jQuery(this).sortable('toArray',{id: 'id'}).toString(); // ale najwyraźniej sortable toArray robi to po swojemu i nie interesuje "go" co ja tam sobie wymyśliłem ;) jQuery.ajax({ url: 'updateCssList.php', type: 'POST', data: { 'order': newOrder, }, success: function(result) { console.log(result); }, }); } });
if( http://www.php.net/isset ( $_POST ) ) { $myarray = http://www.php.net/explode(',',$_POST['order']); $i = 1; require_once 'config.php' ; if (!$conn) { http://www.php.net/echo 'Connection Failed'; http://www.php.net/die("Connection failed: " . mysqli_connect_error()); } foreach($myarray as $item){ $sqlNeworder = "UPDATE `tblCssList` SET `order` = '$i' WHERE `id` = $item"; mysqli_query($conn,$sqlNeworder); $i++; } }
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
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)