• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

pobranie atrybutu, wysłanie zapytania do sql i wyświetlenie danych [PHP,JS,AJAX]

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
1,060 wizyt
pytanie zadane 1 marca 2018 w JavaScript przez damian9901 Bywalec (2,140 p.)

Witam, jak można zobaczyć po temacie mam pewną koncepcję wykonania skryptu, aczkolwiek nie jestem pewny, czy jest to dobry pomysł. 

A więc...:

Zależy mi na pobranie atrybutu z odnośnika, np: <a data-id="11"></a>  ( czyli pobranie wartości 11), następnie wykonanie zapytania sql ( przy pomocy php,ajax,sql), który sprawdzi jakie dane posiadają id=11, a następnie wyświetli te wartości na stronie. Bez odświeżania.

 

Fragment kodu poniżej:

1)

		$("#profile").click(function(){
			
            var id = $('#profile').attr('data-id');
			alert(id);
			var url = "<?php SendIDPlayerAjax(); ?>";

			$.ajax({
				type: 'POST',
				url: url,
				data: 'id='+id,
				success: function(data){
					console.log(id);
				}
				
			});
		  
		});

2)

	function SendIDPlayerAjax(){
		if(isset($_GET['id'])){
			$id = $_GET['id'];
			$vv = new AddService();
            $vv->GetPlayer($id);
		}
	}

3)

	public function GetPlayer($id){
		$query="SELECT * FROM zawodnik WHERE id_zawodnika='".$id."'";
		$result = $this->db->query($query);
		if($result->num_rows>0){
			return true;
		}else return false;
	}

Nie wiem, czy to dobre rozwiązanie. Czekam na Wasze porady, pozdrawiam :)

2 odpowiedzi

+1 głos
odpowiedź 1 marca 2018 przez Paweł Antyporowicz Stary wyjadacz (11,470 p.)

Zacznijmy od tego, że wysyłasz zapytanie POST w Ajaxie a chcesz je odebrać z tablicy _GET w PHP. To nie przejdzie.

Po drugie masz źle przypisaną wartość zmiennej wysłanej w Ajaxie. Musisz to zapisać w formacie json, np tak:

$.ajax({
  url: "URL"
  method: "POST",
  data: { id : id }
});

Po wysłaniu zapytania Ajax, możesz je odebrać z tablicy _POST
 

$id = $_POST['id']'

Edit:
Jquery ma wbudowaną funkcję, która pobiera wartość z data:

$( "#profile" ).data( "id" );
komentarz 1 marca 2018 przez damian9901 Bywalec (2,140 p.)
Dziękuję za te poprawki. jeśli chodzi o metodę przesłania, to faktycznie dopiero się skapnąłem chwilę po wstawieniu kodu, aczkolwiek jest już to poprawione. Wracając do URL, to może to być w takiej formie, jak jest obecnie, czy nie? Chciałem to zrobić za pomocą funkcji. W kodzie jest to pokazane jak wyglada. A jeśli chodzi o JSON, to wartości muszę najpierw zapisać w tym formacie, a dopiero wtedy wykonać zapytanie do bazy? I tak samo na odwrót? Jeśli chodzi o pomysł owego skryptu, to przejdzie to, czy należy zmienić strukture?
komentarz 1 marca 2018 przez Paweł Antyporowicz Stary wyjadacz (11,470 p.)

Z tego co widzę, to nie wyda :D Najlepiej odwołać się do konkretnego pliku lub do routingu. Możesz funkcję, która pobiera dane z bazy danych trzymać w osobnym pliku.

Np:

$.ajax({
  url: "getDataFromDb.php"
  method: "POST",
  data: { id : id }
}).success(function (data) { 
    console.log(data);
})

W funkcji success odbierasz dane json, wysłane przez funkcje.

A dane możesz wysyłasz funkcji PHP tak:

public function GetPlayer($id){
    $query="SELECT * FROM zawodnik WHERE id_zawodnika='".$id."'";
    $result = $this->db->query($query);

    if ($result->num_rows>0) {

     header("Access-Control-Allow-Origin: *");
     header("Content-Type: application/json; charset=UTF-8");
     echo json_encode($$result->fetch_all());
    } else {
         return false;
      }
}

 

komentarz 1 marca 2018 przez damian9901 Bywalec (2,140 p.)
Zrobiłem według Twoich zaleceń. Co powinienem wykonać w dalszej części? Bo niestety nie zwraca mi tego, o co prosiłem :/
komentarz 1 marca 2018 przez Paweł Antyporowicz Stary wyjadacz (11,470 p.)
Ja tylko Cię nakierowałem, dokładnie nie wiem co masz tam w kodzie.

Musisz nauczyć się debugować kod.
komentarz 1 marca 2018 przez damian9901 Bywalec (2,140 p.)
Powiedzmy, że fragment kodu związany z moim problemem, Tobie przedstawiłem. Jestem nowy w AJAX'ie i niestety potrzebuję lekkiej pomocy w tej sprawie. Tyle, co potrafiłem, tyle wykonałem :D
komentarz 1 marca 2018 przez Paweł Antyporowicz Stary wyjadacz (11,470 p.)
Rozwiązanie praktycznie przedstawiłem Ci prawie jak na tacy.
W url wpisujesz adres do pliku lub routing do akcji. Dane odbierasz funkcją success, a jako argument tej funkcji, są to po prostu twoje dane wysłane z funkcji php.

A w funkcji php wysyłasz dane przez funkcje echo json_encode, z nagłówkiem header("Content-Type: application/json; charset=UTF-8") i tyle :P
komentarz 1 marca 2018 przez damian9901 Bywalec (2,140 p.)

Chcę po prostu wyświetlic te dane w konsoli, ale nic, pusto, jedynie pokazuje id pobranego atrybutu(chociaż coś :D ). 

		$("#profile").click(function(){
			
            var id = $('#profile').data('id');
			console.log(id);
		
			$.ajax({
				url: "../functions/getDataFromDB.php",
				method: "POST",
				data: {id : id},
			
				success: function(data){
						console.log(data);
					}
				
				
			});
		  
		});

url ustawiony poprawnie, żadnego błędu nie ma.

oddzielny plik:

	if(empty($_POST['id'])){
		$id = $_POST['id'];
		$vv = new AddService();
		$vv->GetPlayer($id);
		$_SESSION['id'] = $id;
			
	}
	

tutaj próbowałem ustawić to id do sesji, po czym to wyświetlic, ale ku mojemu zdziwieniu, po wyświetleniu tej zmiennej, ona jest pusta! Czy może być tak, że nie dochodzi do tego pliku?

 

	public function GetPlayer($id){
		$query="SELECT * FROM zawodnik WHERE id_zawodnika='".$id."'";
		$result = $this->db->query($query);
		if ($result->num_rows>0) {
			header("Access-Control-Allow-Origin: *");
			header("Content-Type: application/json; charset=UTF-8");
			echo json_encode($result->fetch_all());
		}else {
			return false;
		}
	}

(nic nie zmieniałem).

@edit: 

po prawidłowym wykonaniu skryptu ajax, w konsoli pokazuje się puste pole, tzn. że "niby" działa, aczkolwiek nie może mi tego pokazać. Muszę to w jakiś sposób odkodować? 

 

komentarz 1 marca 2018 przez Paweł Antyporowicz Stary wyjadacz (11,470 p.)

Wpadło mi do głowy co jeszcze masz nie tak... Po prostu Masz parametr we funkcji. A to zmienia postać rzeczy. Musisz we funkcji pobrać dane ze wysłane ajaxem i wtedy odebrać je z tablicy post. Ogólnie do wyświetlania danych powinno się używać metody GET.

Wtedy to możesz zrobić tak.

var id = $('#profile).data('id');
var url = 'plikPhp.php?id=' + id;

$.get( url, function(data) {
  console.log(data);
});

 

public function GetPlayer(){
     $id = $_GET['id];

    $query="SELECT * FROM zawodnik WHERE id_zawodnika='".$id."'";
    $result = $this->db->query($query);

    if ($result->num_rows>0) {
        header("Access-Control-Allow-Origin: *");
        header("Content-Type: application/json; charset=UTF-8");
        echo json_encode($result->fetch_all());
    }else {
        return false;
    }
}

Raczej powinno pomóc.

 

komentarz 1 marca 2018 przez damian9901 Bywalec (2,140 p.)
Za nim to wykonam, chciałem podkreślić, że chcę to wszystko wykonać bez odświeżenia strony. A z tego teraz wychodzi, że będę to musiał zrobic.
komentarz 1 marca 2018 przez Paweł Antyporowicz Stary wyjadacz (11,470 p.)
Po to jest ajax... Żeby to działało asynchronicznie. Funkcja ajax odpowiada na zdarzenie użytkownika i wywołuje Ci asynchronicznie funkcje php i odbiera dane.

Proste, nie wiem jak to inaczej mogę Ci to wytłumaczyć. Nie chce też Ci dawać rozwiązania od razu jak na talerzu.

Jak dobrze tego nie rozumiesz, to weź wyszukaj tutoriala na youtube.
0 głosów
odpowiedź 2 marca 2018 przez Hunter94 Mądrala (6,290 p.)
Warto nadmienić że jest to dosyć niebezpieczne, bo jest to podatne na sql injection.

Pamiętaj żeby po stronie php używać === oraz sprawdzać co dostajesz bo przez tego js każdy może wysłać co chce.

Podobne pytania

0 głosów
2 odpowiedzi 985 wizyt
pytanie zadane 12 marca 2018 w PHP przez damian9901 Bywalec (2,140 p.)
0 głosów
1 odpowiedź 1,020 wizyt
pytanie zadane 30 października 2016 w JavaScript przez niezalogowany
0 głosów
0 odpowiedzi 1,588 wizyt

93,175 zapytań

142,185 odpowiedzi

321,977 komentarzy

62,506 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 1401p. - dia-Chann
  2. 1380p. - Łukasz Piwowar
  3. 1372p. - CC PL
  4. 1370p. - Łukasz Eckert
  5. 1351p. - Tomasz Bielak
  6. 1312p. - Łukasz Siedlecki
  7. 1302p. - rucin93
  8. 1181p. - rafalszastok
  9. 1164p. - Adrian Wieprzkowicz
  10. 1155p. - Piotr Aleksandrowicz
  11. 1149p. - Michał Telesz
  12. 1124p. - ssynowiec
  13. 1113p. - Michal Drewniak
  14. 1101p. - Dominik Łempicki (kapitan)
  15. 1087p. - Marcin Putra
Szczegóły i pełne wyniki

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...