chevron-left chevron-right

Piotr Nalepa Frontend, architecture and AI

[PHP][MySQL][jQuery] Przeciągnij i upuść z zapisem do bazy danych z wykorzystaniem biblioteki jQuery

This version
blog.piotrnalepa.pl/2010/10/30/jquery-php-mysql-drag-and-drop-z-zapisem-do-bazy-danych-z-wykorzystaniem-biblioteki-jquery
Published
Author
, Staff Software Engineer
Categories
JavaScript, PHP
Feedback
Write to me · Post on X

This post is 16 years old. Browsers and tools may have changed since then, so check the code against current documentation before you use it.

W dzisiejszym artykule opiszę sposób na stworzenie systemu drag'n'drop (przeciągnij i upuść) z wykorzystaniem jQuery, PHP i bazy danych MySQL.
Nie będę ukrywał, że wpis ten jest zainspirowany wypowiedzią jednego z fanów tego bloga, jaka miała miejsce na Facebooku.

Technologia drag'n'drop może być wykorzystana do wielu rzeczy, na przykład do tworzenia układu strony, który będzie mógł być dostosowany przez użytkownika lub do stworzenia własnej listy zadań/priorytetów.
W przykładzie prezentowanym przeze mnie, będziemy tworzyć listę elementów, które będzie można przesuwać w inne miejsce na liście. Pozycja tych elementów będzie zapisywana do bazy danych, dlatego po odświeżeniu strony każdy będzie mógł zobaczyć układ elementów w takim stanie w jakim go zostawił.

Zaczniemy od utworzenia struktury listy. Musimy do niej dołączyć odczytywanie danych z bazy danych:

Example 1PHP
index.php
<div id="lewa">
<ul>
< ?php
      $query  = "SELECT * FROM items ORDER BY kolejnosc ASC";
      mysql_query('SET character_set_connection=utf8');
      mysql_query('SET character_set_client=utf8');
      mysql_query('SET character_set_results=utf8');
      $result = mysql_query($query);
 
      while($row = mysql_fetch_assoc($result))
      {
      ?>
<li id="items_<?php echo $row['id']; ?>">< ?php echo $row['id'].". ".$row['text']; ?></li>
 
      < ?php } ?>
</ul>
</div>
<div id="prawa">
 
Tablica elementów z bazy będzie wyświetlona tutaj.
</div>

Tutaj celowo umieściłem 3 dodatkowe linijki zapytań mysql_query, aby uniknąć problemów z odczytem polskich znaków z bazy danych.
Następną rzeczą jaką będziemy potrzebować, to biblioteka jQuery.UI. Jest ona niezbędna aby stworzyć efekt drag'n'drop. Paczka zawiera od razu standardową bibliotekę jQuery. Należy te pliki JavaScript dołączyć do sekcji HEAD strony.
Następnie dodajemy następujący wpis do naszego pliku:

Example 2JavaScript
index.php
 
$(document).ready(function(){
	$(function() {
		$("#lewa ul").sortable({ opacity: 0.6, cursor: 'move', update: function() {
			var order = $(this).sortable("serialize") + '&action=aktualizacja';
			$.post("updateDB.php", order, function(theResponse){
				$("#prawa").html(theResponse);
			});
		}
		});
	});
});

Jak pewnie zauważyłeś/aś, w powyższym skrypcie odwołujemy się do pliku updateDB.php, dlatego teraz przejdziemy do stworzenia takowego pliku.

Example 3PHP
updateDB.php
 
require("db.php");
 
$action = mysql_real_escape_string($_POST['action']);
$aktualizacja = $_POST['items'];
 
if ($action == "aktualizacja"){
 
	$kolejnosc = 1;
	foreach ($aktualizacja as $id) {
 
		$query = "UPDATE items SET kolejnosc = " . $kolejnosc . " WHERE id = " . $id;
		mysql_query($query) or die('Błąd zapytania SQL');
		$kolejnosc = $kolejnosc + 1;
	}
 
	echo '&lsaquo;pre&rsaquo;';
	print_r($aktualizacja);
	echo '&lsaquo;/pre&rsaquo;';
	echo 'Jeśli odświeżysz stronę to zobaczysz elementy ustawione tak jak zapisałeś/aś.';
}

Dla przejrzystości kodu musiałem użyć znaczników w wersji ANSI: lsaquo to < oraz rsaquo to >. Znaczniki ANSI trzeba będzie podmienić na zwykłe w pliku PHP.
Dodatkowo musisz utworzyć plik z danymi do łączenia się bazą danych. Możesz wykorzystać jeden z tych, który zamieściłem w jednym z poprzednich tutoriali.
Jako że, odwołujemy się do bazy danych, to musimy ją też utworzyć wedle następującego wzoru:
[PHP][MySQL][jQuery] Przeciągnij i upuść z zapisem do bazy danych z wykorzystaniem biblioteki jQuery - by Piotr Nalepa - widok bazy danych

To by było wszystko. Demo z tego artykułu możesz zobaczyć tutaj: jquery drag and drop

Źródło: źródło

Share
Feedback

About the author

Staff Software Engineer

I've been writing this blog since 2009 and building for the web professionally for 14 years. Today I lead the frontend of the Cosmos platform at Bishop Fox, where I've been since day one of the project. Before that I worked at OLX, KUDO, Auto1 and eZ Systems. Here I write about what I've learned in practice: JavaScript, TypeScript, React, CSS and frontend architecture. I've also spoken at conferences across Poland and Europe. Got a question or an idea for a post? Let me know!