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ą.
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.
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?
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.
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ć.
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ąć.
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ę.
No to przeczytaj ten wpis: https://kursjs.pl/kurs/ajax/xmlhttprequest.php
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.
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" });
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.
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.
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 ;)
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 waction
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ą?
$_POST["zmienna"]
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>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)
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
$_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)?
To jeszcze spróbuj tak:
$post = file_get_contents('php://input');
json_decode($post);
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.
Musisz sprawdzać czy masz coś w post
if ($_POST('zmienna')) echo $_POST('zmienna') else echo 'dupa';
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 });
}
}
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
Sorry dawno nie pisałem w PHP. Musisz użyć funkcji isset()
czyli if(isset($_POST['zmienna'])) i reszta tak jak masz
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.
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ć
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.