В предыдущем примере для получения информации из базы данных применялся запрос типа GET. Выполнять такие запросы достаточно просто, потому что идентификационный номер клиента просто добавляется
к URL в конец строки запроса и в таком виде отправляется серверу.
Но что делать, если возникает необходимость посылать запрос POST?
Применение скрытых фреймов позволяет сделать и это, хотя в этом случае и приходится приложить некоторые дополнительные усилия.
Обычно запросы типа POST применяются для передачи некоторых данных серверу, в противоположность запросу GET, который служит лишь для того, чтобы запросить данные у сервера. Хотя запросы GET и позволяют передавать дополнительные данные в виде строки запроса,
но некоторые броузеры могут обрабатывать строки запроса длиной не более 512 Кбайт. Запросы типа POST позволяют передавать информацию объемом до 2 Гбайт, чего с лихвой хватит практически на всеслучаи жизни.
Традиционно запросы POST передавались с помощью форм, атрибуту method которых присвоено значение post. В этом случае данные, содержащиеся в форме, передаются методом POST по URL, указанному в атрибуте action. Положение дел осложняется еще больше тем, что в результате отправки формы происходит автоматический переход к новой странице по указанному URL. Это никак не согласуется с целями, преследуемыми Ajax. К счастью, есть достаточно простой способ обойти это препятствие с помощью малоизвестного атрибута target.
Атрибут target элемента используется аналогично атрибуту target элемента <а/>: он указывает, куда должны быть возвращены результаты
обработки отправленной формы. Установив в атрибуте target адрес скрытого фрейма, вы фактически прикажете главной странице остаться на месте, в то время как результаты обработки отправленной формы будут отображены в другом фрейме или окне (в данном случае в
скрытом фрейме).
Для начала мы определим еще один набор фреймов. Единственное его отличие от предыдущего примера в том, что видимый фрейм содержит форму д л я ввода информации о клиенте:

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

<р>Введите сведения о клиенте;
<р>Имя клиента:
Адрес:
Город:
Область: br />
Почтовый индекс: br />
Телефон: br />
Электронная почта:
input type="submit" value="Сохранить информацию о клиенте" />

Обратите внимание, что в атрибуте target элемента указан адрес,
задаваемый значением "hiddenFrame", поэтому, когда пользователь
щелкнет по кнопке, данные, полученные от сервера в результате обработки
формы, будут переданы в скрытый фрейм.
В этом примере нам понадобится всего одна функция JavaScript на главной
странице: saveResult(). Эта функция будет вызываться, когда
в скрытый фрейм придут результаты обработки формы от сервера:
function saveResult(sMessage){
var divStatus = document. getElementById("divStatus");
divStatus.innerHTML = "Запрос выполнен: " + sMessage;
}
Скрытый фрейм будет передавать в эту функцию сообщение, полученное от сервера. Это будет либо подтверждение успешной записи информации в БД, либо сообщение об ошибке, объясняющее, почему информация не может быть сохранена.
Далее рассмотрим серверный сценарий SaveCustomer. php, который обрабатывает полученный запрос POST. Как и в предыдущем примере, этот сценарий оформлен в виде страницы HTML, включающей в себя код РНР и JavaScript. Код РНР выполняет выемку информации из запроса
и сохраняет ее в базе данных. Поскольку передача выполняется запросом POST, все переданные данные будут находиться в массиве $_P0ST:
<?php
$sAddress = $_P0ST["txtAdd ress"];
$sCity = $_POST["txtCity"];
$sState = $_POST["txtState"];
$ZipCode = $_POST["txtZipCode"];
$sPhone = $_POST["txtPhone"];
$sEraail = $_POST["txtEmail"];
$SsStatus ="";
$sDBServer = "your.database.server";
$sDBName = "имя_базы_данных"; "
$sDBUsername = "имя_пользователя_базы_данных";
SsDBPassword = "пароль_пользователя_базы_данных;
$SsSQL="Insert Into Customers(Name, Address,City,State,Zip, Phone, ".
"'E-mail')".
" values CSsName', '$sAddress', 'SsCity', '$sState',".
"'SsZipCode','$sPhone', '$sEmail') ";
// остальной код
?>
Этот фрагмент кода извлекает все сведения о клиенте, описывает переменную,в которой будет храниться сообщение с результатом обработки данных формы ($sStatus), и всю информацию, необходимую для работы
с базой данных (та же самая информация фигурировала в предыдущем примере). Выражение SQL на этот раз представлено оператором INSERT,который записывает всю полученную информацию в базу данных.
Программный код, исполняющий запрос, очень похож на код предыдущего примера:
<?рhp
$sName = $_POST["txtName-'];
$sAddress = $_POST['-txtAddress,-L'
$sCity = $_POST["txtCity- -];
$sState = $_POST["txtState"];
$sZipCode = $_POST["txtZipCode"];
$sPhone = $_POST["txtPhone"];
$sEmail = $_POST['-txtEmail--];
$sStatus = "";
SsDBServer = "your.database.server";
SsDBName = "имя_базы_данных";
$sDBUsername = "имя_пользователя_базы_данных";
SsDBPassword = "пароль_пользователя_базы_данных";
SsSQL = "Insert into Customers(Name,Address,City,State,Zip,Phone, ".
"'E-mail- ) ".
" values CSsName', 'SsAddress', 'SsCity', 'SsState', ".
"'SsZipCode','SsPhone', 'SsEmail') ";
SoLink = mysql_connect(SsOBSe rve r,SsDBUse rname,SsDBPassword);
@mysql_select_db($sDBName) or SsStatus = "Невозможно открыть базу данных";
if(SoResult = mysql_query($sSQL)) {
$sStatus = "Добавлен клиент с идентификатором ".mysql_insert_id();
} else {
$sStatus = "При добавлении нового клиента возникла ошибка.".
"Информация не была записана.";
}
mysql_close($olink);
?>
Здесь по результату работы функции mysql_query() можно судить, насколько успешно была выполнена запись данных в базу. В случае успеха в переменную $sStatus записывается сообщение об успешном завершении
операции с указанием идентификационного номера нового
клиента. Функция mysql_insert_id() всегда возвращает последнее значение автоинкрементного поля, полученное в результате выполнения последнего оператора INSERT. Если по каким-либо причинам исполнение оператора потерпело неудачу, в переменную $sStatus записывается
сообщение об ошибке.
Значение переменной $sStatus выводится в строку вызова функции JavaScript, которая запускается после загрузки страницы в окно:

window,onload = function () {
top.frames["displayFrame"].saveResuit("<?php echo $sStatus ?>");
}

Этот код вызывает функцию saveResult(), описанную в видимом фрейме, и передает ей значение переменной PHP - $sStatus. Эта переменная содержит строку, поэтому необходимо окружить оператор echo языка РНР двойными кавычками. Когда эта функция завершит работу, страница
с формой ввода информации будет выглядеть примерно так,как показано на рис. 2.3 (если исходить из предположения, что запись данных в базу прошла успешно).
Когда этот код завершит работу, вы сможете добавить в базу данных информацию о других клиентах, взяв ту же самую форму ввода, потому что она никуда не исчезнет с экрана.

Откройте для себя игры онлайн rpg, найдется все на Starquake. Ru!. iphone продажа. www.auto.ru