![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 150 Pomógł: 1 Dołączył: 4.12.2010 Ostrzeżenie: (10%) ![]() ![]() |
Witam, piszę skrypt, który ma odpowiadać za zmianę języka witryny dla danego użytkownika serwisu (oparcie o adres IP dla gości) i mam pewien problem, gdyż mam do wyboru 3 języki (PL,EN,DE).
Chcę aby po kliknięciu w jedną z flag wysunęło się okienko w dolnym rogu witryny (pozycja fixed), gdzie pojawia się tekst o wyborze języka, informacja o ładowaniu języka itp. To zrobiłem i działa bez zarzutu ale problem tkwi w tym, że do każdego skryptu dodałem zapytanie SQL, które ma update'ować rekord danego użytkownika np. gdy jego aktualny język to "pl", a kliknie w flagę angielską to zapytanie ma z'update'ować rekord dla jego IP w komórce "lang" z "pl->en". Mój kod wygląda tak:
Wszystko działa ładnie, lecz nie ważne którą flagę kliknę, zawsze wywoływane jest ostatnie zapytanie mySQL, w tym przypadku dla języka PL. Dla przykładu: mój aktualny język to EN, klikam w DE, a skrypt i tak wywołuje zapytanie dla PL i zmienia mi język na PL a nie na DE. Próbowałem to robić na wiele sposobów, lecz jeszcze nie udało mi się znaleźć odpowiedniego, dlatego piszę na forum mając nadzieję, że ktoś z Was mi pomoże (IMG:style_emoticons/default/smile.gif) Za pomoc będę niezmiernie wdzięczny. Za każdą odpowiedź daję "POMÓGŁ" ! Serdecznie pozdrawiam. Kamil Dunaj. |
|
|
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 150 Pomógł: 1 Dołączył: 4.12.2010 Ostrzeżenie: (10%) ![]() ![]() |
Dobrze mistrzu (IMG:style_emoticons/default/wink.gif)
A jesteś w stanie mi pomóc ? |
|
|
![]()
Post
#4
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Ogólnie zachęcanie POMOGŁ jest żałosne.
Co do tematu: 1) Tworzysz 3 razy zmienną sql to pewnie ci się za każdym razem nadpisuje 2) Tworzysz w kodzie html zmienną sql, którą potem na serwerze wykonujesz... ałć... bez problemu mogę wykonać dowolne zapytanie na Twojej bazie Do serwera powinieneś przekazywać tylko aktualnie kliknięty język. To wszystko. Zapytanie sql masz budować już po stronie serwera przed samym wykonaniem. 3) Bez sensu tworzysz x razy ten sam kod. Napisz jedną funkcję, która przyjmie parametry język i po sprawie. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 150 Pomógł: 1 Dołączył: 4.12.2010 Ostrzeżenie: (10%) ![]() ![]() |
Ogólnie zachęcanie POMOGŁ jest żałosne. Co do tematu: 1) Tworzysz 3 razy zmienną sql to pewnie ci się za każdym razem nadpisuje 2) Tworzysz w kodzie html zmienną sql, którą potem na serwerze wykonujesz... ałć... bez problemu mogę wykonać dowolne zapytanie na Twojej bazie Do serwera powinieneś przekazywać tylko aktualnie kliknięty język. To wszystko. Zapytanie sql masz budować już po stronie serwera przed samym wykonaniem. 3) Bez sensu tworzysz x razy ten sam kod. Napisz jedną funkcję, która przyjmie parametry język i po sprawie. Dzięki, a jesteś w stanie przedstawić swoją propozycję tego skryptu ? |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 262 Pomógł: 26 Dołączył: 23.01.2009 Skąd: eZ Systems Ostrzeżenie: (0%) ![]() ![]() |
Od siebie tylko dodam, że mieszanie kodu JS i PHP jest złą praktyką. Powinieneś mieć osobne pliki z obsługą JS i PHP.
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 150 Pomógł: 1 Dołączył: 4.12.2010 Ostrzeżenie: (10%) ![]() ![]() |
Super, a potrafisz to zrobić tak jak należy i żeby działało tak jak to opisałem ?
Może napisze ktoś przynajmniej jak zrobić z tego jedną funkcję i jak zainicjować wartość ID dla kodu php w JS. Np: var sql = ['<?php mysql_query('UPDATE guests SET lang="TUTAJ WARTOŚĆ ID" WHERE ip="'.$_SERVER['REMOTE_ADDR'].'"') or die (mysql_error()); ?>']; Ten post edytował peja1990 22.09.2011, 14:17:58 |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 181 Pomógł: 14 Dołączył: 4.06.2008 Ostrzeżenie: (0%) ![]() ![]() |
Nadal nie zrozumiałeś. Po stronie przeglądarki nie powinno być żadnych zapytań mysql, kodów PHP itp, bo jest to niebezpieczne dla Twojego skryptu jak i całego serwera. Przez JS masz przesłać tylko i wyłącznie zmienną która informuje jakąś flagę kliknął user. Nic więcej. Reszta ma odbywać się po stronie serwera, tam gdzie nie ma nikt inny dostępu oprócz admina. Dodatkowo powinieneś filtrować tę zmienną czy aby na pewno zawiera to co planowałeś by zawierała. U ciebie są to dwuliterowe oznaczenia języków, więc możesz stworzyć tablicę zawierającą wszystkie dostępne języki i sprawdzać, czy przesłana zmienna znajduje się w tej tablicy, jeśli tak, to wszystko jest ok.
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 428 Pomógł: 77 Dołączył: 10.07.2011 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Ja osobiście zrobiłbym to tak:
JQuery:
zmiana_flag.php:
Ten post edytował kpt_lucek 22.09.2011, 19:51:10 |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 181 Pomógł: 14 Dołączył: 4.06.2008 Ostrzeżenie: (0%) ![]() ![]() |
Po prywatnej korespondencji z peja1990 wiem, że tam wcale nie trzeba żadnego AJAXa. Po kliknięciu w flagę strona po kilku sek odświeżała się, więc zmianę języka można obsłużyć przez zwykłego GETa/POSTa. Nie wiem nawet czy kod, który przedstawiłem pomoże temu userowi, bo sprawdzając jego stronę już na starcie raziły błędy HTML m.in. cała sekcja head znajdowała się body i to nie tak, że <head>(...)</head> było w body, tylko head było puste, a to co miało tam być, było w body...
|
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 428 Pomógł: 77 Dołączył: 10.07.2011 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Po prywatnej korespondencji z peja1990 wiem, że tam wcale nie trzeba żadnego AJAXa. Po kliknięciu w flagę strona po kilku sek odświeżała się, więc zmianę języka można obsłużyć przez zwykłego GETa/POSTa. Nie wiem nawet czy kod, który przedstawiłem pomoże temu userowi, bo sprawdzając jego stronę już na starcie raziły błędy HTML m.in. cała sekcja head znajdowała się body i to nie tak, że <head>(...)</head> było w body, tylko head było puste, a to co miało tam być, było w body... Ok, ale sposób przedstawiony przeze mnie zajmuje zdecydowanie mniej miejsca i komunikacja między MySQL odbywa się za pomocą odrębnego pliku php. |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 150 Pomógł: 1 Dołączył: 4.12.2010 Ostrzeżenie: (10%) ![]() ![]() |
Ja osobiście zrobiłbym to tak: JQuery:
zmiana_flag.php:
Super mistrzu, lecz po kliknięciu w flagę teraz nic się nie dzieje, nie chodzi o animację bo to inna sprawa lecz, nie aktualizuje się rekord co jest tutaj najważniejsze. (IMG:style_emoticons/default/sad.gif) |
|
|
![]()
Post
#13
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Poprawka:
<li lang="de" class="lang_de <?php if($GUEST['lang']=='de') {echo 'active';} ?>" title="flaga"></li> analogicznie reszta var a = $(this).attr("lang"); No i tu: $sql=mysql_query(...) or die(mysql_error()); wstawiłeś zapytanie? |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 150 Pomógł: 1 Dołączył: 4.12.2010 Ostrzeżenie: (10%) ![]() ![]() |
Poprawka: <li lang="de" class="lang_de <?php if($GUEST['lang']=='de') {echo 'active';} ?>" title="flaga"></li> analogicznie reszta var a = $(this).attr("lang"); No i tu: $sql=mysql_query(...) or die(mysql_error()); wstawiłeś zapytanie? To już sobie poprawiłem lecz zamiast atrybutu lang dałem id, tylko nie to że nie podmienia na poste pole czy coś tylko w ogóle nie podmienia. A zapytanie oczywiście, że dałem (IMG:style_emoticons/default/smile.gif) Gdzie może być błąd ? (IMG:style_emoticons/default/sad.gif) Do tego w pliku PHP zmieniłem z $_POST[a] na $_POST['a'] i nic (IMG:style_emoticons/default/sad.gif) Ten post edytował peja1990 22.09.2011, 20:38:13 |
|
|
![]()
Post
#15
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Odpal firebuga dla FIrefox i zobacz, czy ci ten ajax idzie, co zawiera itp.
|
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 150 Pomógł: 1 Dołączył: 4.12.2010 Ostrzeżenie: (10%) ![]() ![]() |
Odpal firebuga dla FIrefox i zobacz, czy ci ten ajax idzie, co zawiera itp. Ok, ale najpierw muszę zainstalować "lisa" bo ogólnie to nie korzystam z tej przeglądarki (IMG:style_emoticons/default/tongue.gif) |
|
|
![]()
Post
#17
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Naprawdę nie musisz mnie/nas informować o tym. Poprostu zainstaluj i powiedz co ci pokaże.
|
|
|
![]()
Post
#18
|
|
Grupa: Zarejestrowani Postów: 150 Pomógł: 1 Dołączył: 4.12.2010 Ostrzeżenie: (10%) ![]() ![]() |
Naprawdę nie musisz mnie/nas informować o tym. Poprostu zainstaluj i powiedz co ci pokaże. Nic mi nie pokazuje, tak jakby to był zwykły obrazek z hoverem... Poprostu jedno wielkie NIC ;/ Zaraz Ci pokażę to Ty też sprawdzisz, ok ? Łapcie, sprawdzajcie: http://detronic.pl/test/pl/start.html Ten post edytował peja1990 22.09.2011, 20:54:35 |
|
|
![]()
Post
#19
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
TEn kod:
$('li').click(function(){ .... ..... ma być odpalony po załadowaniu strony, czyli $(document).ready( ......... ........... co już stosowałeś wcześniej. Myśl trochę. |
|
|
![]()
Post
#20
|
|
Grupa: Zarejestrowani Postów: 181 Pomógł: 14 Dołączył: 4.06.2008 Ostrzeżenie: (0%) ![]() ![]() |
Nadal jestem zdania, że jest to zbędne, ponieważ po kliknięciu w flagę po kilku sekundach strona wczytuje się ponownie, więc znacznie prościej jest to zrobić używając parametru w GETcie, do tego odpada dodatkowy JS, który w tym przypadku jest naprawdę zbędny...
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 13:10 |