Wątek zablokowany 2016-11-19 15:57 przez furious programming.

zagnieżdzanie jquery w php

0

Witam. Potrzebuje dostac sie do wartosci formularza ktory juz zostal wyslany do innej funkcji. Chcialbym to zrobic w jquery. Jak zagnieździć kod aby uzyskana wartosc przypisac do zmiennej php? Robilem to tak:

 
 foreach($_COOKIE['cookie'] as $name=>$value)
              {
                   echo "<script type='text/javascript'>";
                      $var  = "$('input[name='pozycja_".$name."']').val()
                       </script>";
                   $ilosc = mysql_real_escape_string(HTMLSpecialChars(addslashes($var));
                   $shop_count = $this->db->query("select BOOK_Count from books where BOOK_ID = $name")->row()->BOOK_Count;
                   $ak = $shop_count - $ilosc;
                   $up = $this->Users_model->count_update($ak);
                   $sob = $this->load->Users_model->set_order_books($name,$ilosc);
                   if(!$sob AND !$up)
                   {
                       break;
                   }
              }
Ale bez skutku...


0

Pewnie bswierczynski właśnie pisze Ci cały referat na ten temat, ale w między czasie dodam, że najpierw (renderowanie strony) jest wykonywany kod PHP, dopiero później (w przeglądarce) uruchamiany jest kod JavaScript. Stąd nie możesz zrobić takiego przypisania. Generalnie próbujesz cudów, zamiast zrobić po ludzku normalny formularz.

0

zrobilem po ludzku formularz i on mi wyslal dane do innej funkcji. A teraz chce sie dostac do tej wartosci formularza z innej funkcji...

2

@nav:
LOL, 100% racji. Gdy dodałeś tego posta miałem już gotowe większość elaboratu. @bellial chyba nie zrozumiał co robi nie tak, więc opublikuję... Może powinienem napisać artykuł na ten temat, bo piszę o tym już ze trzeci raz, tylko w troszkę innym kontekście.

@beliall:
Nie możesz tego zrobić w ten sposób. Chyba nie rozumiesz jak generowane są strony www. jQuery to JavaScript działający w przeglądarce, na komputerze klienta (użytkownika). PHP działa na serwerze.

To jest tak: przeglądarka wysyła żądanie do serwera, prosząc o plik foobar.php. W tym pliku jest skrypt PHP. Serwer odpala ten skrypt PHP. Zadania kodu PHP są dwa: wygenerowanie kodu HTML strony oraz ewentualnie zmiana stanu serwera, czyli np. modyfikacja bazy danych (dodanie użytkownika, książki, czy czegoś). Skrypt PHP jest odpalany. Robi to, co chce programista: wykonuje polecenia do bazy danych, ale przede wszystkim używa echo lub innych technik, by wygenerować tekst pliku w formacie HTML, który ma zostać przekazany do przeglądarki na komputerze klienta.

Ten tekst, ten kod HTML, może zawierać zagnieżdżony kod JavaScript. Wystarczy, że wśród generowanego HTML-a umieści się tagi <script type="text/javascript">kod_javascript();</script>. Ale dla kodu PHP to wciąż tylko najzwyklejszy tekst. Jak robisz echo "<h1>Nagłówek strony</h1>", to dla PHP wyświetlasz po prostu jakiś tekst. Tekst ten zdarza się akurat być w formacie HTML, ale interpreter PHP się tym nie interesuje. On po prostu wyświetla tekst. Na podobnej zasadzie możesz wyświetlić tekst skryptu JavaScript otoczony tagami <script> -- ale dla PHP wyświetlasz po prostu tekst.

Co to znaczy "wyświetlasz tekst"? W końcu PHP pracuje na serwerze, a nie w przeglądarce. Więc czy echo "wyświetla tekst" na monitorze serwera gdzieś tam w powiedzmy Niemczech? ;-) Nie. "Wyświetlenie tekstu" (za pomocą echo lub innym sposobem) oznacza tutaj przygotowanie tekstu do wysłania do przeglądarki. Przygotowujesz więc tekst będący kodem HTML strony, z zagnieżdżonymi skryptami JS, do wysłania do przeglądarki. Może być nawet tak, że echo od razu ten tekst wysyła, ale zwykle mamy do czynienia z jakimś buforowaniem i tekst do wysłania jest zapamiętywany przez serwer. Gdy skrypt PHP, czyli foobar.php, kończy działanie, zapamiętany tekst do wyświetlania jest wysyłany do przeglądarki.

Przeglądarka działa na komputerze użytkownika, być może będącym 10 000 km od serwera (na którym działał skrypt PHP!). Przeglądarka interpretuje otrzymany tekst jako kod HTML (to zależy od nagłówków, ale dla uproszczenia uznajmy, że tak jest -- w tym wypadku tak będzie). Przeglądarka wyświetla paragrafy tekstu, listy, linki i wszystko to, co jest na stronie. Gdy przeglądarka widzi tag <script>, odpala znajdujący się tam skrypt JavaScript. W ramach tego skryptu może być używane jQuery.

Zauważ, że serwer nie ma tu już nic do gadania. On już wykonał i zakończył swoją pracę: wysłał przeglądarce kod HTML. Teraz pracuje przeglądarka, na zupełnie innym komputerze (możesz postawić serwer na swoim komputerze i często się tak robi przy nauce PHP, ale zasada pozostaje ta sama). Przeglądarka przetwarza JavaScript, ale skrypt foobar.php został już dawno wykonany i nie może się odnieść do zmiennych z tego JavaScriptu.

Możesz jedynie użyć Ajaxa, by kod JavaScript mógł wysłać cichaczem do serwera KOLEJNE żądanie, prawdopodobnie do zupełnie innego pliku PHP niż foobar.php. W tym żądaniu możesz przekazać jakieś dane, np. wartości zmiennych z JavaScript. I plik docelowy może te dane odczytać i jakoś na nie odpowiedzieć. Może przypisać te dane do zmiennej PHP. Nie zmieni to jednak faktu, że do pliku foobar.php nie da się tak po prostu wrócić z jakimiś tam wartościami zmiennych z JavaScriptu.

0

Dzieki za wyczerpujace wyjaśnienie...Poradzielem sobie z tym problemem zapisujac zmienne do cookie a nastepnie przy wykonaniu formularza, nadpisuja cookie aktualna wartoscia....I wszystko dziala tak jak chciałem.

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