Передача переменных из <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 значения и отправить в БД. вроде бы все ок, пусть даже и такой корявый запрос, но суть в том что если писать на русском языке получаются кракозябры, то есть непонятная кодировка. а вообще все же хочется увидеть кто как делается более правильно. ну и заранее спасибо за предложенные варианты. |
<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> |
ух как я намаялся с этим unserilze PHP которые выдавал пустую строку. пришлось вместо этого воспользоваться этой штукой:
function unicode_escape($str){ $escape_table = array( '%20' => ' ','%21' => '!','%2C' => ',','%3A' => ':','%3B' => ';', 'А' => 'А','Б' => 'Б','В' => 'В','Г' => 'Г', 'Д' => 'Д','Е' => 'Е','Ё' => 'Ё','Ж' => 'Ж', 'З' => 'З','И' => 'И','Й' => 'Й','К' => 'К', 'Л' => 'Л','М' => 'М','Н' => 'Н','О' => 'О', 'П' => 'П','Р' => 'Р','С' => 'С','Т' => 'Т', 'У' => 'У','Ф' => 'Ф','Х' => 'Х','Ц' => 'Ц', 'Ч' => 'Ч','Ш' => 'Ш','Щ' => 'Щ','Ъ' => 'Ъ', 'Ы' => 'Ы','Ь' => 'Ь','Э' => 'Э','Ю' => 'Ю', 'Я' => 'Я','а' => 'а','б' => 'б','в' => 'в', 'г' => 'г','д' => 'д','е' => 'е','ё' => 'ё', 'ж' => 'ж','з' => 'з','и' => 'и','й' => 'й', 'к' => 'к','л' => 'л','м' => 'м','н' => 'н', 'о' => 'о','п' => 'п','р' => 'р','с' => 'с', 'т' => 'т','у' => 'у','ф' => 'ф','х' => 'х', 'ц' => 'ц','ч' => 'ч','ш' => 'ш','щ' => 'щ', 'ъ' => 'ъ','ы' => 'ы','ь' => 'ь','э' => 'э', 'ю' => 'ю','я' => 'я', ); return strtr($str, $escape_table); } |
эээммм... :blink:
|
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 ); } |
/* * приведение канонического типа 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'); } |
по поводу первого разобрался, она декодирует то что закодировано твоим яваскриптом перед отправкой. но в базу данных записывается вот такая вот кракозябра Р?Р°Р?РёР?РёС?... Ну и АД с этими кодировками...
а по поводу второго, на первый взгляд кажется что она тоже самое делает просто какой-то другой вариант, но PHP выдает ошибку что ему не известна функция mb_decode_numericentity |
внатуре с этими кодировками кошмары снится будут. помелян там где у тебя UTF-8 на windows-1251 и все записало в БД русскими нормальными буквами. зато ПХП через echo выводит кракозябры но это уже в следующей серии :lol:
|
Часовой пояс GMT +3, время: 03:03. |