• 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]

Object Storage Arubacloud
0 głosów
765 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 831 wizyt
pytanie zadane 12 marca 2018 w PHP przez damian9901 Bywalec (2,140 p.)
0 głosów
1 odpowiedź 929 wizyt
pytanie zadane 30 października 2016 w JavaScript przez niezalogowany
0 głosów
0 odpowiedzi 1,056 wizyt

92,538 zapytań

141,377 odpowiedzi

319,456 komentarzy

61,923 pasjonatów

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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...