05.09.2011, 20:43
|
Аспирант
|
|
Регистрация: 29.08.2011
Сообщений: 30
|
|
Передача переменных из <form>
привет всем. я тут пытаюсь из формы передать переменные ее элеиментов в ява скрипт и передать это все в PHP обработчик. что бы понятней было что я делаю выпишу код:
<form id="formPostRequestID" name="formPostRequestName" method="post">
ФИО:
<p><input type="text" name="textSurname" id="textSurname" value=""/></p>
<p><input type="text" name="textFirstName" id="textFirstName" value=""//></p>
<p><input type="text" name="textLastName" id="textLastName" value=""/></p>
Адрес:
<p><input type="text" name="textAdress" id="textAdress" value=""/></p>
Тема запроса:
<p><input type="text" name="textRequestTheme" id="textRequestTheme" value=""/></p>
<p>Сообщение:</p>
<p><textarea name="textRequestData" id="textRequestData" cols="45" rows="10"></textarea></p>
<p>
</form>
<input type="button" name="btnPost" id="btnPost" value="Отправить" onclick="fOnClkPost(formPostRequestID)" formmethod="post"/>
по кнопке отправить вызывается функция fOnClkPost с ID формы(<form>)
var h;
function fOnClkPost(id){
var eLen = id.elements.length;
var queryStr = "http://dreamw/drw/clt_form.php?";
for(var i = 0; i < eLen; i++){
queryStr = queryStr + id.elements.item(i).value;
if(i < (eLen - 1)){queryStr = queryStr + "&";}
}
alert('text: ' + queryStr);
h = new XMLHttpRequest();
h.open("POST",queryStr,true);
h.onreadystatechange = fXMLEvent;
//h.setRequestHeader('Content-Type', "text/xml");
//http.onreadystatechange = handleResponse;
h.send();
}
function fXMLEvent(){
try{
if(h.readyState == 4){
if(h.status == 200){
alert('h.responseText_1: ' + h.responseText);
}else{
//alert("h.statusText " + h.statusText);
}
}else{
//alert('h.responseText 2: ' + h.responseText);
}
}catch(e){
alert('Connection Error ' + e.description + h.readyState);
}
}
и так, что вы тут видите, ну а видите вы конечно корявое формирование запроса который в итогде будет выглядить примерно так:
dreamw/drw/clt_form.php?surname&firstname&lastname... и т.д
в пхп обработчеке я естественно зная в каком порядке придут переменные просто хочу разделить через explode значения и отправить в БД.
вроде бы все ок, пусть даже и такой корявый запрос, но суть в том что если писать на русском языке получаются кракозябры, то есть непонятная кодировка.
а вообще все же хочется увидеть кто как делается более правильно.
ну и заранее спасибо за предложенные варианты.
Последний раз редактировалось SunTechnique, 05.09.2011 в 20:46.
|
|
05.09.2011, 21:31
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
<form id="myForm">
<input name="test" value="blabla" />
<textarea name="area">Тестовый текст</textarea>
</form>
<script type="text/javascript">
function serializeForm( form ) {
var result = '', gE = 'getElementsByTagName',
inputs = [ form[ gE ]('input'), form[ gE ]('select'), form[ gE ]('textarea'), form[ gE ]('button') ],
iln = inputs.length, eln, i, j, name;
for( i = 0; i < iln; i++ ) {
eln = inputs[ i ].length;
for( j = 0; j < eln; j++ ) {
if ( inputs[ i ][ j ] ) {
if ( name = inputs[ i ][ j ].getAttribute( 'name' ) ) {
result += escape( name ).replace( /\+/g, '%2B' );
result += '=' + escape( inputs[ i ][ j ].value ).replace( /\+/g, '%2B' ) + '&';
}
}
}
}
return result;
}
alert( serializeForm( document.getElementById('myForm') ) );
</script>
Последний раз редактировалось devote, 05.09.2011 в 21:35.
|
|
06.09.2011, 11:46
|
Аспирант
|
|
Регистрация: 29.08.2011
Сообщений: 30
|
|
ух как я намаялся с этим unserilze PHP которые выдавал пустую строку. пришлось вместо этого воспользоваться этой штукой:
function unicode_escape($str){
$escape_table = array(
'%20' => ' ','%21' => '!','%2C' => ',','%3A' => ':','%3B' => ';',
'А' => 'А','Б' => 'Б','В' => 'В','Г' => 'Г',
'Д' => 'Д','Е' => 'Е','Ё' => 'Ё','Ж' => 'Ж',
'З' => 'З','И' => 'И','Й' => 'Й','К' => 'К',
'Л' => 'Л','М' => 'М','Н' => 'Н','О' => 'О',
'П' => 'П','Р' => 'Р','С' => 'С','Т' => 'Т',
'У' => 'У','Ф' => 'Ф','Х' => 'Х','Ц' => 'Ц',
'Ч' => 'Ч','Ш' => 'Ш','Щ' => 'Щ','Ъ' => 'Ъ',
'Ы' => 'Ы','Ь' => 'Ь','Э' => 'Э','Ю' => 'Ю',
'Я' => 'Я','а' => 'а','б' => 'б','в' => 'в',
'г' => 'г','д' => 'д','е' => 'е','ё' => 'ё',
'ж' => 'ж','з' => 'з','и' => 'и','й' => 'й',
'к' => 'к','л' => 'л','м' => 'м','н' => 'н',
'о' => 'о','п' => 'п','р' => 'р','с' => 'с',
'т' => 'т','у' => 'у','ф' => 'ф','х' => 'х',
'ц' => 'ц','ч' => 'ч','ш' => 'ш','щ' => 'щ',
'ъ' => 'ъ','ы' => 'ы','ь' => 'ь','э' => 'э',
'ю' => 'ю','я' => 'я',
);
return strtr($str, $escape_table);
}
|
|
06.09.2011, 11:48
|
Аспирант
|
|
Регистрация: 29.08.2011
Сообщений: 30
|
|
эээммм...
|
|
06.09.2011, 11:52
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
function unescape( $str, $charset = "UTF-8" ) {
$str = rawurldecode($str );
preg_match_all("/(?:%u.{4})|&#x.{4};|&#\d+;|.+/U", $str, $r );
$ar = $r[0];
foreach( $ar as $k => $v ) {
if ( substr($v, 0, 2) == "%u" ) {
$ar[$k] = iconv("UCS-2", $charset, pack("H4", substr($v, -4)));
} elseif ( substr($v, 0, 3) == "&#x" ) {
$ar[$k] = iconv("UCS-2", $charset, pack("H4", substr($v, 3, -1)));
} elseif ( substr($v, 0, 2) == "&#" ) {
$ar[$k] = iconv("UCS-2", $charset, pack("n", substr($v, 2, -1)));
}
}
return implode( "", $ar );
}
|
|
06.09.2011, 11:55
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
/*
* приведение канонического типа Unicode текста в нормальное состояние.
*/
function NFD2Chars( $value ) {
$convmap = array( 0x80, 0xFFFF, 0, 0xFFFF );
return mb_decode_numericentity(
preg_replace( '/(\\\\u([ABCDEF0-9]{2})([ABCDEF0-9]{2}))/ise', '"&#".(0x\\2\\3).";"', $value ),
$convmap, 'UTF-8');
}
|
|
06.09.2011, 12:34
|
Аспирант
|
|
Регистрация: 29.08.2011
Сообщений: 30
|
|
по поводу первого разобрался, она декодирует то что закодировано твоим яваскриптом перед отправкой. но в базу данных записывается вот такая вот кракозябра Р?Р°Р?РёР?РёС?... Ну и АД с этими кодировками...
а по поводу второго, на первый взгляд кажется что она тоже самое делает просто какой-то другой вариант, но PHP выдает ошибку что ему не известна функция mb_decode_numericentity
Последний раз редактировалось SunTechnique, 06.09.2011 в 12:45.
|
|
06.09.2011, 13:37
|
Аспирант
|
|
Регистрация: 29.08.2011
Сообщений: 30
|
|
внатуре с этими кодировками кошмары снится будут. помелян там где у тебя UTF-8 на windows-1251 и все записало в БД русскими нормальными буквами. зато ПХП через echo выводит кракозябры но это уже в следующей серии
|
|
|
|