Гостевая книга своими руками на PHP и MySQL. Добавляем динамизма. AJAX + jQuery (изменения от 26.11.2013)
Автор:  
   Источник: /guestbook2.php 
В статье рассмотрено применение библиотеки jQuery и технологии AJAX для динамического обновления содержимого гостевой книги без перезагрузки страницы. 
Внимание! В этой статье используется устаревшее расширение PHP для связи с MySQL! 
Приемы работы с СУБД MySQL через современное расширение PHP mysqli приведены в новой статье! 
В качестве материала для разбора возьмем исходный код работающей гостевой книги из нашей предыдущей статьи «Гостевая книга своими руками на PHP и MySQL»: исходный код примеров (2 Кб) 
Для начала поймем, что же такое AJAX и jQuery и зачем они нужны? 
AJAX - это технология, позволяющая обмениваться данными между браузером и сервером без перезагрузок страницы, что бывает весьма удобно.  
jQuery – это JavaScript-библиотека, расширяющая и упрощающая разработку веб-сайтов. Помимо технологии AJAX в ней реализовано множество функций для работы с объектами (контейнерами) на веб-страницах. 
Официальный сайт jQuery: http://www.jquery.com/ 
Подробнее о динамическом обновлении контента средствами AJAX и jQuery читайте статью «AJAX и jQuery. Динамическое обновление контента. Основы». 
Важно! 
Для того, чтобы пример работал корректно, необходимо: 
1. Все файлы должны быть записаны в кодировке UTF-8. 
2. Скрипты должны выполняться на веб-сервере, а не запускаться в браузере, как файл. 
Приступим к разбору кода. Добавим в начало файла index.php строки с подключением библиотеки jQuery: 
<head>
<script type="text/javascript" src="jquery.js"></script>
</head>
 
Далее, вынесем из файла index.php фрагмент кода, который отвечает за вывод содержимого гостевой книги, в отдельный файл show.php: 
<!-- блок отображения сообщений-->
<?php
	include ("dbconnect.php");
	
	$c=0;
	// выбор всех записей из БД, отсортированных так, что самая последняя отправленная запись
	// будет всегда первой.
	$r=mysql_query ("SELECT * FROM gb ORDER BY dt DESC"); 
	while ($row=mysql_fetch_array($r))  // для каждой записи организуем вывод.
	{
		if ($c%2)
			$col="bgcolor='#f9f9f9'";	// цвет для четных записей
		else
			$col="bgcolor='#f0f0f0'";	// цвет для нечетных записей
			
			?>
			<table border="0" cellspacing="3" cellpadding="0" width="90%" <? echo $col; ?>
					  style="margin: 10px 0px;">
			<tr>
				<td width="150" style="color: #999999;">Имя пользователя:</td>
				<td><?php echo $row['username']; ?></td>
			</tr>
			<tr>
				<td width="150" style="color: #999999;">Дата опубликования:</td>
				<td><?php echo $row['dt']; ?></td>
			</tr>	
			<tr>
				<td colspan="2" style="color: #999999;">
					---------------------------------------------------------------
				</td>
			</tr>		
			<tr>
				<td colspan="2">
					<?php echo $row['msg']; ?>
					<br>
				</td>
			</tr>
			
			</table>
			<?php
		$c++;
	}
	
	if ($c==0) // если ни одной записи не встретилось
		echo "Гостевая книга пуста!<br>";
	
?>
Как видим, в коде все осталось без изменений, просто теперь он находится в отдельном файле (поэтому добавилось подключение модуля dbconnect.php для соединения с БД). 
В файле index.php, в месте, где раньше располагался вывод, размещаем контейнер: 
<div id="messages">
</div>
 
В этот контейнер мы будем динамически загружать информацию с записями гостевой книги. 
Далее в файле index.php следует форма ввода сообщения, её код остался практически без изменений, но: 
1. Мы убрали атрибуты name, action и method, и функцию splash(), вызываемую по событию onClick (контроль заполнения формы остался, просто теперь эта проверка выполняется в другой части кода) из строки и добавили параметр id: 
Забиваем Сайты В ТОП КУВАЛДОЙ - Уникальные возможности от SeoHammer 
Каждая ссылка анализируется по трем пакетам оценки:  SEO, Трафик и SMM. 
SeoHammer делает продвижение сайта прозрачным и простым занятием. 
Ссылки, вечные ссылки, статьи, упоминания, пресс-релизы - используйте по максимуму потенциал SeoHammer для продвижения вашего сайта. 
 
Что умеет делать SeoHammer 
— Продвижение в один клик, интеллектуальный подбор запросов, покупка самых лучших ссылок с высокой степенью качества у лучших бирж ссылок.  
— Регулярная проверка качества ссылок по более чем 100 показателям и ежедневный пересчет показателей качества проекта.  
— Все известные форматы ссылок: арендные ссылки, вечные ссылки, публикации (упоминания, мнения, отзывы, статьи, пресс-релизы).  
— SeoHammer покажет, где рост или падение, а также запросы, на которые нужно обратить внимание. 
 
SeoHammer еще предоставляет технологию  Буст, она ускоряет продвижение в десятки раз, 
а первые результаты появляются уже в течение первых 7 дней.
 
Зарегистрироваться и Начать продвижение
 
<form id="myForm">
 
2. Убрали строку со скрытым полем action 
<input type="hidden" name="action" value="add">
 
3. Подписали id для всех полей ввода. 
Как видно из изменений в форме, в нашем примере полностью изменилась процедура отправки данных на сервер и получение результатов с него. 
Отправка данных и получение содержимого гостевой книги описано в следующем скрипте: 
<script>
	// загрузка сообщений из БД в контейнер messages
	function show_messages()
	{
		$.ajax({
			url: "show.php",
			cache: false,
			success: function(html){
				$("#messages").html(html);
			}
		});
	}
		
	$(document).ready(function(){
		show_messages();
		
		// контроль и отправка данных на сервер в фоновом режиме
		// при нажатии на кнопку "отправить сообщение"
		$("#myForm").submit(function(){
		
			var name = $("#username").val();
			var msg  = $("#msg").val();
			if (name =='')
			{
				alert ("Заполните имя пользователя!");
				return false;
			}
			if (msg =='')
			{
				alert ("Заполните текст сообщения!");
				return false;
			}
			$.ajax({
				type: "POST",
				url: "action.php",
				data: "username="+name+"&msg="+msg+"&action=add",
				success: function(msg){
					show_messages();
			   }
			});
			
			return false;
		});
		
	});
</script>
Для того, чтобы событие submit не приводило к обновлению страницы в браузере, функция $("#myForm").submit() всегда должа возвращать значение false; 
Использование библиотеки jQuery в данном примере заключается в вызове функции $.ajax(), а также для простой адресации к объектам и их параметрам, например $(“#username”).val() – получает значение из поля ввода имени пользователя (id=”username”). 
Функция $.ajax() отрабатывает по разному в зависимости от параметров. 
Например, в функции show_messages() с помощью функции $.ajax() происходит загрузка данных из файла show.php в фоновом режиме: 
$.ajax({
	url: "show.php",
	cache: false,
	success: function(html){
		$("#messages").html(html);
	}
});
При успешной загрузке (параметр success), выполняется функция, заполняющая контейнер messages этими данными: 
function(html){
		$("#messages").html(html);
}
А при обработке события нажатия на кнопку «Отправить сообщение» функция $.ajax() отправляет данные на сервер, опять же в фоновом режиме, не перегружая всю страницу: 
$.ajax({
	type: "POST",
	url: "action.php",
	data: "username="+name+"&msg="+msg+"&action=add",
	success: function(msg){
		show_messages();
	}
});
Как мы видим, здесь используется метод POST (type: "POST") для отправки данных, как и в исходном примере. Данные из параметра data передаются файлу action.php (url: "action.php"). При успешной передаче данных, выполняется функция, описанная в параметре success, т.е. мы отображаем уже новые записи гостевой книги: 
function(msg){
	show_messages();
}
Как видно из примера, загрузка и отправка сообщений гостевой книги происходит без полного обновления страницы, что экономит нам время и трафик. 
Скачать полные исходные коды гостевой книги с динамическим обновлением содержимого без перезагрузки страницы можно здесь, 19 кб. 
Улучшения и упрощения принимаются по адресу: 
 
Статьи по теме
	Основные приемы работы с СУБД MySQL, используя PHP и расширение mysqli; 
	Гостевая книга своими руками на PHP и MySQL; 
	Виджет комментариев ВКонтакте. Добавляем интерактивность на сайт за 10 минут; 	
	AJAX и jQuery. Динамическое обновление контента. Основы; 
	AJAX и JavaScript. Загрузка контента без перезагрузки страницы; 
	AJAX и jQuery. Как загрузить скрипт JavaScript динамически?; 
	AJAX и jQuery. Передача параметров из PHP в JavaScript. Использование JSON; 
	Скрипт для голосования своими руками на PHP и MySQL с использованием AJAX; 
	Скрипт текстовой CAPTCHA для защиты от спам-ботов. 	
 											
										
 
										
  
  										
									 |