shpaque
29.11.2017, 01:10:24
I znów mam zagwostkę i szukałem i nie wiem.
Mam 3 pozycje z rekordami z pliku (w php), do kazdej jest button, ktory otwiera okno modal.
Jak zrobic zeby po kliknieciu buttona i otwarciu okna modal wyswietlic dane ze zmiennymi php (zeby wiedzial z jakiego rekordu)
czyli po polsku
buttony maja odpowiednio id 0,1 i 2 - jak przypisac zmienna w php zalozmy $x, ktora pobierze id z JS aktualnie kliknietego buttona?
<button type="button" id="0" onclick="value(this.id)">...</button>
tu mamy i teraz jak zrobic zeby zmienna php $x przybrala i pobnrala wartosc ID buttona?
viking
29.11.2017, 07:25:41
shpaque
29.11.2017, 11:46:32
przegladam i jest tego tyle ze juz sie pogubilem gdzie szukac...
<script>
function value(a)
{
var $x = $('a');
}
</script>
to o ten wycinek chodzi?
najgorsze jest to ze w ogole nie reaguje na funkcje (button) jak w onclick dam alert - dziala, ale jak dam w onclick funkcje a w niej alert (dla testu) to nic sie nie dzieje
https://jsfiddle.net/dbep8u92/
viking
29.11.2017, 13:03:12
No nie, chodzi o fragment $.ajax({... i zobacz jak są zdarzenia podpinane.
shpaque
29.11.2017, 13:17:08
i nie idzie tego w jakis prostszy sposob (cos takiego) zrobic? bo wtedy z postem musi byc przeladowana strona? rozumiem ze z ajaxem on wrzuca zmienne z butona (jego ID) do jakiegos pliku php, a pozniej trzeba z php to wyciagnac - co w przypadku kiedy 3 osoby na raz klinka button? jak wyswietli prawidlowy modal? Moze ja zle to oipsalem...
<script>
function myFunction(id)
{
$x = document.getElementById(id);
}
</script>
<?php
$x = "<script>function myFunction(id){alert(id);}</script>";
?>
chodzi mi tylko o to, zeby w modalu zostaly pobrane (bez przeladowania) odpowiednie rekordy z linii z pliku (przez php) - musze tylko przekazac do modala cyfre 0 1 lub 2 przy pomocy buttona (jS)
@edit - albo prosciej:
jak zrobic zeby oncick'iem przypisac do zmiennej php "$x" wartosc id buttona - tylko tyle
viking
29.11.2017, 13:31:17
PHP działa po stronie serwera, JS klienta. Kiedy dochodzi do JS, PHP już dawno zakończyło swoją pracę. Aby to przeładować dynamicznie musisz wysłać nowy request do PHP. Poczytaj jeszcze to
https://prophp.pl/advice/show/20/pierwsze_k..._i_czym_jest%3F
shpaque
29.11.2017, 14:39:45
wymiekam juz powoli

kiedy tutaj rozwiazalismy ten problem (niestety tematu nie udalo mi sie odnalezc) to bylo cos bardzo prostego nie wiem czy ajaxem czy raczej jquery sie tego nie zrobilo - to byla jedna linijka i wszystko bylo przekazywane...
to moze nie przez ajax i js tylko samym php? tylko wtedy button musialby byc w formularzu, tak? i wtedy getem do modala?
moze zobaczcie strone bedzie wam latwiej zrozumiec
http://www.uniwersytet-rodzica.pl/_________________________
dobra to pomozcie mi w jednym w takim razie
jak zrobic w tej funkcji sesje GET, ktora jako zmienna $_GET['id'] w php pobiore w modalu - mozecie mi to napisac?
nospor
29.11.2017, 14:43:13
czytam i czytam i juz nie moge...

viking poprostu chyba cie nie zrozumial. Oczywiscie, ze ajax tu nie jest potrzebny, mozesz dodac proste zmienne do buttona jak najbardziej, np
<button data-zm1="jakas wartosc1 z php" data-zm2="jakas wartosc2 z php">button 1</button>
<button data-zm1="jakas wartosc1 z php dla drugiego buttona" data-zm2="jakas wartosc2 z php dla drugiego buttona">button 2</button>
itd
shpaque
29.11.2017, 15:23:57
no dobra w ta strone mamy

a teraz jak zrobic zeby button jakas wartosc przypisal - a nie pobral
kombinuje w ta strone:
<script>
function myFunction(id)
{
var url = document.URL + '?id=' + id;
history.pushState(undefined, '', url);
}
</script>
ale wtedy mimo ze php inclue z plikiem ktory ma geta pobrac jest dalej w kodzie - zostal juz wykonany... i teraz juz dalej nie wiem
nospor
29.11.2017, 15:38:17
Dobra, teraz ja sie zgubilem. Przez caly temat chciales w button "pobrac cos z php" teraz cchcesz cos przypisac do php? Nie kumam. Co znaczy przypisac do php? By przypisac cos do php to masz wyslac kolejny request, czy to ajax czy normalnie.
shpaque
29.11.2017, 19:49:15
to z drugiej strony
chce zeby okno modalu, ktore otwiera sie po klikniecu buttona "pobrało" id tego buttona (wartość odpowiednio 0, 1 lub 2) i przypisało jego wartość do zmiennej php $x bez przeładowania strony - bo ta zmienna ($x) w modalu wyswietlane sa dane z pliku.
moja "mądra" głowa wymyśliła coś takiego, ale to nie przejdzie...
<script>
function myFunction(id)
{
var url = document.URL + '?id=' + id;
history.pushState(undefined, '', url);
<?php
$x = $_GET['id'];
?>
}
</script>
viking
29.11.2017, 20:26:34
Już ci powiedziałem jak działa PHP i JS oraz jak to zrobić.
shpaque
29.11.2017, 21:25:06
zobacz moja odpowiedz - co z przeladowaniem strony? co z momentem kiedy kilka osob na raz kliknie w ten button?
moze po prostu nakieruj mnie bardziej...
viking
29.11.2017, 21:40:06
A ja już ci pisałem jakie są fazy pracy client i server side. A co ma być jak kilku kliknie? Normalne zachowanie request response.
shpaque
29.11.2017, 22:05:18
i tak nic nie wiem, no mam sobie ajaxa - i co teraz?
function myFunction(id)
{
$.ajax({
url: './index.php',
method: 'POST',
x: {id: id,}
})
// odpowiedź poprawna, domyślnie kod 200
.done(function(x, textStatus, jqXHR) {
// zmienna data będzie zawierać dane wysłane przez serwer w odpowiedzi
})
// odpowiedź błędna, np. kod 500
.fail(function(jqXHR, textStatus, errorThrown) {
});
}
no i co? mam sobie cos takiego i co mi ma to dac? url sie zgadza, metoda post, zmienna x z ajaxa nagle zmieni sie w zmienna $x php?
viking
29.11.2017, 22:18:52
Po stronie PHP odczytujesz standardowo tablicę post i robisz co tam chcesz. Zwracasz odpowiedź do js.
shpaque
29.11.2017, 22:20:34
po stronie php mam
<?php
$x = $_POST['x'];
?>
i i tak nie dziala.
viking
29.11.2017, 22:31:33
A co ma działać? Przypisujesz zmienną i tyle. Kurcze, jesteś od 6 lat na forum. Jakieś podstawy wypadało by znać.
shpaque
29.11.2017, 22:39:47
no jestem Viking, ale wysylam wycinki kodu - po to zeby ktos mi powiedzial co jest tu nie tak ze nie dziala... Przeciez gdybym wiedzial co robic nie pisalbym posta. Skoro ajax jest dla mnie malo znany i nic mi nie da czytanie kilogramow poradnikow i tutoriali skoro nie wiem co mam zrobic...
a nie daloby sie getem prosciej, npo cos takiego?
function myFunction(id)
{
r.open('GET', 'index.php?id=' + id, true);
}
i tam daje
$x = $_GET['id'];
ale to tez nie dziala...
...widzisz ze kombinuje w kazda strone jak sie da bo nie wiem co mam robic - to ze mi wyslesz linka z kompendium ajaxa nic mi nie da - nie jestem programista zeby lapac takie rzeczy w locie - trzeba mi jak krowie na miedzy pokazac przyklad step by step co zrobic zeby to dzialalo
viking
29.11.2017, 22:50:16
W artykule było krok po kroku. Rzucasz jakimś losowym kodem i mamy się domyślać?
shpaque
30.11.2017, 00:09:17
a w ten desen nic?
function myFunction(id)
{
var x = id;
if (x = 0)
{
<?php $x = 0; ?>
}
else if (x = 1)
{
<?php $x = 1; ?>
}
else if (x = 2)
{
<?php $x = 2; ?>
}
}
prosze kod (wczesniej przygotowalem wszystko w jsfiddle i dalem link, dodatkowo dalem link do strony www gdzie jest opisywany problem...:
<table class="tabelka">
<tbody>
<tr class="table-row">
<td class="td" width="20%" style="background:rgba(2, 5, 35, 0.2);"><span class="date-big"><?php echo "$day[0] <b>$month[0]</b>"; ?></span><span class="date-small"><?php echo "<br>za $rozpoczecies[0] $dzien[0]"; ?></span></td>
<td class="td" width="80%"><span class="city"><?php echo $citys[0]; ?></span></td>
<td class="td" style="padding-right:8px;"><button id="0" type="button" class="btn btn-d button" style="width:100%;height:40px;margin-top:5px;" data-toggle="modal" data-target="#modalRejestracja" onclick="myFunction(this.id)">Zarejestruj się</button></a></td>
</tr>
<tr class="table-row">
<td class="td" width="20%" style="background:rgba(2, 5, 35, 0.2);"><span class="date-big"><?php echo "$day[1] <b>$month[1]</b>"; ?></span><span class="date-small"><?php echo "<br>za $rozpoczecies[1] $dzien[1]"; ?></span></td>
<td class="td" width="80%"><span class="city"><?php echo $citys[1]; ?></span></td>
<td class="td" style="padding-right:8px;"><button id="1" type="button" class="btn btn-d button" style="width:100%;height:40px;margin-top:5px;" data-toggle="modal" data-target="#modalRejestracja" onclick="myFunction(this.id)">Zarejestruj się</button></td>
</tr>
<tr class="table-row">
<td class="td" width="20%" style="background:rgba(2, 5, 35, 0.2);"><span class="date-big"><?php echo "$day[2] <b>$month[2]</b>"; ?></span><span class="date-small"><?php echo "<br>za $rozpoczecies[2] $dzien[2]"; ?></span></td>
<td class="td" width="80%"><span class="city"><?php echo $citys[2]; ?></span></td>
<td class="td" style="padding-right:8px;"><button id="2" type="button" class="btn btn-d button" style="width:100%;height:40px;margin-top:5px;" data-toggle="modal" data-target="#modalRejestracja" onclick="myFunction(this.id)">Zarejestruj się</button></td>
</tr>
</tbody>
</table>
<?php include("./php/modal-rejestracja.php"); ?>
a w pliku modal-rejestracja:
<script>
function myFunction(id)
{
var x = id;
if (x = 0)
{
<?php $x = 0; ?>
}
else if (x = 1)
{
<?php $x = 1; ?>
}
else if (x = 2)
{
<?php $x = 2; ?>
}
}
</script>
<!-- Modal -->
<div class="modal fade" id="modalRejestracja" role="dialog">
<div class="modal-dialog">
<!-- Modal content-->
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<span class="modal-title">Rejestracja na spotkanie</span>
<div class="pink">
<span class="modal-title">
<? echo "$day[$x] <b>$month[$x]</b> $year[$x] / <b>$citys[$x]</b>"; ?></span>
</div>
</div>
<div class="modal-body">
<p>Some text in the modal.</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-d button" style="margin-top:5px;" data-dismiss="modal">Zamknij</button>
<button type="submit" class="btn btn-d button">Zarejestruj się</button>
</div>
</div>
</div>
</div>
...w takim razie podaje sobie ajax i zapytam jeszcze raz - co tu nie dziala?
<script>
function myFunction(id)
{
$.ajax({
type: "GET",
url: "index.php",
dataType: "json"
data: {id: "id=" + id,},
})
.done(function(json){
});
}
</script>
<?php
$x = $_GET['id'];
?>
viking
30.11.2017, 06:13:22
$('.tabelka').on('click', '.btn', function(e){
e.preventDefault();
var id = $(this).attr('id');
myFunction(id);
})
<?php
header("Content-Type: application/json;charset=utf-8"); echo json_encode
($_POST['id']);
.done(function(json){
console.log(json)
});
nospor
30.11.2017, 10:29:49
No i to jest bledne
data: {id: "id=" + id,},
tak ma byc
data: {"id": id},
No i to
echo json_encode($_POST['id']);
dane wysylane sa getem (przynajmniej tak wynika z kodu) wiec
echo json_encode($_GET['id']);
shpaque
30.11.2017, 10:51:12
dziękuję Ci bardzo - nie wpadl bym zeby to tak rozpisac... :/
teraz prosze o jedno - powiedz jak i gdzie mam to umiescic - skrypt przed tabelka czy po? php w skrypcie czy poza?
... i czy jakas bibilioteke mam pobrac?
nospor
30.11.2017, 10:53:21
Cytat
i czy jakas bibilioteke mam pobrac?
viking podal kod z uzyciem jQuery, ktore jak widac i ty uzywasz wiec nie, nie musisz pobierac dodatkowej biblioteki
shpaque
30.11.2017, 11:09:21
dzieki za info - tylko teraz pytanie jak to ma zadzialac, dal mi w 3 paczkach kody - skrypt, php i skrypt
- czy to wszystko ma byc w jednym skrypcie w jednym miejscu?, czy php ma byc za czy przed skryptem i czy skrypty maja byc rozdzielone czy .done ma byc w tym samym?
przez 'skrypt' mam na mysli js/jquery
viking
30.11.2017, 11:11:34
Dobrą praktyką jest wydzielenie JS do osobnego pliku a nie mieszanie tak jak to robisz. Plik php jest niezależny i będzie do niego request ajaksowy skierowany.
nospor
30.11.2017, 11:12:39
skrypt 1
to jest skrypt, ktory masz umiescic pod swoja tabelka
skrypt 2 (php)
to jest skrypt php, wiec ma byc oddzielnym plikiem php do ktorego slesz AJAX.
Mozesz to upchac w jeden index jak sie upeirasz ale bedziesz mial burdel
skrypt 3
to jest koncowka twojego skryptu, gdzie slales AJAX. Nie widzisz ze to jest tylko urywek .done ?
shpaque
30.11.2017, 11:32:12
czyli w calosci js ma wygladac mniej wiecej tak?
<script>
function myFunction(id)
{
$.ajax({
type: "GET",
url: "plik-php-ajax.php",
dataType: "json"
data: {id: id},
})
$('.tabelka').on('click', '.btn', function(e){
e.preventDefault();
var id = $(this).attr('id');
myFunction(id);
.done(function(json){
console.log(json)
});
})
}
</script>
a kod php w pliku docelowym i tyle?
nospor
30.11.2017, 11:40:59
twoj pierwotny kod wygladal tak
function myFunction(id)
{
$.ajax({
type: "GET",
url: "index.php",
dataType: "json"
data: {id: "id=" + id,},
})
.done(function(json){
});
}
czego nie rozumiesz w zdaniue:
"kod z .done vikinga jest wycinkiem .done z twojego kodu"
?
shpaque
30.11.2017, 11:45:03
tu rozumiem, ale w miedzyczasie on mi wyslal jeszcze jquery i nie wiem czy to mam ignorowac i podmienic tylko .done, a zostawic moj pierwotny kod, pisac wszystko ladnie z dodatkiem od niego w postaci drugiego wpisu jquery?
nospor
30.11.2017, 11:54:41
wyslal ci dwa kody js. Jeden to byl nowy kod, drugi to byla podmianka .done w twoim starym. Co tu niejasnego? Czemu uwazasz, ze nagle podmianka .done ma lezec sobie gdzies indziej?
shpaque
30.11.2017, 12:24:26
ok to mam:
<script>
function myFunction(id)
{
$.ajax({
type: "GET",
url: "./php/ajax.php",
dataType: "json",
data: {id: id},
})
.done(function(json){
console.log(json)
});
}
</script>
a w pliku php po sciezce:
<?php
header("Content-Type: application/json;charset=utf-8"); echo json_encode
($_GET['id']); ?>
i nie działa. a gdzie i jak (jeszcze raz po skrypcie mam $_GETem pobrac zmienna do $x?
nospor
30.11.2017, 12:27:13
Przestan pisac "nie dziala"
Pisz, jak sprawdzasz ze nie dziala. Idzie jakis AJAX w ogole? Sprawdzales console js bo tam to wszystko widac
shpaque
30.11.2017, 12:32:17
hehe

powiedz mi jak sprawdzic console to sprawdze

a GET powinien byc type czy method?
nospor
30.11.2017, 12:37:25
Jak sprawdzic konsole? Otwierasz i sprawdzasz

Nie wiem jakiej przegladarki uzywasz, ale sobie w pisze w google
twoja przegladarka devtools
shpaque
30.11.2017, 12:39:29
zrobilem cos takiego i alerta nie wywala
<script>
function myFunction(id)
{
$.ajax({
type: "GET",
url: "./php/ajax.php",
dataType: "json",
data: {"id": id}
})
.done(function(json){
console.log(json);
.fail(function(jqXHR, textStatus) {
alert("Request failed: " + textStatus);
});
}
</script>
to konsola:
Uncaught SyntaxError: Unexpected token .
index.php:143 Uncaught ReferenceError: myFunction is not defined
at HTMLButtonElement.onclick (index.php:143)
nospor
30.11.2017, 12:47:15
To juz wiesz czemu nie dziala. Pokaz caly kod html/js bo pewnie zle to skleciles
shpaque
30.11.2017, 12:49:10
<table class="tabelka">
<tbody>
<tr class="table-row">
<td class="td" width="20%" style="background:rgba(2, 5, 35, 0.2);"><span class="date-big"><?php echo "$day[0] <b>$month[0]</b>"; ?></span><span class="date-small"><?php echo "<br>za $rozpoczecies[0] $dzien[0]"; ?></span></td>
<td class="td" width="80%"><span class="city"><?php echo $citys[0]; ?></span></td>
<td class="td" style="padding-right:8px;"><button id="0" type="button" class="btn btn-d button" style="width:100%;height:40px;margin-top:5px;" data-toggle="modal" data-target="#modalRejestracja" onclick="myFunction(this.id)">Zarejestruj się</button></a></td>
</tr>
<tr class="table-row">
<td class="td" width="20%" style="background:rgba(2, 5, 35, 0.2);"><span class="date-big"><?php echo "$day[1] <b>$month[1]</b>"; ?></span><span class="date-small"><?php echo "<br>za $rozpoczecies[1] $dzien[1]"; ?></span></td>
<td class="td" width="80%"><span class="city"><?php echo $citys[1]; ?></span></td>
<td class="td" style="padding-right:8px;"><button id="1" type="button" class="btn btn-d button" style="width:100%;height:40px;margin-top:5px;" data-toggle="modal" data-target="#modalRejestracja" onclick="myFunction(this.id)">Zarejestruj się</button></td>
</tr>
<tr class="table-row">
<td class="td" width="20%" style="background:rgba(2, 5, 35, 0.2);"><span class="date-big"><?php echo "$day[2] <b>$month[2]</b>"; ?></span><span class="date-small"><?php echo "<br>za $rozpoczecies[2] $dzien[2]"; ?></span></td>
<td class="td" width="80%"><span class="city"><?php echo $citys[2]; ?></span></td>
<td class="td" style="padding-right:8px;"><button id="2" type="button" class="btn btn-d button" style="width:100%;height:40px;margin-top:5px;" data-toggle="modal" data-target="#modalRejestracja" onclick="myFunction(this.id)">Zarejestruj się</button></td>
</tr>
</tbody>
</table>
<script>
function myFunction(id)
{
$.ajax({
type: "GET",
url: "./php/ajax.php",
dataType: "json",
data: {"id": id}
})
.done(function(json){
console.log(json);
.fail(function(jqXHR, textStatus) {
alert("Request failed: " + textStatus);
});
}
</script>
nospor
30.11.2017, 12:54:26
No a gdzie tu kod ktory podpina sie pod CLICK BUTTONa?
shpaque
30.11.2017, 12:57:23
button ma onclick myFunction()
nospor
30.11.2017, 13:09:50
Komunikat mowi, ze ta funkcja nie istnieje. Wiec nie wiem jak ja dodales, ale js jej nie widzi.
A, nie widzi, bo ta funkcja ma PARSE ERRORY.....
Kurcze, przegladaj logi konsoli porzadnie, od poczatku do konca. Przeciez to masz w konsoli napisane jakie bledy sa
Otwierasz { funkcje done ale juz jej nie zamykasz }
shpaque
30.11.2017, 13:10:43
tyle ze teraz nie widzi zadnych bledow tylko jak klikam w button do mi dopisuje jego id w konsoli w wierszu: console.log(json);
tylko co mi po tym jak dalej nie mam pobranego id do zmiennej $x w php...
nospor
30.11.2017, 13:13:11
No i teraz w koncu dziala!!!!!
Teraz wlasnie udalo ci sie wyslac to ID do skryptu php. Rob se teraz z nim co chcesz. viking tylko podal przyklad przeciez
shpaque
30.11.2017, 13:17:30
no dobra to teraz jak go przypisac do zmiennej $x skoro jest tylko pobrany z pliku php i dalej zostaje w skrypcie js
nospor
30.11.2017, 13:18:15
Zamiast
header("Content-Type: application/json;charset=utf-8");
echo json_encode($_GET['id']);
daj
$x = $_GET['id'];
TADA
shpaque
30.11.2017, 13:24:51
no wlasnie nie TADA

bo co mi po tym ze zdefiniuje $x w pliku ajax.php - skoro to plik tylko po to utworzony zeby tam wyslac zmienna z js'a
- teraz wypadaloby pobrac zmienna z ajax.php i przypisac ja do zmiennej $x w index.php gdzie najduje sie caly kod i skrypt
nospor
30.11.2017, 13:25:23
No to wiesz co robic
shpaque
30.11.2017, 13:30:52
includowac plik ajax.php?
nospor
30.11.2017, 13:31:43
Dobra, inaczej: co zes sie tego $x tak uczepil? Co zamierzasz potem z tym robic?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.