Przesyłanie zmiennej z js do php

0

Witam,
Jak mogę bez ajaxa wysłać zmienną z js do php? Szukałem w internecie, ale nie znalazłem odpowiedniego rozwiązania. Zmienna to string. Aby to tak wyglądało: odpala się test.php, w nim wykonuje się funkcja js i ona zwraca do otwartej strony test1.php zmienną.

1

JS działa w przeglądarce klienta, PHP działa na serwerze w związku z tym trzeba przesłać zmienną z klienta na serwer. Metody Http które masz do dyspozycji to m.in. GET i POST. Obie nadają się do tego celu.

0
Haskell napisał(a):

JS działa w przeglądarce klienta, PHP działa na serwerze w związku z tym trzeba przesłać zmienną z klienta na serwer. Metody Http które masz do dyspozycji to m.in. GET i POST. Obie nadają się do tego celu.

A jakiś polski poradnik do tego jest?

2

Napisz może dokładnie i w miarę szczegółowo, co chcesz osiągnąć. Bo pierwszy post był bardzo mało konkretny i za wiele z niego nie wynika.

0
cerrato napisał(a):

Napisz może dokładnie i w miarę szczegółowo, co chcesz osiągnąć. Bo pierwszy post był bardzo mało konkretny i za wiele z niego nie wynika.

Starałem sie jak najbardziej dokładnie. Czytałem o post() i odpowiada mi, ale nie wiem jak to ustawić.

3

Tylko nie do końca rozumiem o co CI chodzi. Zwłaszcza niepokoi mnie fragment odpala się test.php, w nim wykonuje się funkcja js. Tak, jak pisał @Haskell - PHP odpala się po stronie serwera, a potem zwrócona strona do przeglądarki jest de facto stroną statyczną (jakbyś skopiował sobie wynik pracy skryptu PHP i zapisał w pliku HTML, to efekt by był identyczny). W związku z tym nadaj nie rozumiem, co chcesz osiągnąć.

0
cerrato napisał(a):

Tylko nie do końca rozumiem o co CI chodzi. Zwłaszcza niepokoi mnie fragment odpala się test.php, w nim wykonuje się funkcja js. Tak, jak pisał @Haskell - PHP odpala się po stronie serwera, a potem zwrócona strona do przeglądarki jest de facto stroną statyczną (jakbyś skopiował sobie wynik pracy skryptu PHP i zapisał w pliku HTML, to efekt by był identyczny). W związku z tym nadaj nie rozumiem, co chcesz osiągnąć.

Chcę, aby w js dokonywały się obliczenia cen i na koniec z js przesyłało do php, skąd wyśle do bazy danych zaktualizowaną wersję.

3

No to przeczytaj ten wpis: https://kursjs.pl/kurs/ajax/xmlhttprequest.php

0
cerrato napisał(a):

No to przeczytaj ten wpis: https://kursjs.pl/kurs/ajax/xmlhttprequest.php

Ok, przeczytam i napiszę czy się przydało, dizęki za pomoc.

1

Po pierwsze jeżeli zamierzasz programować w przyszłości to musisz nauczyć się angielskiego, przynajmniej na tyle aby rozumieć dokumentację. Po drugie jeżeli zamierzasz programować to musisz nauczyć się wyszukiwać informacje w Internecie. Napisałeś, że czytałeś o post() czyli zapewne chodzi o jQuery.post().

$.post( "test.php", { zmienna: "wartosc" });

0
Haskell napisał(a):

Po pierwsze jeżeli zamierzasz programować w przyszłości to musisz nauczyć się angielskiego, przynajmniej na tyle aby rozumieć dokumentację. Po drugie jeżeli zamierzasz programować to musisz nauczyć się wyszukiwać informacje w Internecie. Napisałeś, że czytałeś o post() czyli zapewne chodzi o jQuery.post().

$.post( "test.php", { zmienna: "wartosc" });

Angielski jakoś znam. A jak odebrać tego posta w PHP? Bo name nie ma.

0

Jedyne co mi przychodzi do głowy, żeby to zrobić bez ajax'u, to zrób niewidoczny formularz, wrzuć do niego zmienne i programowo wywołaj sumbit, to uruchomi Ci skrypt php podany w action i tam odczytasz swoje zmienne.

0
Gouda105 napisał(a):

Chcę, aby w js dokonywały się obliczenia cen i na koniec z js przesyłało do php, skąd wyśle do bazy danych zaktualizowaną wersję.

Tak tylko w kwestii formalnej: jeżeli to nie będą dane przetwarzane przez kogoś, komu absolutnie ufasz, a dane te będą jakoś istotne, to w żadnym wypadku nie należy pozwalać, żeby np. skrypt JS w przeglądarce klienta obliczał mu, ile ma zapłacić za towar, bo zawsze to może sobie zmanipulować i potencjalnie zrobić ci kompletny bajzel w systemie. I w ogólności wszelkie odpowiedzi przesyłane z formularzy należy później przetestować pod kątem tego, czy nie wykraczają poza zdefiniowane w formularzu parametry. Bo później może się np. okazać, że opok pozycji "kupię" i "sprzedam" masz na stronie kategorię "agencje towarzystkie" albo i setkę nowych kategorii ;)

0
cs napisał(a):

Jedyne co mi przychodzi do głowy, żeby to zrobić bez ajax'u, to zrób niewidoczny formularz, wrzuć do niego zmienne i programowo wywołaj sumbit, to uruchomi Ci skrypt php podany w action i tam odczytasz swoje zmienne.

Jednak wolałbym użyć do tego $.post( "test.php", { zmienna: "wartosc" });. Czy wiesz jak mogę w php odebrać wysłaną tu zmienną?

0

$_POST["zmienna"]

0

Ok, mam taki kod:
JS:

function kupdomek()
{
    var cena = 25;
    if(monety < cena)
    {
        alert("Nie stać cię na zakup domku.");
    }else{
        monety = monety - 25;
        $.post( "game.php", { monety: monety });
    }
}

I php:


 <div id="monety">Monety: <?php echo $_POST['monety'] ?></div>

A pokazuje

Notice: Undefined index: monety in C:\xampp\htdocs\gra\game.php on line 41

Ps. Taką linijkę mam w game.php:

<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
1
Haskell napisał(a):

$_POST["zmienna"]

W PHP i JS nie jestem na poziomie rektor-dziekan, ale {"zmienna":wartość} wygląda na JSON'a więc raczej chyba trzeba to zdedżejsonować: json_decode($_POST)

0
cs napisał(a):
Haskell napisał(a):

$_POST["zmienna"]

W PHP i JS nie jestem na poziomie rektor-dziekan, ale {"zmienna":wartość} wygląda na JSON'a więc raczej chyba trzeba to zdedżejsonować: json_decode($_POST)

Jeśli miałem to do php wstawić, to pokazuje:

Warning: json_decode() expects parameter 1 to be string, array given in C:\xampp\htdocs\gra\game.php on line 8

0

$_POST[0] -> Undefined offset: 0 in C:\xampp\htdocs\gra\game.php on line 42

var_dump($_POST['monety']) -> Notice: Undefined index: monety in C:\xampp\htdocs\gra\game.php on line 41
NULL

Może to dla tego, że post odbiera tylko raz na początku, bo wtedy nie jest ustalone (dopiero po naciśnięciu submita)?

0

To jeszcze spróbuj tak:

$post = file_get_contents('php://input');
json_decode($post);
0
cs napisał(a):

To jeszcze spróbuj tak:

$post = file_get_contents('php://input');
json_decode($post);

Wyskakuje > Notice: Undefined index: monety in C:\xampp\htdocs\gra\game.php on line 43
Wydaje mi się, że to przez to, że po naciśnięciu na przycisk post się wysyła, a php bierze go na początku.

0

Musisz sprawdzać czy masz coś w post

if ($_POST('zmienna')) echo $_POST('zmienna') else echo 'dupa';

0
Haskell napisał(a):

Musisz sprawdzać czy masz coś w post

if ($_POST('zmienna')) echo $_POST('zmienna') else echo 'dupa';

Ok, pokazuje:

Fatal error: Uncaught Error: Function name must be a string in C:\xampp\htdocs\gra\game.php:30 Stack trace: #0 {main} thrown in C:\xampp\htdocs\gra\game.php on line 30

Kod (php):

$post = file_get_contents('php://input');
    json_decode($post);
if($_POST('monety'))
    {
      echo $_POST('monety');
    }else{ 
      echo 'dupa';
    };

JS:

function kupdomek()
{
   var cena = 25;
   if(monety < cena)
   {
       alert("Nie stać cię na zakup domku.");
   }else{
       monety = monety - 25;
       $.post( "game.php", { monety: monety });
   }
}
0

Zmieniłem nawiasy na klamrowe w if($_POST['monety']) i pokazuje:

Notice: Undefined index: monety in C:\xampp\htdocs\gra\game.php on line 30
dupa

0

Sorry dawno nie pisałem w PHP. Musisz użyć funkcji isset()
czyli if(isset($_POST['zmienna'])) i reszta tak jak masz

0
Haskell napisał(a):

Sorry dawno nie pisałem w PHP. Musisz użyć funkcji isset()
czyli if(isset($_POST['zmienna'])) i reszta tak jak masz

Mam: (php)

if(isset($_POST['monety']))
    {
      echo $_POST('monety');
    }else{ 
      echo 'dupa';
    };

I nic nie pokazuje, a jak wyślę to też nic nie pokazuje.

0
Gouda105 napisał(a):
Haskell napisał(a):

Musisz sprawdzać czy masz coś w post

if ($_POST('zmienna')) echo $_POST('zmienna') else echo 'dupa';

Ok, pokazuje:

Fatal error: Uncaught Error: Function name must be a string in C:\xampp\htdocs\gra\game.php:30 Stack trace: #0 {main} thrown in C:\xampp\htdocs\gra\game.php on line 30

Kod (php):

$post = file_get_contents('php://input');
    json_decode($post);
if($_POST('monety'))
    {
      echo $_POST('monety');
    }else{ 
      echo 'dupa';
    };

JS:

function kupdomek()
{
   var cena = 25;
   if(monety < cena)
   {
       alert("Nie stać cię na zakup domku.");
   }else{
       monety = monety - 25;
       $.post( "game.php", { monety: monety });
   }
}

W kupdomek() wysyłanie post'a zmień na:

$.post( "game.php", { "monety": monety });

i powinno działać

0
cs napisał(a):
Gouda105 napisał(a):
Haskell napisał(a):

Musisz sprawdzać czy masz coś w post

if ($_POST('zmienna')) echo $_POST('zmienna') else echo 'dupa';

Ok, pokazuje:

Fatal error: Uncaught Error: Function name must be a string in C:\xampp\htdocs\gra\game.php:30 Stack trace: #0 {main} thrown in C:\xampp\htdocs\gra\game.php on line 30

Kod (php):

$post = file_get_contents('php://input');
    json_decode($post);
if($_POST('monety'))
    {
      echo $_POST('monety');
    }else{ 
      echo 'dupa';
    };

JS:

function kupdomek()
{
   var cena = 25;
   if(monety < cena)
   {
       alert("Nie stać cię na zakup domku.");
   }else{
       monety = monety - 25;
       $.post( "game.php", { monety: monety });
   }
}

W kupdomek() wysyłanie post'a zmień na:

$.post( "game.php", { "monety": monety });

i powinno działać

Już rozwiązałem problem, ale dziękuję za pomoc.

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