На мой взгляд, причин неудачи может быть несколько.
Первое, самое элементарное: правильная кодировка (у вас всюду
UTF8 ?) и лишние слэши (о них см. пример ниже).
Далее вспоминаем, что глобальный
php-массив
$_REQUEST объединяет в себе массивы
$_GET,
$_POST и
$_COOKIE. Нам нужно что-то одно. Если отправляем данные из формы, тогда, очевидно, используется метод
POST, и будем работать с массивом
$_POST.
В помощь вам, приведу два рабочих примера решения этой задачи из кода
web-ресурсов нашей кафедры.
Пример 1. Отправка почты (обратная связь) со страницы сайта. Нажмите на маленький синий глобус, который вращается в правом нижнем углу на вашем экране. Появится форма обратной связи. Данные из формы уйдут на сервер
POST-запросом, но не напрямую, а через обработчик события на кнопке "Отправить сообщение".
Разметка для формы (обратите внимание:
onsubmit="return false" - отключаем стандартную реакцию браузера)
- Код: выделить все
<form id="_footer_form_to_post" name="_footer_form_to_post" onsubmit="return false" >
<center><div id="_footer_form_posted" align="center"></div></center>
<div id="_footer_anything">Обратная связь - пишите пожалуйста</div>
<table id="_footer_callback_tab" cellpadding="0" cellspacing="3">
<tr id="_footer_tr1"><td id="_footer_tr11" valign="top"><strong id="_footer_text_0">Тема сообщения:</strong></td>
<td id="_footer_tr12"><select name="_footer_topic" id="_footer_topic" class="_footer_input_form">
<option class="_footer_option" value="Не выбрана" selected>- Выберите тему сообщения ...</option>
<option class="_footer_option" value="Нашел ошибку!">- Нашел ошибку!</option>
<option class="_footer_option" value="Предлагаю ...">- Предлагаю ...</option>
<option class="_footer_option" value="Желаю ...">- Желаю ...</option>
<option class="_footer_option" value="Помогите ...">- Помогите ...</option>
<option class="_footer_option" value="Привет!">- Привет!</option>
<option class="_footer_option" value="А вы кто?">- А вы кто?</option>
<option class="_footer_option" value="Разное">- Разное</option>
</select></td>
</tr>
<tr id="_footer_tr2">
<td id="_footer_tr21" valign="top"><strong id="_footer_text_1" class="ftopic">Ваше сообщение<br>для администрации web-ресурсов кафедры КССТ:</strong></td>
<td id="_footer_tr22"><textarea id="_footer_textarea" name="_footer_textarea" class="_footer_input_form" rows="5">Введите текст ...</textarea></td>
</tr>
<tr id="_footer_tr3"><td id="_footer_tr31" valign="top"><strong id="_footer_text_2">Ваше имя или ник:</strong></td>
<td id="_footer_tr32"><input type="text" required="true" name="_footer_name" id="_footer_name" class="_footer_input_form" placeholder="Имя, ник или что-нибудь еще ..."/></td>
</tr>
<tr id="_footer_tr4">
<td id="_footer_tr41" valign="top"><strong id="_footer_text_3">Ваш e-mail:</strong></td>
<td id="_footer_tr42"><input type="text" name="_footer_email" id="_footer_email" class="_footer_input_form" placeholder="Укажите e-mail, чтобы получить ответ."/></td>
</tr>
</table>
<center>
<input id="_footer_form_submit" class="_footer_btn_form" type="submit" value="Отправить сообщение">
<input id="_footer_form_refresh" class="_footer_btn_form" type="button" value="Очистить"/>
<input id="_footer_form_close" class="_footer_btn_form" type="button" value="Закрыть"/>
</center>
</form>
Обработчик события на кнопке "Отправить сообщение" (
JavaScript-код)
- Код: выделить все
.....................
dojo.connect( dojo.byId("_footer_form_submit"), "onmouseup", null, mail_to); // цепляем обработчик события
.......................
// сам обработчик события
var mail_to = function() {
if( document._footer_form_to_post._footer_name.value.length == 0 ) {
show_message(mail_no); // форма должна быть заполнена!
return false;
}
else {
dojo.xhrPost({
url: "x_forum_footer/footer_mail_to.php", // php-скрипт, которому уйдет запрос
form: dojo.byId("_footer_form_to_post"), // данные берем из этой формы
handleAs: "text", // обрабатывать как текст
load: function(data) { // успешная отправка данных по сети
show_message(mail_yes);
clear_callback();
return false;
},
error: function(error){alert("Ошибка dojo.xhrPost: " + error); return false;} // какие-то проблемы
});
return false;
}
}
И, наконец, сам серверный
php-скрипт, который получит данные из формы и отправит
e-mail- Код: выделить все
<?php
if (isset($_POST['_footer_topic'])) {$topic= $_POST['_footer_topic'];}
if (isset($_POST['_footer_textarea'])) {$text = $_POST['_footer_textarea'];}
if (isset($_POST['_footer_name'])) {$name = $_POST['_footer_name'];}
if (isset($_POST['_footer_email'])) {$email = $_POST['_footer_email'];}
$to = "telnov@bk.ru";
$headers = "Content-type: text/plain; charset = UTF-8";
$subject = "Сообщение с главной страницы КССТ";
$message = "Тема сообщения: $topic \nТекст сообщения: $text \nИмя пославшего сообщение: $name \nЕго email: $email";
$send = mail ($to, $subject, $message, $headers);
?>
Пример 2. Кусок кода из сервиса "Учебные материалы". Отправка на сервер обновленных данных в формате
JSON и запись их в файл на сервере.
Отправка данных на сервер:
- Код: выделить все
// серверному скрипту отправляем POST-запрос с данными из переменной newFileContentString
dojo.xhrPost({
url: "http://swim.obninsk.ru/dojo_tree_test/json/lib_json_write.php",
content: {name: newFileContentString},
load: function(data){ alert("xhrPost: OK"); },
error: function(error){ alert(ajaxError + error); }
});
Получение и обработка данных на сервере:
- Код: выделить все
<?php
// этот серверный скрипт лежит по адресу http://swim.obninsk.ru/dojo_tree_test/json/lib_json_write.php
function clean_slashes(&$value,$name) {
// уберем мусорные слэши, если они есть
if(is_array($value)) {
foreach($value as $k => $v) {
if($k != trim($name)) {
clean_slashes($value[$k],$name);
}
}
} else {
$value = stripslashes($value);
}
}
if(true == (get_magic_quotes_gpc())) { clean_slashes($_POST,"_POST"); }
// в файл lib.json запишем всё, что придет в ассоциативном массиве POST-запроса
$fp = fopen("./lib.json","w+"); // открываем файл для записи
foreach($_POST as $key => $value) { fwrite($fp, $value); } // всё, что пришло в массиве POST-запроса, пишем в файл
fclose($fp); // закрываем файл
?>
В заключение, несколько ссылок по теме:
$_REQUEST,
$_POST,
$_GET,
простые примеры.
Желаю удачи.