<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Электронный научно-практический журнал «Современные научные исследования и инновации» &#187; AJAX</title>
	<atom:link href="http://web.snauka.ru/issues/tag/ajax/feed" rel="self" type="application/rss+xml" />
	<link>https://web.snauka.ru</link>
	<description></description>
	<lastBuildDate>Fri, 17 Apr 2026 07:29:22 +0000</lastBuildDate>
	<language>ru</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Интерактивное изменение данных на веб-странице с использованием AJAX и MySQL на Hostland</title>
		<link>https://web.snauka.ru/issues/2025/01/103014</link>
		<comments>https://web.snauka.ru/issues/2025/01/103014#comments</comments>
		<pubDate>Wed, 29 Jan 2025 16:26:26 +0000</pubDate>
		<dc:creator>Мухаяров Дильназ Данисович</dc:creator>
				<category><![CDATA[05.00.00 ТЕХНИЧЕСКИЕ НАУКИ]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[hostland]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[phpmyadmin]]></category>
		<category><![CDATA[база данных]]></category>
		<category><![CDATA[веб-разработка]]></category>
		<category><![CDATA[динамические таблицы]]></category>
		<category><![CDATA[интерактивность]]></category>
		<category><![CDATA[редактирование данных]]></category>

		<guid isPermaLink="false">https://web.snauka.ru/issues/2025/01/103014</guid>
		<description><![CDATA[Научный руководитель: Вильданов Алмаз Нафкатович к.ф.-м.н., Уфимский университет науки и технологий, Нефтекамский филиал Hostland — это популярный хостинг-провайдер, который предоставляет удобный доступ к веб-серверу, базам данных MySQL и другим необходимым инструментам для веб-разработки. Работа с Hostland начинается с регистрации и выбора тарифного плана, который соответствует вашим потребностям. Основные шаги работы с Hostland: Регистрация и выбор тарифного плана: Выберите [...]]]></description>
			<content:encoded><![CDATA[<p style="background: white; text-align: center;"><em>Научный руководитель: Вильданов Алмаз Нафкатович</em><strong><em><br />
</em></strong><span><em>к.ф.-м.н., </em></span><em>Уфимский университет науки и технологий, Нефтекамский филиал</em></p>
<p style="background: white;"><span style="color: #212529;">Hostland — это популярный хостинг-провайдер, который предоставляет удобный доступ к веб-серверу, базам данных MySQL и другим необходимым инструментам для веб-разработки. Работа с Hostland начинается с регистрации и выбора тарифного плана, который соответствует вашим потребностям.<br />
</span></p>
<p style="background: white;"><span style="color: #212529;"><strong>Основные шаги работы с Hostland:</strong><br />
</span></p>
<ul>
<li>
<div style="background: white;"><span style="color: #212529;"><strong>Регистрация и выбор тарифного плана:</strong> Выберите подходящий план с необходимыми ресурсами (дисковое пространство, трафик, количество баз данных и т.д.) и зарегистрируйтесь на сайте.<br />
</span></div>
</li>
<li>
<div style="background: white;"><span style="color: #212529;"><strong>Управление доменом:</strong> Зарегистрируйте или перенесите свой домен на Hostland.<br />
</span></div>
</li>
<li>
<div style="background: white;"><span style="color: #212529;"><strong>Настройка хостинга:</strong><br />
</span></div>
<ul>
<li>
<div style="background: white;"><span style="color: #212529;">Создание базы данных MySQL: В панели управления Hostland создайте новую базу данных, определите пользователя и установите пароль.<br />
</span></div>
</li>
<li>
<div style="background: white;"><span style="color: #212529;">Доступ к файловой системе: Используйте FTP или файловый менеджер для загрузки файлов вашего веб-приложения.<br />
</span></div>
</li>
</ul>
</li>
<li>
<div style="background: white;"><span style="color: #212529;"><strong>Установка PHP:</strong> Hostland поддерживает PHP, поэтому вам не нужно дополнительно устанавливать его.<br />
</span></div>
</li>
<li>
<div style="background: white;"><span style="color: #212529;"><strong>Работа с phpMyAdmin:</strong> Для управления базой данных Hostland предоставляет доступ к phpMyAdmin.<br />
</span></div>
</li>
</ul>
<p style="background: white;"><span style="color: #212529;"><strong>phpMyAdmin<br />
</strong></span></p>
<p style="background: white;"><span style="color: #212529;">phpMyAdmin — это мощный инструмент для администрирования баз данных MySQL через веб-интерфейс. Он предоставляет графическое окружение для выполнения различных операций, таких как:<br />
</span></p>
<ol>
<li>
<div style="background: white;"><span style="color: #212529;"><strong>Создание и редактирование баз данных:</strong> Используйте phpMyAdmin для создания новых баз данных, таблиц, индексов, ограничений и т.д.<br />
</span></div>
</li>
<li>
<div style="background: white;"><span style="color: #212529;"><strong>Управление таблицами:</strong> Изменяйте структуру таблиц, добавляйте и удаляйте столбцы, редактируйте типы данных и т.д.<br />
</span></div>
</li>
<li>
<div style="background: white;"><span style="color: #212529;"><strong>Запросы SQL:</strong> Выполняйте запросы SQL для извлечения, вставки, обновления и удаления данных.<br />
</span></div>
</li>
<li>
<div style="background: white;"><span style="color: #212529;"><strong>Импорт и экспорт данных:</strong> Импортируйте и экспортируйте данные в различных форматах (CSV, SQL и т.д.).<br />
</span></div>
</li>
<li>
<div style="background: white;"><span style="color: #212529;"><strong>Управление пользователями:</strong> Создавайте и редактируйте пользователей базы данных, настраивайте их права доступа.<br />
</span></div>
</li>
</ol>
<p style="background: white;"><span style="color: #212529;">Итак, я решил создать интерактивный веб-сайт для небольшого овощного магазина, где можно было бы редактировать информацию о покупателях и овощах прямо на сайте, без необходимости перезагружать страницу. Для этого я использовал комбинацию PHP, MySQL, jQuery и AJAX на хостинге Hostland.<br />
</span></p>
<p style="background: white;"><span style="color: #212529;">Сначала я спроектировал базу данных. Я создал три таблицы в phpMyAdmin: <span style="color: #e83e8c;">vegans<span style="color: #212529;"> (для информации о покупателях), <span style="color: #e83e8c;">vegetables<span style="color: #212529;"> (для информации об овощах) и <span style="color: #e83e8c;">vegan_vegetable<span style="color: #212529;"> (связующая таблица для реализации связи «многие ко многим», так как один покупатель может купить несколько овощей, а один овощ — несколько покупателей). В каждой таблице я определил необходимые поля с соответствующими типами данных (целые числа, строки, даты и десятичные числа для цен).<em><br />
</em></span></span></span></span></span></span></span></p>
<p style="background: white;"><span style="color: #212529;">Затем я занялся созданием главной страницы (<span style="color: #e83e8c;">index.php<span style="color: #212529;">). Здесь я использовал PHP для подключения к базе данных MySQL и выполнения SQL-запросов <span style="color: #e83e8c;">SELECT<span style="color: #212529;"> для извлечения данных о покупателях и овощах. Полученные данные я отобразил в виде двух HTML-таблиц. В верхней части страницы я добавил кнопку &#8220;Интерактив&#8221;.<em><br />
</em></span></span></span></span></span></p>
<p style="background: white;"><span style="color: #212529;">Кнопка &#8220;Интерактив&#8221; ведёт на страницу <span style="color: #e83e8c;">interactive.php<span style="color: #212529;">. На этой странице я снова подключился к базе данных, получил данные и отобразил их в виде тех же таблиц, но с одним важным отличием: каждая ячейка, которую можно редактировать, получила класс <span style="color: #e83e8c;">dynamic<span style="color: #212529;">.<br />
</span></span></span></span></span></p>
<p style="background: white;"><span style="color: #212529;">Далее, я использовал jQuery для того, чтобы добавить интерактивность. При клике на ячейку с классом <span style="color: #e83e8c;">dynamic<span style="color: #212529;">, стандартный текст заменялся на поле ввода. После того как пользователь внёс изменения и вышел из поля (событие <span style="color: #e83e8c;">blur<span style="color: #212529;">) или нажал Enter, данные отправлялись на сервер с помощью AJAX.<em><br />
</em></span></span></span></span></span></p>
<p style="background: white;"><span style="color: #212529;">Серверная часть, обработка изменений, реализована в файле <span style="color: #e83e8c;">itable_save.php<span style="color: #212529;">. Этот PHP-скрипт получал данные из AJAX-запроса, формировал подготовленный SQL-запрос <span style="color: #e83e8c;">UPDATE<span style="color: #212529;"> для безопасности и записывал изменения в базу данных. После успешного обновления он возвращал подтверждающее сообщение. <em><br />
</em></span></span></span></span></span></p>
<p style="background: white;"><span style="color: #212529;">Для обновления таблиц на главной странице после сохранения изменений на интерактивной странице я создал ещё один файл <span style="color: #e83e8c;">update_tables.php<span style="color: #212529;">. Этот скрипт получает актуальные данные из базы данных и формирует их в формате JSON. Затем, с помощью AJAX на странице <span style="color: #e83e8c;">interactive.php<span style="color: #212529;">, обновляется контент таблиц на главной странице <span style="color: #e83e8c;">index.php<span style="color: #212529;">. <em><br />
</em></span></span></span></span></span></span></span></p>
<p style="background: white;"><span style="color: #212529;">В результате, при нажатии на кнопку &#8220;Интерактив&#8221;, я перехожу на страницу с редактируемыми таблицами. После сохранения изменений, главная страница автоматически обновляется с учетом внесенных данных, не требуя полной перезагрузки. <em><br />
</em></span></p>
<p style="background: white;"><span style="color: #212529;">В целом, проект оказался довольно интересным и показал, как мощно сочетание PHP, MySQL, jQuery и AJAX может улучшить пользовательский опыт, создавая динамические и интерактивные веб-страницы.<br />
</span></p>
<p style="background: white;"><span style="color: #212529;">Рассмотрим создание интерактивного интерфейса на примере овощного магазина, где пользователи могут редактировать данные о покупателях и овощах.<br />
</span></p>
<p style="background: white;"><span style="color: #212529;"><strong>1. Проектирование Базы Данных:</strong><br />
</span></p>
<p style="background: white;"><span style="color: #212529;">Мы создали три таблицы:<br />
</span></p>
<ul>
<li>
<div style="background: white;"><span style="color: #e83e8c;">vegans<span style="color: #212529;"> (покупатели)<br />
</span></span></div>
</li>
<li>
<div style="background: white;"><span style="color: #e83e8c;">vegetables<span style="color: #212529;"> (овощи)<br />
</span></span></div>
</li>
<li>
<div style="background: white;"><span style="color: #e83e8c;">vegan_vegetable<span style="color: #212529;"> (связь многие ко многим)</span></span></div>
</li>
</ul>
<p style="background: white;"><span style="color: #212529;"><strong>2. Создание динамической веб-страницы (<span style="color: #e83e8c;">index.php<span style="color: #212529;">):</span></span></strong><br />
</span></p>
<ul>
<li>
<div style="background: white;"><span style="color: #212529;">На главной странице отображаются таблицы покупателей и овощей (статические данные).<br />
</span></div>
</li>
<li>
<div style="background: white;"><span style="color: #212529;">Добавлена кнопка &#8220;Интерактив&#8221;, которая ведет на новую страницу с интерактивными таблицами <span style="color: #e83e8c;">interactive.php<span style="color: #212529;"><br />
</span></span></span></div>
</li>
<li>
<div style="background: white;"><span style="color: #212529;">Используется PHP и MySQL для подключения к базе данных и извлечения данных.<br />
</span></div>
</li>
<li>
<div style="background: white;"><span style="color: #212529;">Для отображения данных используются HTML-таблицы.<br />
</span></div>
</li>
</ul>
<p>&lt;!DOCTYPE&nbsp;html&gt;<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;title&gt;Овощной&nbsp;Магазин&lt;/title&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;style&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.dynamic&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cursor:&nbsp;pointer;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.dynamic:hover&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;background-color:&nbsp;#f0f0f0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/style&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;center&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;button&nbsp;id=&#8221;interactiveButton&#8221;&gt;Интерактив&lt;/button&gt;&nbsp;&lt;br&gt;&nbsp;&lt;br&gt;&nbsp;&nbsp;&lt;!&#8211;&nbsp;Кнопка&nbsp;сверху&nbsp;&#8211;&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;h1&gt;Овощной&nbsp;Магазин&lt;/h1&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;?php<br />
&nbsp;&nbsp;&nbsp;&nbsp;$servername&nbsp;=&nbsp;&#8221;localhost&#8221;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;$username&nbsp;=&nbsp;&#8221;host1876921_preobraz&#8221;;&nbsp;&nbsp;//&nbsp;Замените&nbsp;на&nbsp;имя&nbsp;пользователя&nbsp;базы&nbsp;данных<br />
&nbsp;&nbsp;&nbsp;&nbsp;$password&nbsp;=&nbsp;&#8221;715216&#8243;;&nbsp;&nbsp;//&nbsp;Замените&nbsp;на&nbsp;пароль&nbsp;базы&nbsp;данных<br />
&nbsp;&nbsp;&nbsp;&nbsp;$dbname&nbsp;=&nbsp;&#8221;host1876921_interactiveovochi&#8221;;&nbsp;&nbsp;//&nbsp;Замените&nbsp;на&nbsp;имя&nbsp;вашей&nbsp;базы&nbsp;данных<br />
&nbsp;&nbsp;&nbsp;&nbsp;$conn&nbsp;=&nbsp;new&nbsp;mysqli($servername,&nbsp;$username,&nbsp;$password,&nbsp;$dbname);<br />
&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;($conn-&gt;connect_error)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;die(&#8220;Ошибка&nbsp;подключения:&nbsp;&#8221;&nbsp;.&nbsp;$conn-&gt;connect_error);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;&#8221;&lt;h2&gt;Список&nbsp;покупателей&lt;/h2&gt;&#8221;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;$sql_vegans&nbsp;=&nbsp;&#8221;SELECT&nbsp;*&nbsp;FROM&nbsp;vegans&#8221;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;$result_vegans&nbsp;=&nbsp;$conn-&gt;query($sql_vegans);<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;($result_vegans-&gt;num_rows&nbsp;&gt;&nbsp;0)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;&#8221;&lt;table&nbsp;id=&#8217;vegansTable&#8217;&nbsp;border=&#8217;1&#8242;&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;th&gt;ID&lt;/th&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;th&gt;Имя&lt;/th&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;th&gt;Фамилия&lt;/th&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;th&gt;Email&lt;/th&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;th&gt;Телефон&lt;/th&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;th&gt;Дата&nbsp;регистрации&lt;/th&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;th&gt;Город&lt;/th&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/tr&gt;&#8221;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;($row&nbsp;=&nbsp;$result_vegans-&gt;fetch_assoc())&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;&#8221;&lt;tr&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&#8221;&nbsp;.&nbsp;$row["id_vegan"]&nbsp;.&nbsp;&#8221;&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&#8221;&nbsp;.&nbsp;$row["first_name"]&nbsp;.&nbsp;&#8221;&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&#8221;&nbsp;.&nbsp;$row["last_name"]&nbsp;.&nbsp;&#8221;&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&#8221;&nbsp;.&nbsp;$row["email"]&nbsp;.&nbsp;&#8221;&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&#8221;&nbsp;.&nbsp;$row["phone_number"]&nbsp;.&nbsp;&#8221;&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&#8221;&nbsp;.&nbsp;$row["registration_date"]&nbsp;.&nbsp;&#8221;&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&#8221;&nbsp;.&nbsp;$row["city"]&nbsp;.&nbsp;&#8221;&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/tr&gt;&#8221;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;&#8221;&lt;/table&gt;&#8221;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;&#8221;&lt;p&gt;Нет&nbsp;покупателей&lt;/p&gt;&#8221;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;&#8221;&lt;h2&gt;Список&nbsp;овощей&lt;/h2&gt;&#8221;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;$sql_vegetables&nbsp;=&nbsp;&#8221;SELECT&nbsp;*&nbsp;FROM&nbsp;vegetables&#8221;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;$result_vegetables&nbsp;=&nbsp;$conn-&gt;query($sql_vegetables);<br />
&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;($result_vegetables-&gt;num_rows&nbsp;&gt;&nbsp;0)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;&#8221;&lt;table&nbsp;id=&#8217;vegetablesTable&#8217;&nbsp;border=&#8217;1&#8242;&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;th&gt;ID&lt;/th&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;th&gt;Название&lt;/th&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;th&gt;Сорт&lt;/th&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;th&gt;Цена&nbsp;за&nbsp;кг&lt;/th&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;th&gt;Количество&nbsp;на&nbsp;складе&lt;/th&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;th&gt;Дата&nbsp;добавления&lt;/th&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;th&gt;Страна&nbsp;происхождения&lt;/th&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/tr&gt;&#8221;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;($row&nbsp;=&nbsp;$result_vegetables-&gt;fetch_assoc())&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;&#8221;&lt;tr&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&#8221;&nbsp;.&nbsp;$row["id_vegetable"]&nbsp;.&nbsp;&#8221;&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&#8221;&nbsp;.&nbsp;$row["name"]&nbsp;.&nbsp;&#8221;&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&#8221;&nbsp;.&nbsp;$row["variety"]&nbsp;.&nbsp;&#8221;&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&#8221;&nbsp;.&nbsp;$row["price_per_kg"]&nbsp;.&nbsp;&#8221;&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&#8221;&nbsp;.&nbsp;$row["stock_quantity"]&nbsp;.&nbsp;&#8221;&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&#8221;&nbsp;.&nbsp;$row["date_added"]&nbsp;.&nbsp;&#8221;&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&#8221;&nbsp;.&nbsp;$row["country_origin"]&nbsp;.&nbsp;&#8221;&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/tr&gt;&#8221;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;&#8221;&lt;/table&gt;&#8221;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;&#8221;&lt;p&gt;Нет&nbsp;овощей&lt;/p&gt;&#8221;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;$conn-&gt;close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;?&gt;<br />
&lt;/center&gt;<br />
&lt;script&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;document.getElementById(&#8216;interactiveButton&#8217;).addEventListener(&#8216;click&#8217;,&nbsp;function()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window.location.href&nbsp;=&nbsp;&#8217;interactive.php&#8217;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;});<br />
&lt;/script&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</p>
<p style="background: white;"><span style="color: #212529;"><strong>3. Создание интерактивной страницы (<span style="color: #e83e8c;">interactive.php<span style="color: #212529;">):</span></span></strong><br />
</span></p>
<ul>
<li>
<div style="background: white;"><span style="color: #212529;">На странице <span style="color: #e83e8c;">interactive.php<span style="color: #212529;"> отображаются таблицы покупателей и овощей c возможностью изменения данных.<br />
</span></span></span></div>
</li>
<li>
<div style="background: white;"><span style="color: #212529;">Используется PHP и MySQL для подключения к базе данных и извлечения данных.<br />
</span></div>
</li>
<li>
<div style="background: white;"><span style="color: #212529;">Каждое поле таблицы, которое можно изменять имеет класс <span style="color: #e83e8c;">.dynamic<span style="color: #212529;">.<br />
</span></span></span></div>
</li>
<li>
<div style="background: white;"><span style="color: #212529;">Скрипт JQuery, который создает input поля для изменения.<br />
</span></div>
</li>
<li>
<div style="background: white;"><span style="color: #212529;">Используется Ajax-запрос для сохранения изменений.<br />
</span></div>
</li>
<li>
<div style="background: white;"><span style="color: #212529;">Добавлена кнопка &#8220;Назад&#8221;, которая перенаправляет на главную страницу <span style="color: #e83e8c;">index.php<span style="color: #212529;">.<br />
</span></span></span></div>
<p style="background: white;"><img src="https://web.snauka.ru/wp-content/uploads/2025/01/012925_1514_1.png" alt="" /><span style="color: #212529;"><strong><br />
</strong></span></p>
<p style="background: white;"><img src="https://web.snauka.ru/wp-content/uploads/2025/01/012925_1514_2.png" alt="" /><span style="color: #212529;"><strong><br />
</strong></span></p>
<p style="background: white;"><img src="https://web.snauka.ru/wp-content/uploads/2025/01/012925_1514_3.png" alt="" /><span style="color: #212529;"><strong><br />
</strong></span></p>
<p style="background: white;"><img src="https://web.snauka.ru/wp-content/uploads/2025/01/012925_1514_4.png" alt="" /><span style="color: #212529;"><strong><br />
</strong></span></p>
<p style="background: white;"><img src="https://web.snauka.ru/wp-content/uploads/2025/01/012925_1514_5.png" alt="" /></p>
<p style="background: white;"><img src="https://web.snauka.ru/wp-content/uploads/2025/01/012925_1514_6.png" alt="" /><span style="color: #212529;"><br />
</span></p>
</li>
</ul>
<p style="background: white;"><span style="color: #212529;"><strong>4. Обработка изменений на сервере (<span style="color: #e83e8c;">itable_save.php<span style="color: #212529;">):</span></span></strong><br />
</span></p>
<ul>
<li>
<div style="background: white;"><span style="color: #212529;">Этот PHP-скрипт получает данные через POST-запрос.<br />
</span></div>
</li>
<li>
<div style="background: white;"><span style="color: #212529;">Выполняет SQL-запрос UPDATE для изменения данных в базе.<br />
</span></div>
</li>
<li>
<div style="background: white;"><span style="color: #212529;">Возвращает сообщение об успешном или неудачном обновлении.<br />
</span></div>
<p style="background: white;"><img src="https://web.snauka.ru/wp-content/uploads/2025/01/012925_1514_7.png" alt="" /><span style="color: #212529;"><br />
</span></p>
<p style="background: white;"><img src="https://web.snauka.ru/wp-content/uploads/2025/01/012925_1514_8.png" alt="" /><span style="color: #212529;"><br />
</span></p>
</li>
</ul>
<p style="background: white;"><span style="color: #212529;"><strong>5. Обновление данных на главной странице (<span style="color: #e83e8c;">update_tables.php<span style="color: #212529;">):</span></span></strong><br />
</span></p>
<ul>
<li>
<div style="background: white;"><span style="color: #212529;">Этот PHP-скрипт получает актуальные данные из базы.<br />
</span></div>
</li>
<li>
<div style="background: white;"><span style="color: #212529;">Возвращает данные в формате JSON, которые применяет скрипт на странице <span style="color: #e83e8c;">interactive.php</span></span></div>
</li>
</ul>
<p style="background: white;">
<p>&lt;?php<br />
$servername&nbsp;=&nbsp;&#8221;localhost&#8221;;<br />
$username&nbsp;=&nbsp;&#8221;host1876921_preobraz&#8221;;&nbsp;&nbsp;//&nbsp;Замените&nbsp;на&nbsp;имя&nbsp;пользователя&nbsp;базы&nbsp;данных<br />
$password&nbsp;=&nbsp;&#8221;715216&#8243;;&nbsp;&nbsp;//&nbsp;Замените&nbsp;на&nbsp;пароль&nbsp;базы&nbsp;данных<br />
$dbname&nbsp;=&nbsp;&#8221;host1876921_interactiveovochi&#8221;;&nbsp;&nbsp;//&nbsp;Замените&nbsp;на&nbsp;имя&nbsp;вашей&nbsp;базы&nbsp;данных<br />
$output&nbsp;=&nbsp;array();<br />
//&nbsp;Вывод&nbsp;таблицы&nbsp;покупателей<br />
$sql_vegans&nbsp;=&nbsp;&#8221;SELECT&nbsp;*&nbsp;FROM&nbsp;vegans&#8221;;<br />
$result_vegans&nbsp;=&nbsp;$conn-&gt;query($sql_vegans);<br />
$output["vegans"]&nbsp;=&nbsp;&#8221;";<br />
if&nbsp;($result_vegans-&gt;num_rows&nbsp;&gt;&nbsp;0)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;$output["vegans"]&nbsp;.=&nbsp;&#8221;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;th&gt;ID&lt;/th&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;th&gt;Имя&lt;/th&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;th&gt;Фамилия&lt;/th&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;th&gt;Email&lt;/th&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;th&gt;Телефон&lt;/th&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;th&gt;Дата&nbsp;регистрации&lt;/th&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;th&gt;Город&lt;/th&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/tr&gt;&#8221;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;($row&nbsp;=&nbsp;$result_vegans-&gt;fetch_assoc())&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$output["vegans"]&nbsp;.=&nbsp;&#8221;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&#8221;&nbsp;.&nbsp;$row["id_vegan"]&nbsp;.&nbsp;&#8221;&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&#8221;&nbsp;.&nbsp;$row["first_name"]&nbsp;.&nbsp;&#8221;&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&#8221;&nbsp;.&nbsp;$row["last_name"]&nbsp;.&nbsp;&#8221;&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&#8221;&nbsp;.&nbsp;$row["email"]&nbsp;.&nbsp;&#8221;&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&#8221;&nbsp;.&nbsp;$row["phone_number"]&nbsp;.&nbsp;&#8221;&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&#8221;&nbsp;.&nbsp;$row["registration_date"]&nbsp;.&nbsp;&#8221;&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&#8221;&nbsp;.&nbsp;$row["city"]&nbsp;.&nbsp;&#8221;&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/tr&gt;&#8221;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
//&nbsp;Вывод&nbsp;таблицы&nbsp;овощей<br />
$sql_vegetables&nbsp;=&nbsp;&#8221;SELECT&nbsp;*&nbsp;FROM&nbsp;vegetables&#8221;;<br />
$result_vegetables&nbsp;=&nbsp;$conn-&gt;query($sql_vegetables);<br />
$output["vegetables"]&nbsp;=&nbsp;&#8221;";<br />
if&nbsp;($result_vegetables-&gt;num_rows&nbsp;&gt;&nbsp;0)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;$output["vegetables"]&nbsp;.=&#8221;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;th&gt;ID&lt;/th&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;th&gt;Название&lt;/th&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;th&gt;Сорт&lt;/th&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;th&gt;Цена&nbsp;за&nbsp;кг&lt;/th&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;th&gt;Количество&nbsp;на&nbsp;складе&lt;/th&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;th&gt;Дата&nbsp;добавления&lt;/th&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;th&gt;Страна&nbsp;происхождения&lt;/th&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/tr&gt;&#8221;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;($row&nbsp;=&nbsp;$result_vegetables-&gt;fetch_assoc())&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$output["vegetables"]&nbsp;.=&nbsp;&#8221;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&#8221;&nbsp;.&nbsp;$row["id_vegetable"]&nbsp;.&nbsp;&#8221;&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&#8221;&nbsp;.&nbsp;$row["name"]&nbsp;.&nbsp;&#8221;&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&#8221;&nbsp;.&nbsp;$row["variety"]&nbsp;.&nbsp;&#8221;&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&#8221;&nbsp;.&nbsp;$row["price_per_kg"]&nbsp;.&nbsp;&#8221;&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&#8221;&nbsp;.&nbsp;$row["stock_quantity"]&nbsp;.&nbsp;&#8221;&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&#8221;&nbsp;.&nbsp;$row["date_added"]&nbsp;.&nbsp;&#8221;&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&#8221;&nbsp;.&nbsp;$row["country_origin"]&nbsp;.&nbsp;&#8221;&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/tr&gt;&#8221;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
$conn-&gt;close();<br />
echo&nbsp;json_encode($output);<br />
?&gt;</p>
<p style="background: white;"><span style="color: #212529;"><strong>6. Обновление данных на главной странице:</strong><br />
</span></p>
<ul>
<li>
<div style="background: white;"><span style="color: #212529;">После успешного сохранения в <span style="color: #e83e8c;">interactive.php<span style="color: #212529;"> вызывается скрипт обновления таблиц на главной странице<img src="https://web.snauka.ru/wp-content/uploads/2025/01/012925_1514_9.png" alt="" /><br />
</span></span></span></div>
</li>
</ul>
<p style="background: white;"><span style="color: #212529;"><strong>7. Использование Ajax:</strong><br />
</span></p>
<ul>
<li>
<div style="background: white;"><span style="color: #212529;">Ajax позволяет отправлять данные на сервер и получать ответ без перезагрузки страницы. Это создаёт ощущение динамичности и интерактивности интерфейса.<br />
</span></div>
</li>
</ul>
<p style="background: white;"><span style="color: #212529;"><strong>Заключение<br />
</strong></span></p>
<p style="background: white;"><span style="color: #212529;">В этой статье мы продемонстрировали, как создать интерактивный интерфейс для редактирования данных с использованием AJAX, PHP и MySQL на хостинге Hostland. Вы можете использовать этот пример в качестве отправной точки для разработки более сложных веб-приложений и административных панелей. Главное — это комбинировать знания в области баз данных, серверного и клиентского программирования для достижения желаемого результата.</span></p>
]]></content:encoded>
			<wfw:commentRss>https://web.snauka.ru/issues/2025/01/103014/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Интерактивное изменение данных с помощью Ajax</title>
		<link>https://web.snauka.ru/issues/2025/11/103862</link>
		<comments>https://web.snauka.ru/issues/2025/11/103862#comments</comments>
		<pubDate>Sat, 01 Nov 2025 13:03:10 +0000</pubDate>
		<dc:creator>Шаяхметов Марк Назарович</dc:creator>
				<category><![CDATA[05.00.00 ТЕХНИЧЕСКИЕ НАУКИ]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[интерактивное изменение данных]]></category>

		<guid isPermaLink="false">https://web.snauka.ru/issues/2025/11/103862</guid>
		<description><![CDATA[Научный руководитель: Вильданов Алмаз Нафкатович к.ф.-м.н., Уфимский университет науки и технологий, Нефтекамский филиал Введение Современные веб-приложения требуют высокой интерактивности и отзывчивости интерфейсов. Одной из ключевых технологий, обеспечивающих бесшовное взаимодействие пользователя с приложением, является Ajax (Asynchronous JavaScript and XML). В рамках данной лабораторной работы мы реализуем систему интерактивного редактирования табличных данных. Цели работы - Освоить принципы работы Ajax [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><em>Научный руководитель: Вильданов Алмаз Нафкатович<br />
к.ф.-м.н., Уфимский университет науки и технологий, Нефтекамский филиал</em></p>
<p><strong>Введение</strong></p>
<p>Современные веб-приложения требуют высокой интерактивности и отзывчивости интерфейсов. Одной из ключевых технологий, обеспечивающих бесшовное взаимодействие пользователя с приложением, является Ajax (Asynchronous JavaScript and XML). В рамках данной лабораторной работы мы реализуем систему интерактивного редактирования табличных данных.</p>
<p><strong>Цели работы</strong></p>
<p>- Освоить принципы работы Ajax</p>
<p>- Реализовать интерактивное редактирование табличных данных</p>
<p>- Обеспечить безопасность при работе с базой данных</p>
<p>- Создать пользовательский интерфейс с мгновенным откликом</p>
<p><strong>Архитектура решения</strong></p>
<p><em>Технологический стек</em></p>
<p>- **Frontend:** HTML5, CSS3, JavaScript (jQuery)</p>
<p>- **Backend:** PHP 7.4+</p>
<p>- **База данных:** MySQL 5.7+</p>
<p>- **Протокол:** HTTP/HTTPS</p>
<p><em>Компоненты системы</em></p>
<p>1. **Клиентская часть** &#8211; интерактивная таблица с возможностью редактирования</p>
<p>2. **Серверная часть** &#8211; PHP-скрипты для обработки запросов</p>
<p>3. **База данных** &#8211; хранение и управление данными</p>
<p><strong>Практическая реализация</strong></p>
<p>1. Подготовка базы данных</p>
<p>&#8220;`sql</p>
<p>CREATE TABLE students (</p>
<p style="padding-left: 30px;">id INT PRIMARY KEY AUTO_INCREMENT,</p>
<p style="padding-left: 30px;">first_name VARCHAR(50) NOT NULL,</p>
<p style="padding-left: 30px;">last_name VARCHAR(50) NOT NULL,</p>
<p style="padding-left: 30px;">age INT,</p>
<p style="padding-left: 30px;">group_name VARCHAR(20),</p>
<p style="padding-left: 30px;">email VARCHAR(100)</p>
<p>);</p>
<p>&nbsp;</p>
<p>INSERT INTO students (first_name, last_name, age, group_name, email) VALUES</p>
<p>(&#8216;Иван&#8217;, &#8216;Иванов&#8217;, 20, &#8216;ИТ-101&#8242;, &#8216;ivan@mail.ru&#8217;),</p>
<p>(&#8216;Петр&#8217;, &#8216;Петров&#8217;, 21, &#8216;ИТ-102&#8242;, &#8216;petr@mail.ru&#8217;),</p>
<p>(&#8216;Мария&#8217;, &#8216;Сидорова&#8217;, 19, &#8216;ИТ-101&#8242;, &#8216;maria@mail.ru&#8217;);</p>
<p>&#8220;`</p>
<p>&nbsp;</p>
<p>2. Структура HTML-документа</p>
<p>&nbsp;</p>
<p>&#8220;`html</p>
<p>&lt;!DOCTYPE html&gt;</p>
<p>&lt;html lang=&#8221;ru&#8221;&gt;</p>
<p>&lt;head&gt;</p>
<p style="padding-left: 30px;">&lt;meta charset=&#8221;UTF-8&#8243;&gt;</p>
<p style="padding-left: 30px;">&lt;title&gt;Ajax Table Editing&lt;/title&gt;</p>
<p style="padding-left: 30px;">&lt;script src=&#8221;https://code.jquery.com/jquery-3.6.0.min.js&#8221;&gt;&lt;/script&gt;</p>
<p style="padding-left: 30px;">&lt;style&gt;</p>
<p style="padding-left: 60px;">.dynamic { cursor: pointer; background-color: f0f8ff; }</p>
<p style="padding-left: 60px;">.dynamic:hover { background-color: e0f0ff; }</p>
<p style="padding-left: 60px;">.editing { background-color: fffacd; }</p>
<p style="padding-left: 60px;">input.dynamic-input { width: 100%; border: 1px solid 007bff; padding: 2px; }</p>
<p style="padding-left: 30px;">&lt;/style&gt;</p>
<p>&lt;/head&gt;</p>
<p>&lt;body&gt;</p>
<p style="padding-left: 30px;">&lt;div id=&#8221;table-container&#8221;&gt;&lt;/div&gt;</p>
<p style="padding-left: 30px;">&lt;script src=&#8221;script.js&#8221;&gt;&lt;/script&gt;</p>
<p>&lt;/body&gt;</p>
<p>&lt;/html&gt;</p>
<p>&#8220;`</p>
<p>&nbsp;</p>
<p>3. Подключение к базе данных (connect.php)</p>
<p>&nbsp;</p>
<p>&#8220;`php</p>
<p>&lt;?php</p>
<p>$host = &#8216;localhost&#8217;;</p>
<p>$dbname = &#8216;university&#8217;;</p>
<p>$user = &#8216;username&#8217;;</p>
<p>$pass = &#8216;password&#8217;;</p>
<p>&nbsp;</p>
<p>try {</p>
<p style="padding-left: 30px;">$pdo = new PDO(&#8220;mysql:host=$host;dbname=$dbname;charset=utf8&#8243;, $user, $pass);</p>
<p style="padding-left: 30px;">$pdo-&gt;setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);</p>
<p>} catch(PDOException $e) {</p>
<p style="padding-left: 30px;">die(&#8220;Connection failed: &#8221; . $e-&gt;getMessage());</p>
<p>}</p>
<p>?&gt;</p>
<p>&#8220;`</p>
<p>&nbsp;</p>
<p>4. JavaScript-логика интерактивного редактирования</p>
<p>&nbsp;</p>
<p>Основной функционал реализован в файле `script.js`:</p>
<p>&nbsp;</p>
<p>&#8220;`javascript</p>
<p>$(document).ready(function() {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;loadTable();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;function loadTable() {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$.ajax({</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;url: &#8216;load_table.php&#8217;,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type: &#8216;GET&#8217;,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;success: function(response) {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(&#8216;table-container&#8217;).html(response);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;initDynamicCells();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;function initDynamicCells() {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(&#8216;.dynamic&#8217;).off(&#8216;click&#8217;).on(&#8216;click&#8217;, function() {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var $cell = $(this);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var currentValue = $cell.text().trim();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var field = $cell.data(&#8216;field&#8217;);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var id = $cell.data(&#8216;id&#8217;);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var table = $cell.data(&#8216;table&#8217;);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var $input = $(&#8216;&lt;input&gt;&#8217;, {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type: &#8216;text&#8217;,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value: currentValue,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class: &#8216;dynamic-input&#8217;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$cell.html($input).addClass(&#8216;editing&#8217;);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$input.focus();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$input.off(&#8216;blur keypress&#8217;).on(&#8216;blur keypress&#8217;, function(e) {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (e.type === &#8216;blur&#8217; || (e.type === &#8216;keypress&#8217; &amp;&amp; e.which === 13)) {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var newValue = $input.val().trim();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (newValue !== currentValue) {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;saveData(id, field, newValue, table, $cell);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$cell.text(currentValue).removeClass(&#8216;editing&#8217;);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;function saveData(id, field, value, table, $cell) {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$.ajax({</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;url: &#8216;itable_save.php&#8217;,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type: &#8216;POST&#8217;,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data: {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id: id,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;field: field,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value: value,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;table: table</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;success: function(response) {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (response.success) {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$cell.text(value).removeClass(&#8216;editing&#8217;);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;showMessage(&#8216;Данные успешно сохранены!&#8217;, &#8216;success&#8217;);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;showMessage(&#8216;Ошибка сохранения: &#8216; + response.error, &#8216;error&#8217;);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;error: function() {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;showMessage(&#8216;Ошибка соединения с сервером&#8217;, &#8216;error&#8217;);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>});</p>
<p>&#8220;`</p>
<p>&nbsp;</p>
<p>5. Генерация таблицы (load_table.php)</p>
<p>&nbsp;</p>
<p>&#8220;`php</p>
<p>&lt;?php</p>
<p>include &#8216;connect.php&#8217;;</p>
<p>&nbsp;</p>
<p>$stmt = $pdo-&gt;query(&#8220;SELECT * FROM students ORDER BY id&#8221;);</p>
<p>$students = $stmt-&gt;fetchAll(PDO::FETCH_ASSOC);</p>
<p>?&gt;</p>
<p>&nbsp;</p>
<p>&lt;table border=&#8221;1&#8243; id=&#8221;dynamic-table&#8221;&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&lt;thead&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;th&gt;ID&lt;/th&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;th&gt;Имя&lt;/th&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;th&gt;Фамилия&lt;/th&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;th&gt;Возраст&lt;/th&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;th&gt;Группа&lt;/th&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;th&gt;Email&lt;/th&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/tr&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/thead&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&lt;tbody&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;?php foreach($students as $student): ?&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&lt;?= htmlspecialchars($student['id']) ?&gt;&lt;/td&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td data-id=&#8221;&lt;?= $student['id'] ?&gt;&#8221;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data-field=&#8221;first_name&#8221; data-table=&#8221;students&#8221;&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;?= htmlspecialchars($student['first_name']) ?&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/td&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td data-id=&#8221;&lt;?= $student['id'] ?&gt;&#8221;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data-field=&#8221;last_name&#8221; data-table=&#8221;students&#8221;&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;?= htmlspecialchars($student['last_name']) ?&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/td&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td data-id=&#8221;&lt;?= $student['id'] ?&gt;&#8221;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data-field=&#8221;age&#8221; data-table=&#8221;students&#8221;&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;?= htmlspecialchars($student['age']) ?&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/td&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td data-id=&#8221;&lt;?= $student['id'] ?&gt;&#8221;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data-field=&#8221;group_name&#8221; data-table=&#8221;students&#8221;&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;?= htmlspecialchars($student['group_name']) ?&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/td&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td data-id=&#8221;&lt;?= $student['id'] ?&gt;&#8221;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data-field=&#8221;email&#8221; data-table=&#8221;students&#8221;&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;?= htmlspecialchars($student['email']) ?&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/td&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/tr&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;?php endforeach; ?&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/tbody&gt;</p>
<p>&lt;/table&gt;</p>
<p>&#8220;`</p>
<p>&nbsp;</p>
<p>6. Обработчик сохранения данных (itable_save.php)</p>
<p>&nbsp;</p>
<p>&#8220;`php</p>
<p>&lt;?php</p>
<p>header(&#8216;Content-Type: application/json&#8217;);</p>
<p>include &#8216;connect.php&#8217;;</p>
<p>&nbsp;</p>
<p>$id = $_POST['id'] ?? null;</p>
<p>$field = $_POST['field'] ?? null;</p>
<p>$value = $_POST['value'] ?? null;</p>
<p>$table = $_POST['table'] ?? null;</p>
<p>&nbsp;</p>
<p>// Валидация и безопасность</p>
<p>$allowed_tables = ['students', 'teachers'];</p>
<p>$allowed_fields = ['first_name', 'last_name', 'age', 'group_name', 'email'];</p>
<p>&nbsp;</p>
<p>if (!$id || !$field || !$table ||</p>
<p style="padding-left: 30px;">!in_array($table, $allowed_tables) ||</p>
<p style="padding-left: 30px;">!in_array($field, $allowed_fields)) {</p>
<p style="padding-left: 30px;">echo json_encode(['success' =&gt; false, 'error' =&gt; 'Неверные параметры']);</p>
<p style="padding-left: 30px;">exit;</p>
<p>}</p>
<p>&nbsp;</p>
<p>try {</p>
<p style="padding-left: 30px;">$sql = &#8220;UPDATE $table SET $field = :value WHERE id = :id&#8221;;</p>
<p style="padding-left: 30px;">$stmt = $pdo-&gt;prepare($sql);</p>
<p style="padding-left: 30px;">$stmt-&gt;execute([':value' =&gt; $value, ':id' =&gt; $id]);</p>
<p style="padding-left: 30px;">echo json_encode(['success' =&gt; $stmt-&gt;rowCount() &gt; 0]);</p>
<p>} catch(PDOException $e) {</p>
<p style="padding-left: 30px;">echo json_encode(['success' =&gt; false, 'error' =&gt; $e-&gt;getMessage()]);</p>
<p>}</p>
<p>?&gt;</p>
<p>&#8220;`</p>
<p>&nbsp;</p>
<p><strong>Меры безопасности</strong></p>
<p>1. Защита от SQL-инъекций</p>
<p>Использование подготовленных запросов (prepared statements) полностью исключает возможность SQL-инъекций:</p>
<p>&nbsp;</p>
<p>&#8220;`php</p>
<p>$sql = &#8220;UPDATE $table SET $field = :value WHERE id = :id&#8221;;</p>
<p>$stmt = $pdo-&gt;prepare($sql);</p>
<p>$stmt-&gt;execute([':value' =&gt; $value, ':id' =&gt; $id]);</p>
<p>&#8220;`</p>
<p>&nbsp;</p>
<p>2. Валидация входных данных</p>
<p>&nbsp;</p>
<p>Ограничение допустимых таблиц и полей через белые списки:</p>
<p>&nbsp;</p>
<p>&#8220;`php</p>
<p>$allowed_tables = ['students', 'teachers'];</p>
<p>$allowed_fields = ['first_name', 'last_name', 'age', 'group_name', 'email'];</p>
<p>&#8220;`</p>
<p>&nbsp;</p>
<p>3. Экранирование вывода</p>
<p>Предотвращение XSS-атак через `htmlspecialchars()`:</p>
<p>&#8220;`php</p>
<p>&lt;?= htmlspecialchars($student['first_name']) ?&gt;</p>
<p>&#8220;`</p>
<p>&nbsp;</p>
<p><strong>Пользовательский опыт</strong></p>
<p><em>Визуальные индикаторы</em></p>
<p>- **Обычное состояние:** Светло-голубой фон ячеек</p>
<p>- **Ховер-эффект:** Усиление цвета при наведении</p>
<p>- **Режим редактирования:** Желтый фон с полем ввода</p>
<p>- **Уведомления:** Всплывающие сообщения о статусе операций</p>
<p><em>Удобство использования</em></p>
<p>- Редактирование по клику</p>
<p>- Сохранение при потере фокуса или нажатии Enter</p>
<p>- Визуальная обратная связь</p>
<p>- Отмена редактирования при нажатии Escape</p>
<p><strong>Тестирование функциональности</strong></p>
<p><em>Сценарии тестирования</em></p>
<p>1. **Редактирование текстовых полей**</p>
<p>- Ввод корректных данных</p>
<p>- Ввод специальных символов</p>
<p>- Пустые значения</p>
<p>&nbsp;</p>
<p>2. **Обработка ошибок**</p>
<p>- Потеря соединения</p>
<p>- Неверные параметры запроса</p>
<p>- Ошибки базы данных</p>
<p>&nbsp;</p>
<p>3. **Производительность**</p>
<p>- Время отклика сервера</p>
<p>- Плавность интерфейса</p>
<p>- Обработка одновременных запросов</p>
<p>&nbsp;</p>
<p><strong>Расширение функциональности</strong></p>
<p><em>Возможные улучшения</em></p>
<p>1. **Валидация данных на стороне клиента**</p>
<p>&#8220;`javascript</p>
<p>function validateField(field, value) {</p>
<p style="padding-left: 30px;">const validators = {</p>
<p style="padding-left: 60px;">&#8216;email&#8217;: /^[^\s@]+@[^\s@]+\.[^\s@]+$/,</p>
<p style="padding-left: 60px;">&#8216;age&#8217;: /^\d+$/,</p>
<p style="padding-left: 60px;">&#8216;first_name&#8217;: /^[A-Za-zА-Яа-я\s]+$/</p>
<p style="padding-left: 30px;">};</p>
<p style="padding-left: 30px;">return !validators[field] || validators[field].test(value);</p>
<p>}</p>
<p>&#8220;`</p>
<p>&nbsp;</p>
<p>2. **История изменений**</p>
<p>&#8220;`sql</p>
<p>CREATE TABLE change_log (</p>
<p style="padding-left: 30px;">id INT PRIMARY KEY AUTO_INCREMENT,</p>
<p style="padding-left: 30px;">table_name VARCHAR(50),</p>
<p style="padding-left: 30px;">record_id INT,</p>
<p style="padding-left: 30px;">field_name VARCHAR(50),</p>
<p style="padding-left: 30px;">old_value TEXT,</p>
<p style="padding-left: 30px;">new_value TEXT,</p>
<p style="padding-left: 30px;">changed_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,</p>
<p style="padding-left: 30px;">changed_by VARCHAR(100)</p>
<p>);</p>
<p>&#8220;`</p>
<p>&nbsp;</p>
<p>3. **Конфликт параллельного редактирования**</p>
<p>&#8220;`php</p>
<p>// Проверка версии записи</p>
<p>$current_version = get_record_version($id);</p>
<p>if ($current_version != $_POST['version']) {</p>
<p style="padding-left: 30px;">echo json_encode(['success' =&gt; false, 'error' =&gt; 'Запись была изменена']);</p>
<p>}</p>
<p>&#8220;`</p>
<p>&nbsp;</p>
<p><strong>Заключение</strong></p>
<p>В ходе лабораторной работы была успешно реализована система интерактивного редактирования табличных данных с использованием технологии Ajax. Основные достижения:</p>
<p>1. **Интерактивность:** Пользователи могут редактировать данные непосредственно в таблице</p>
<p>2. **Производительность:** Отсутствие перезагрузки страницы экономит время</p>
<p>3. **Безопасность:** Реализованы меры защиты от основных уязвимостей</p>
<p>4. **Удобство:** Интуитивно понятный интерфейс с обратной связью</p>
<p><strong>Практическая значимость</strong></p>
<p>Разработанное решение может быть использовано в различных веб-приложениях:</p>
<p>- Системы управления контентом (CMS)</p>
<p>- Административные панели</p>
<p>- Системы учета и отчетности</p>
<p>- Образовательные платформы</p>
<p><strong> Перспективы развития</strong></p>
<p>Для промышленного использования систему можно дополнить:</p>
<p>- Ролевой моделью доступа</p>
<p>- Расширенной валидацией данных</p>
<p>- Системой уведомлений</p>
<p>- Поддержкой различных типов полей (выпадающие списки, даты)</p>
]]></content:encoded>
			<wfw:commentRss>https://web.snauka.ru/issues/2025/11/103862/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
