Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: ajax,php pobieranie danych
Forum PHP.pl > Forum > PHP
czarkowy
Czesc,
mam taki skrypt php:
  1. <?php
  2.  
  3.  
  4. header('Content-type: application/json');
  5.  
  6. include 'db_connect.php';
  7.  
  8. $username = $_SESSION['username'];
  9.  
  10. $sql = "SELECT backpack_items FROM users WHERE username='$username'";
  11.  
  12. $result = mysqli_query($conn, $sql);
  13.  
  14. $rowNum = mysqli_fetch_assoc($result);
  15.  
  16. $items = explode(',', $rowNum['backpack_items']);
  17.  
  18. for($i = 0; $i < count($items); $i++) {
  19.  
  20. $where = intval($items[$i]);
  21.  
  22. $sqlItem = "SELECT * FROM items WHERE id='$where'";
  23.  
  24. $resultItem = mysqli_query($conn, $sqlItem);
  25.  
  26. $items[$i] = mysqli_fetch_assoc($resultItem);
  27. }
  28.  
  29. echo json_encode($items);

i java script:
[JAVASCRIPT] pobierz, plaintext
  1. $.ajax({
  2. type: 'POST',
  3. url: 'data/php/eq.php',
  4. contentType:"application/json; charset=utf-8;",
  5. dataType:'json',
  6. success: function(items) {
  7. console.log(items);
  8. }
  9. });
[JAVASCRIPT] pobierz, plaintext


dane z bazy danych sa pobierane prawidlowo, var_dump($items); zwraca poprawna tablice, więc dlaczego w pliku js ich tak jakby nie ma? jak podgladam zrodlo strony to w kodzie js, nawet nie widac zawartosci funkcji success, tzn wyglada to tak:

[JAVASCRIPT] pobierz, plaintext
  1. $.ajax({
  2. type: 'POST',
  3. url: 'data/php/eq.php',
  4. contentType:"application/json; charset=utf-8;",
  5. dataType:'json',
  6. success: function(items) {
  7.  
  8. }
  9. });
[JAVASCRIPT] pobierz, plaintext
viking
Co widzisz w konsoli przeglądarki, zakładka sieć?
czarkowy
Cytat(viking @ 30.08.2017, 20:48:39 ) *
Co widzisz w konsoli przeglądarki, zakładka sieć?



viking
Na przesłanym żądaniu, w odpowiedzi. Myśl trochę.
czarkowy
Cytat(viking @ 30.08.2017, 20:55:04 ) *
Na przesłanym żądaniu, w odpowiedzi. Myśl trochę.


viking
Miałeś tylko sprawdzić a nie wrzucać ciągle zdjęcia. Jak widzisz content length 0. Nic nie zwracasz.
czarkowy
Cytat(viking @ 30.08.2017, 21:04:00 ) *
Miałeś tylko sprawdzić a nie wrzucać ciągle zdjęcia. Jak widzisz content length 0. Nic nie zwracasz.

no, że nic nie zwracam to wiem caly czas i to content-length tez zauwazylem,
tylko wlasnie nie wiem dalczego nic nie jest zwracane
viking
Błąd w zapytaniu? Włącz wyświetlanie błędów. Dlaczego ciągle nadpisujesz items?
czarkowy
Cytat(viking @ 30.08.2017, 21:19:42 ) *
Błąd w zapytaniu? Włącz wyświetlanie błędów. Dlaczego ciągle nadpisujesz items?

ale ktorym zapytaniu?
zapytania sql zwracaja mi poprawne tablice,
nadpisuje items bo i tak w dalszej czesci skryptu nadpisana tresc nie jest potrzebna
viking
Aha. A jak działa pętla for? W szczególności ten count przy każdym przebiegu. Skoro twierdzisz że ci zwraca dane to nie może być length 0.
czarkowy
Cytat(viking @ 30.08.2017, 21:32:29 ) *
Aha. A jak działa pętla for? W szczególności ten count przy każdym przebiegu. Skoro twierdzisz że ci zwraca dane to nie może być length 0.


no iteruje mi po tablicy items pobranej z bazy, ale to nie ma znaczenia,
bo probowalem nawet zostawic takie cos w skrypcie:
  1.  
  2. <?php
  3.  
  4.  
  5. header('Content-type: application/json');
  6.  
  7. include 'db_connect.php';
  8.  
  9. $username = $_SESSION['username'];
  10.  
  11. $sql = "SELECT backpack_items FROM users WHERE username='$username'";
  12.  
  13. $result = mysqli_query($conn, $sql);
  14.  
  15. $rowNum = mysqli_fetch_assoc($result);
  16.  
  17. $items = $rowNum['backpack_items'];
  18.  
  19. var_dump($items);
  20.  
  21. echo json_encode($items);


i var_dump zwraca poprawnie tablica, natomiast do pliku js nic nie dochodzi,
mam kilka podobnych zapytan ajax/php do bazy i sa tak samo praktycznie stworzone i dzialaja ;p a tutaj cos nie styka ;p

w sumie mozliwe, ze to przez to lączenie sie z bazą danych w tym forze ;p bo w innym pliku przesyla mi te dane, a jak dodam tego fora to juz nie ;p tylko nie wiem jak to zrobic tak aby dzialalo ;p
viking
To odpowiedź mi proszę jak ta iteracja się odbywa. Chętnie poslucham.
Jeśli robisz var_dump to success nie zadziała bo nie masz poprawnej odpowiedzi json. Masz sprawdzać w odpowiedzi (w konsoli) co konkretnie jest zwracane.
czarkowy
Cytat(viking @ 30.08.2017, 21:48:16 ) *
To odpowiedź mi proszę jak ta iteracja się odbywa. Chętnie poslucham.
Jeśli robisz var_dump to success nie zadziała bo nie masz poprawnej odpowiedzi json. Masz sprawdzać w odpowiedzi (w konsoli) co konkretnie jest zwracane.


no interacja dziala tak:

z bazy danych pobieram stringa: 1,1,1
rozdzielam go przecinkami tak aby miec tablice $items = (0=>1, 1=>1, 2=>1);
i kazdy z elementow tej tablicy jest id wersu z bazy danych

//zwraca ilosc elementow tablicy
count($items)

//tutaj pobieram caly wers z tablicy w bazie o id jakim zawiera pole tablicy tzn $items[0] = 1, $items[1] = 2 ...
$where = intval($items[$i]);
$sqlItem = "SELECT * FROM items WHERE id='$where'";

//zwracam zapytanie
$resultItem = mysqli_query($conn, $sqlItem);

//tworze tablice asocjacyjna i nadpisuje komorke w tablicy $items
$items[$i] = mysqli_fetch_assoc($resultItem);

no i na koniec mam tablice asocjacyjna $items ze wszystkimi wersami o takich id jakie byly zawarte w pobranym wczesniej stringu

viking
Nie uda się wczytać db_connect.php - skrypt leży. Nie znajdzie użytkownika - leży. Explode nie zwróci danych - leży. Któreś z zapytań nie zadziała - leży. Jest tyle miejsc do błędu że wcale mnie nie dziwi brak odpowiedzi. Przy każdym przebiegu zliczasz od nowa tablicę. Skoro masz oddzielone przecinkiem dane to aż się prosi żeby to do IN wrzucić i nie mielić.
dvdx95
skoro twierdzisz ze plik php zwraca ci poprawnie tablice to moze cos nie tak z tym ajaxem jest.

  1. $.ajax({
  2. url:"data/php/eq.php",
  3. success:function(data){
  4. try{
  5. data = JSON.parse(data);
  6. console.log(data);
  7. }catch(err){
  8. console.log(err);
  9. }
  10. }
  11. });
czarkowy
Cytat(viking @ 30.08.2017, 22:36:13 ) *
Nie uda się wczytać db_connect.php - skrypt leży. Nie znajdzie użytkownika - leży. Explode nie zwróci danych - leży. Któreś z zapytań nie zadziała - leży. Jest tyle miejsc do błędu że wcale mnie nie dziwi brak odpowiedzi. Przy każdym przebiegu zliczasz od nowa tablicę. Skoro masz oddzielone przecinkiem dane to aż się prosi żeby to do IN wrzucić i nie mielić.


zrobilem to za pomoca petli foreach ;p
  1. foreach($items as $item) {
  2.  
  3. $sqlItem = "SELECT * FROM items WHERE id='$item'";
  4.  
  5. $resultItem = mysqli_query($conn, $sqlItem);
  6.  
  7. $item = mysqli_fetch_assoc($resultItem);
  8. }
  9.  


i teraz dochodzi mi taka tablica items(1,1,1);
a powinna dojść tablica w ktorej kazda z komorek zawiera kolejna tablice ;p



viking
Bo nadpisujesz.

  1. SELECT * FROM items WHERE find_in_set(id, (SELECT backpack_items FROM users WHERE username='$username'));
czarkowy
Cytat(viking @ 30.08.2017, 23:13:11 ) *
Bo nadpisujesz.

  1. SELECT * FROM items WHERE find_in_set(id, (SELECT backpack_items FROM users WHERE username='$username'));


nie rozumiem, co nadpisuje? ;/
to zapytanie co podales tez zwraca items(1,1,1);
viking
Masz to zapytanie jako jedyne. Poza jakąkolwiek pętlą.
czarkowy
Cytat(viking @ 30.08.2017, 23:24:39 ) *
Masz to zapytanie jako jedyne. Poza jakąkolwiek pętlą.

no okej, ale to zwraca tylko jeden rekord z bazy,
a mi chodzi o takie dzialanie
mam 2 tabele w bazie
users:
id:3
nick=tomek
items=1,2,1

items:
id=1
name=sword
demage=3
hp=5

id=2
name=swordPro
demage=5
hp=5


i ten uzytkownik ma 3 przedmioty o id 1 id 2 id1
i chce wyiterowac te wszystkie 3
$items = [
0 = > [1,'sword',3,5],
1 => [2,'swordPro',5,5],
2 => [1,'sword',3,5]
];

i aby to wyglądalo tak^
viking
I oczywiście używasz http://php.net/manual/en/mysqli-result.fetch-all.php?
dvdx95
http://php.net/manual/en/function.array.php
czarkowy
Cytat(viking @ 30.08.2017, 23:44:39 ) *


dziala ;d ale z wyjatkiem takim, ze jak uzytkownik ma 2 takie same przedmioty to drugiego juz nie wypisze ;x
przejrzałem kilka stron i jest mozliwosc jakos zaznaczyc w tym field in set, aby nie poprzestawalo od razu po napotkaniu szukanego stringa?

dobra jednak nie dziala ;p
znowu dane nie dochodza...

okej ;d to chyba nie bylo zadnych problemow ;d
postanowilem sobie juz z braku laku zmienic zawartosci pol w tablicy items i okazalo sie, ze dane nie chcialy sie przeslac przez to, ze pola zawieraly polskie znaki
viking
JSON akceptuje tylko UTF-8. Powinieneś zrobić to porządnie i stworzyć nową tabelę user_id, item_id, quantity.
czarkowy
Cytat(viking @ 31.08.2017, 07:51:27 ) *
JSON akceptuje tylko UTF-8. Powinieneś zrobić to porządnie i stworzyć nową tabelę user_id, item_id, quantity.

na pewno poczytam o tym, ale narazie raczej zrobie to po prostu po angielsku wszystko ;d
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.