Microsoft Excel

трюкиприёмырешения

Организация учета заявок клиентов при помощи Excel и Интернет-технологий

Передача информации о фирмах с листа Microsoft Excel в базу данных на сервере

Предыдущие наши действия в этой статье были связаны с началом организации сайта. В этой части мы вернемся к Microsoft Excel и VBA и рассмотрим создание рабочей книги, которая фактически будет интегрировать всю рассмотренную выше информацию. Один лист создаваемой книги отведен для списка фирм, другой — для товаров, а еще один — для размещения заказов с сайта. Сформулируем задачи, которые стоят перед нами на ближайшее время:

  • передача названий фирм с соответствующими паролями в базу данных, расположенную на сервере;
  • передача названий товаров на сервер;
  • просмотр информации о заказах.
Рис. 4.13. Лист, содержащий информацию о фирмах

Рис. 4.13. Лист, содержащий информацию о фирмах

Приступим к разработке первого листа, который назовем Фирмы (рис. 4.13). Здесь в трех столбцах размещается информация, которую необходимо перенести с офисного компьютера в базу данных MySQL, являющуюся частью нашего сайта (к ней будут обращаться скрипты на веб-сервере). Для переноса информации из книги Microsoft Excel в базу MySQL на сайте нам придется выполнить следующие действия:

  • данные с листа Фирмы перенести в текстовый файл, представляющий собой совокупность строк (информация из одной ячейки листа Excel преобразуется в одну строку текстового файла);
  • текстовый файл, полученный на предыдущем шаге, необходимо переслать на веб-сервер;
  • запустить скрипт (php файл), который произведет обработку полученного тестового файла и обеспечит перенос информации в базу данных Glava4.

Для выполнения первого шага из перечня выше описанных действий сначала разместим иа листе кнопку Преобразовать в файл. По щелчку на ней будет выполняться процедура (листинг 4.5), осуществляющая необходимое преобразование.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<!-- Листинг 4.2. Файл index.html -->
<html><head>
<title>Стартовая страница сайта</title>
<style type="text/css">
a { text-decoration:none; font-size: 14pt; }
a:hover { text-decoration:underline; color: green; background-color: #CCFFCC; }
</style>
</head>
<body>
<a href="klients.php"> Раздел для клиентов </a>
<br>
<a href="admin.html"> Администрирование </a>
</body>
</html>

Здесь сначала в переменной N подсчитывается количество записей о фирмах на первом листе. Далее производится открытие файла z.txt для последующей записи в него информации. Для этого мы использовали инструкцию Open. Затем с помощью другой инструкции, Print, в цикле записывается необходимая информация в файл, после чего он закрывается.

Теперь необходимо из редактора Visual Basic вернуться в приложение Microsoft Excel, выйти из режима конструктора и щелкнуть на кнопке на листе. В результате на диске С: появился текстовый файл z.txt. Если его теперь открыть в приложении Блокнот, то содержимое файла должно соответствовать имеющейся информации на листе Microsoft Excel (рис. 4.14).

Рис. 4.14. Содержание файла z.txt

Рис. 4.14. Содержание файла z.txt

Часть намеченного плана выполнена, а именно: мы сформировали информацию о фирмах в текстовом файле, который далее необходимо передать на веб-сервер. После этого на сервере следует произвести его обработку — передать информацию в базу данных. Учитывая новизну и некоторую сложность датпюго шага, рассмотрим его в два этапа. Сначала приведем скрипт, обеспечивающий передачу файла на веб-сервер.

Вернемся к листингу 4.4 и рис. 4.12. По первой гиперссылке в окне, представленном на рис. 4.12, производится загрузка с веб-сервера страницы perevod_firm.html. Эта страница представлена иа рис. 4.15, где от пользователя с помощью кнопки Обзор требуется выбрать необходимый файл для отправки иа сервер. В данном случае это только что заполненный необходимой информацией файл z.txt. Текст файла perevod_firm.html представлен в листинге 4.6.

1
2
3
4
5
6
7
8
9
10
11
12
13
<!-- Листинг 4.3. Файл admin.html -->
<html>
<head>
<title>Авторизация</title>
</head>
<body>
<form action="obr.php" method="post">
Логин: <input type="text" name="n1"><br><br>
Пароль: <input type="password" name="n2"><br><br>
<input name="n3" type="submit" value="OK">
</form>
</body>
</html>
Рис. 4.15. Форма для выбора файла, отправляемого на сервер

Рис. 4.15. Форма для выбора файла, отправляемого на сервер

В параметре action формы указано, что обработка на сервере должна производиться скриптом upload.php, который приведен в листинге 4.7. На рис. 4.16 показан результат выполнения данного скрипта в случае, если при передаче не произошло ошибок.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<!-- Листинг 4.4. Содержание скрипта obr.php -->
<html>
<head>
<title>Проверка пароля и логина</title>
<style type="text/css">
a {text-decoration:none; font-size:14pt;}
a:hover {text-decoration:underline; color:green; background-color: #CCFFCC; }
</style>
</head>
<body>
<?php
if ( isset($_POST["n3"]))
if ($_POST['n1'] == "Nice" && $_POST['n2'] == "357")
{echo "Авторизация прошла успешно!!!";
    echo "<br><a href='perevod_firm.html'>Перевод информации о фирмах в базу данных</a>";
    echo "<br><a href='perevod_tov.html'>Перевод информации о товарах в базу данных</a>";
    echo "<br><a href='zakazi.php'>Информация о заказах</a>";}
else
	{die('Неверный пароль <br><a href="index.html"><br>
    	Вернуться на стартовую страницу</a>'); }
       }
    else
    {echo '<a href="index.html">Вернуться на главную страницу</a>';}
   ?>
</body>
</html>
Рис. 4.16. Результат переноса файла на сервер

Рис. 4.16. Результат переноса файла на сервер

Таким образом, мы разобрали технологию передачи текстового файла z.txt на веб-сервер. Следующая задача заключается в усложнении скрипта, приведенного в листинге 4.7, в плане функциональности работы с базой данных. Для этого нам предварительно потребуется разработать вспомогательную программу, которая будет осуществлять подключение к базе данных.

Подключение к базе данных MySQL — это одно из первых действий, которое необходимо выполнить при работе с данной системой управления базой данных. Для этого используется функция MySQL_connect($sqlhost/$sqluser/$sqlpass), где $sqlhost — имя хоста (чаще всего указывается localhost, т. к. обычно MySQL и PHP-скрипт находятся на одном сервере); $sqluser — имя пользователя, под которым будет осуществляться подключение к серверу; $sqlpass — пароль пользователя.

Если подключение к базе данных с использованием функции MySQL_connect не удалось, то она вернет FALSE. Для корректности работы в этом случае функция MySQL_connect используется в связке с функцией die, которая позволяет завершить работу скрипта с выводом сообщения об ошибке: MySQL_connect($sqlhost/$sqluser/$sqlpass) or die("MySQL не доступен! ".MySQL_error()). После подключения к MySQL необходимо выбрать базу данных, с которой будет производиться работа, для чего предназначена следующая функция: MySQL_select_db($db), где $db — имя базы данных. Если MySQL_select_db будет выполнена успешно, то данная функция вернет TRUE (в противном случае FALSE). Для MySQL_select_db также используют защиту с помощью функции die. В листинге 4.8 приведен скрипт, который нам потребуется для подключения к базе данных.

Для системы Денвер имя хоста должно быть localhost, а имя пользователя — root.

1
2
3
4
5
6
7
8
9
<!-- Листинг 4.8. Скрипт connect.php, выполняющий подключение к базе данных -->
&lt;?php
$sqlhost="localhost";
$sqluser="root";
$sqlpass="";
$db="Glava4";
MySQL_connect(sqlhost,sqluser,sqlpass) or die("MySQL не доступен!" ".MySQL_error());
MySQL_select_db($db) or die("Нет соединения с базой данных" .MySQL_error());
?&gt;

Теперь, когда подготовительная работа завершена и вспомогательный скрипт готов, перейдем к необходимым дополнениям в скрипте upload.php (см. листинг 4.7). Модернизированный вариант файла, который будет обрабатывать форму perevod_firm.html, представлен в листинге 4.9.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<!-- Листинг 4.9. Модернизация файла upload.php -->
<html><head>
<title>Копирование информации о фирмах в базу данных</title>
</head>
<body>
<?php
if (copy($_FILES["filename"]["tmp_name"],$_FILES["filename"]["name"]))
	{
	echo "<h1>Файл перенесен на сервер</h1>";
    require_once('connect.php');
    $f=fopen("z.txt","rt") or die("He могу открыть файл");
	while (!feof($f))
    {
    	$data1=fgets($f); // код
    	$data2=fgets($f); // название
    	$data3=fgets($f); // пароль
        if ($data1 <> "")
        { $sql="INSERT INTO Organization SET
        id=".$data1.","name='".$data2."',
        pass='".$data3."'";
        MySQL_query($sql) or die(MySQL_error());
        echo "Информация введена в базу данных<br>"; }
	}
	fclose($f);
	}
?>
</body>
</html>

В строке require_once('connect.php'); используется новая функция, которая предназначена для подключения модуля (файла), имя которого передается в качестве параметра и должно быть заключено в кавычки. В качестве модуля может выступать как программа на РНР, так и HTML-файл. Таким образом, мы обеспечиваем подключение к ранее созданной нами базе данных.

Рис. 4.17. Результат переноса информации из файла в базу данных

Рис. 4.17. Результат переноса информации из файла в базу данных

После передачи файла на сервер он открывается для чтения: $f=fopen("z.txt","rt") or die("He могу открыть файл"). Далее с помощью трех обращений к файлу с использованием функции fgets из него извлекается группа данных. Эта группа данных представляет информацию (код, название и пароль) по одной организации. Далее с помощью SQL-запроса производится вставка записей в таблицу Organization: $sql="INSERT INTO Organization SET id=".$datal.",name=1".$data2."', pass='".$data3."*". В этой конструкции используется запрос INSERT, в котором в качестве параметров указаны:

  • название таблицы Organization;
  • значение для поля id (соответствует первой записи в группе данных);
  • значение для поля name (соответствует второй записи в группе данных);
  • значение для поля pass (третья запись в группе данных).

На рис. 4.17 отображен результат работы скрипта upload.php. Теперь, если вернуться к работе с утилитой phpMyAdmin, то мы увидим перенесенные данные с листа Microsoft Excel (рис. 4.18). Таким образом, поставленная задача о переносе информации по фирмам в базу данных решена. Далее требуется выполнить аналогичное действие с перечнем товаров.

Рис. 4.18. Внесенные сведения об организациях

Рис. 4.18. Внесенные сведения об организациях

Передача информации о номенклатуре на сервер

В этой части мы разберем технические действия, которые необходимо реализовать для функциональности второй гиперссылки в окне на рис. 4.12, которая связана с переносом информации о товарах из книги Microsoft Excel в таблицу Tovari. В книге Microsoft Excel для номенклатуры отведен лист под соответствующим названием (рис. 4.19). Здесь информация сосредоточена в двух столбцах Код и Название. В листинге 4.10 приведена процедура обработки щелчка на кнопке Преобразовать в файл. В результате ее выполнения мы получаем файл zz.txt, структура которого представляет последовательность пар — код и название товара.

Рис. 4.19. Содержание листа Номенклатура

Рис. 4.19. Содержание листа Номенклатура

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
' Листинг 4.10. Обработка щелчка на кнопке на листе Номенклатура
Private Sub CommanButton1_Click()
N = 0
While Worksheets("Номенклатура").Cells(N + 2, 1).Value <> ""
    N = N + 1
Wend
Open "Czz.txt" For Output As #1
    For i = 1 To N
    For j = 1 To 2
        a = Worksheets("Номенклатура").Cells(i + 1, j).Value
        Print #1, a
    Next
Next
Close #1
End Sub

После фрагмента на VBA опять вернемся к веб-программированию. Для гиперссылки Перевод информации о товарах в базу данных (см. рис. 4.12) необходимо разработать форму для выбора необходимого файла zz.txt. Данная форма (рис. 4.20) реализуется с помощью HTML-файла, представленного в листинге 4.11.

1
2
3
4
5
6
7
8
9
10
<!-- Листинг 4.11. Форма выбора файла с информацией о номенклатуре -->
<html><head>
<title>Отправка на сайт информации о номенклатуре</title>
</head><body>
<h1>Отправка на сайт файла с информацией о номенклатуре</h1>
<form action="upload2.php" method="post" enctype="multipart/form-data">
Имя файла:<input type="file" name="filename" size="40"><br><br>
<input type="submit" value="Загрузить"><br>
</form>
</body></html>
Рис. 4.20. Форма для выбора файла с номенклатурой

Рис. 4.20. Форма для выбора файла с номенклатурой

В листинге 4.11 в параметре action формы указано, что обработка данных на сервере должна производиться скриптом upload2.php (листинг 4.12). Данный скрнпт аналогичен программе, представленной в листинге 4.9, поэтому какого-либо комментария здесь не требуется.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<!-- Листинг 4.12. Скрипт upload2.php -->
<html><head>
<title>Отправка информации о товарах на сервер</title>
</head>
<body>
<?php
if	(copy($_FILES["filename"]["tmp_name"],$_FILES["filename"]["name"]))
{
echo "<h1>Файл перенесен на сервер</h1>";
require_once('connect.php');
$f=fopen("zz.txt","rt") or die("He могу открыть файл");
while (!feof($f))
{
$data1=fgets($f); // код
$data2=fgets($f); // Название
if ($data1 <> "")
{$sql="INSERT INTO Tovari SET id=".$data1.",naz='".$data2."'";
	MySQL_query($sql) or die(MySQL_error());
echo "Информация введена в базу данных<br>"; }
}
fclose($f);
}
?>
</body></html>

Ha pиc. 4.21 показал успешный результат передачи сведений о товарах.

Рис. 4.21. Результат передачи информации о товарах

Рис. 4.21. Результат передачи информации о товарах

1 2 3 4 5 6 7 8

Top