js array do php

0

Witam
Zbieram sobie dane z formularza (JS):

var myar=new Array (document.form.imie.value, document.form.nazwisko.value);
var sen="search="+myar;

i wysylam je do pliku write.php przy pomocy prototype.js (ajaxowa zabawka)

var myAjax = new Ajax.Request("write.php",{method: 'get', parameters: sen, onComplete: MyFunc});

plik write wyglada tak:

$search = explode(",", $_GET['search']);
$query="insert into tabela select '$search[0]','$search[1]' ";
$m  = mysql_query($query, $con);

No i tutaj jest problem. Dane sa zapisywane do bazy, ale bez polskich liter :/
Kodowanie strony mam w iso-8859-2.
Jak to ruszyc, zeby polskie litery byly zapisywane ?!

Ciekawostka jest to ze kiedy w pliku write.php wpisze taki kod:

$query="select * from tabela where nazwa like '%$search[1]%' ";
wtedy, wyszukuje polskie litery.

0

spróbuj dodać parametr encoding do Ajaxa:

var myAjax = new Ajax.Request("write.php",{method: 'get', parameters: sen, encoding: 'iso-8859-2', onComplete: MyFunc});

a jak nic nie da, to może pomyśl o słaniu przez post, albo... zobaczymy jak nie pomoże encoding, będziemy kombinować.

0

mi sie wydaje że zmiana z utf-8 na latin2 w kodzie php byłaby bardziej odpowiednia
bo tak sie przyjęło że każdy kojarzy że dane z js idą w utfie, więc zamiast próbować prosić przeglądarke o zmiane tego, lepiej (głównie dla tych co później mogą ten kod przejąć) obrobić to w php

0
Ranides napisał(a)

spróbuj dodać parametr encoding do Ajaxa:

var myAjax = new Ajax.Request("write.php",{method: 'get', parameters: sen, encoding: 'iso-8859-2', onComplete: MyFunc});

a jak nic nie da, to może pomyśl o słaniu przez post, albo... zobaczymy jak nie pomoże encoding, będziemy kombinować.

Niestety, ale encoding: 'iso-8859-2' nie zadzialalo :(
Moze jednak po stronie PHP to zrobic ?

0

przed wysłaniem przepuść dane przez funkcję encodeURIComponent() a później w PHP przepuść przez url_decode()

0
webdevil napisał(a)

przed wysłaniem przepuść dane przez funkcję encodeURIComponent() a później w PHP przepuść przez url_decode()

Niestety, to tez nie dziala. Dane sa wysylane do pliku PHP dobrze, ale urldecode juz nic z tym nie robi :/
Acha! dane w bazie sa zapisywane w systemie latin2_general_ci.

0

Tak z innej beczki - rozumiem, że to tylko przykład?

urbiasz napisał(a)
$search = explode(",", $_GET['search']);
$query="insert into tabela select '$search[0]','$search[1]' ";
$m  = mysql_query($query, $con);

Bo to idealny kod do zabaw SQL Injection

0
Marooned napisał(a)

Tak z innej beczki - rozumiem, że to tylko przykład?

urbiasz napisał(a)
$search = explode(",", $_GET['search']);
$query="insert into tabela select '$search[0]','$search[1]' ";
$m  = mysql_query($query, $con);

Bo to idealny kod do zabaw SQL Injection

Dokladnie:) to jest tylko przyklad :)

0
urbiasz napisał(a)

Niestety, ale encoding: 'iso-8859-2' nie zadzialalo :(
Moze jednak po stronie PHP to zrobic ?

Myślę, że wpierw by wypadało dowiedzieć się w jakim kodowaniu otrzymujesz dane, czyli
http://pl2.php.net/manual/pl/function.mb-detect-encoding.php

A następnie skonwertować je po stronie PHP do iso-8859-2, czyli
http://pl2.php.net/manual/pl/function.mb-convert-encoding.php

A jak to nie pomoże, to
http://www.phpclasses.org/browse/file/5131.html

Ewentualnie możesz też pozamieniać znaki na encje przed wysłaniem ich do skryptu PHP.

1 użytkowników online, w tym zalogowanych: 0, gości: 1