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

AJAX, wyświetlanie danych bazy

Object Storage Arubacloud
+1 głos
1,065 wizyt
pytanie zadane 26 listopada 2017 w JavaScript przez mi-20 Stary wyjadacz (13,190 p.)

Witam, mam taki skrypt JS

  $('#send').click(function() { /*Zdefiniowanie zdarzenia inicjującego 
    - kliknięcie przycisku wyślij*/
     
        /*Funkcja pobierająca wartość opcji z listy, w tym przypadku nazwa kraju, 
        która następnie zapisywana jest do zmiennej*/
        var wartosc_z_listy = $('#txt').val();
         
        $.ajax({
            type:"POST", 
            url:"odbierz.php",
            data: {klucz_ajax:wartosc_z_listy}, 
                 
                /*Działania wykonywane w przypadku sukcesu*/
                success:function() {
 
                        //pobieranie danych
                    
                              $.ajax({
            type:"GET", /*Informacja o tym, że dane będą pobierane*/
            url:"pobierz.php", /*Informacja, o tym jaki plik będzie przy tym wykorzystywany*/
            contentType:"application/json; charset=utf-8", /*Informacja o formacie transferu danych*/
            dataType:'json', /*Informacja o formacie transferu danych*/
             
                /*Działania wykonywane w przypadku sukcesu*/
                success: function(json) { /*Funkcja zawiera parametr*/
                     
                    /*Pętla typu for...in języka Javascript na danych w formacie JSON*/
                    for (var klucz in json)
                        {
                            var wiersz = json[klucz];  /*Kolejne przebiegi pętli wstawiają nowy klucz*/     
                            var id = wiersz[0];
                            var nazwakraju = wiersz[1];
                             
                            /*Ustalenie sposobu wyświetlania pobranych danych w bloku div*/
                            $("<span>id: "+id+" nazwa: "+nazwakraju+"</span>")
                            .appendTo('#wykaz')
                            .append("<hr>")
                        } 
                     
                     
                    /*Dezaktywacja na określony czas przycisku wysyłającego - ten krok można pomninąć*/
                    $("#pobierz").attr("disabled", true);
                    setTimeout(function(){
                        $("#pobierz").attr("disabled", false); 
                    }, 10000);  
                 
                },
                 
                 
                /*Działania wykonywane w przypadku błędu*/
                error: function(blad) {
                    alert( "Wystąpił błąd");
                    console.log(blad); /*Funkcja wyświetlająca informacje 
                    o ewentualnym błędzie w konsoli przeglądarki*/
                }
             
        });
                    
                    
                    
                        //END pobieranie danych
                     
                    /*Dezaktywacja na określony czas przycisku wysyłającego - ten krok można pomninąć*/
                    $("#send").attr("disabled", true);
                    setTimeout(function(){
                        $("#send").attr("disabled", false); 
                    }, 10000);  
             
                },
 
                /*Działania wykonywane w przypadku błędu*/
                error: function(blad) {
                    alert( "Wystąpił błąd");
                    console.log(blad); /*Funkcja wyświetlająca informacje 
                    o ewentualnym błędzie w konsoli przeglądarki*/
                }
        });
 
    });
  

i pobierz.php

<?php
 
/*Nagłówek pliku informujacy o tym, że dane będą przekazywane w formacie JSON (JavaScript Object Notation) 
- jest to format transferu danych, w praktyce wyglądać będzie on finalnie w następujacy sposób: 
[["66","Austria"],["65","Polska"],["64","Czechy"]]
*/
header('Content-type: application/json');
 
/*Załączenie pliku odpowiadającego za połączenie z bazą danych.*/
require_once('connect.php');
 
/*Zapytanie typu SELECT - należy je czytać w następujacy sposób: 
pobierz z tabeli o nazwie kraje kolumny: id i nazwa kraju*/
$zapytanie_pobierz = "SELECT kraj_ID, kraj FROM test";
/*Wykonanie zapytania SELECT*/
$wynik_pobierz = mysqli_query($db, $zapytanie_pobierz);
/*Przygotowanie tablicy, która będzie przechowywać dane z bazy*/
$pobrane_dane = array();
 
/*Pętla typu "while" oparta o funkcję mysqli_fetch_row, 
wykonująca się na wyniku zapytania w celu zorganizowania pobranych danych w tabelę */
while ($wiersz = mysqli_fetch_row($wynik_pobierz)) 
{
  $pobrane_dane[] = $wiersz;
}
 
/*Wywołanie tabeli danych jako danych w formacie JSON. 
W istocie działania podjęte w tym pliku tworzą pakiet danych JSON, 
który będzie możliwy do zinterpretowania w pliku skrypt.js*/
echo json_encode($pobrane_dane);
 
?>

Chcę aby w momencie dodania danych do bazy od razu wyświetliły się dodane dane poniżej, ma się to powtarzać przy każdym kolejnym dodaniu danych do bazy czyli po kliknięciu przycisku #send i prawidłowym wykonaniu skryptu. Skrypt działa tzn dane są prawidłowo dodawane i wyświetlane jednak zawsze wyświetlają się wszystkie dane w tabeli, jak to poprawić tak aby przy dodaniu wyświetlał się tylko właśnie dodany rekord a te dodane i wyświetlony pozostawały bez zmian?

Z góry dzięki

2 odpowiedzi

0 głosów
odpowiedź 26 listopada 2017 przez Boshi VIP (100,240 p.)
Pobieraj ostatni rekord tylko z bazy zawsze, a resztę wyświetlaj statycznie.
komentarz 26 listopada 2017 przez mi-20 Stary wyjadacz (13,190 p.)
czyli zmiana w pliku php, tak?
komentarz 26 listopada 2017 przez Boshi VIP (100,240 p.)
poczytaj trochę bo to nie jest twój kod, a jak nie chce ci się to zrób zlecenie to ktoś ci to zrobi w 10 min.
komentarz 26 listopada 2017 przez mi-20 Stary wyjadacz (13,190 p.)
No nie jest to mój kod, po co mam dawać zlecenie jak chcę to ogarnąć?
1
komentarz 26 listopada 2017 przez Boshi VIP (100,240 p.)
no to ci napisałem co masz zrobić.. a jak to trzeba poczytać;]
komentarz 26 listopada 2017 przez CzikaCarry Szeryf (75,340 p.)
Albo jako response wysyłaj do ajaxa ten rekord, nie będziesz musiał wykonywać zapytania do bazy.
komentarz 26 listopada 2017 przez mi-20 Stary wyjadacz (13,190 p.)

Myślę że wystarczyło by dodać do zapytania warunek, coś w tym style:

"SELECT kraj_ID, kraj FROM test WHERE kraj_ID = '$id'"

gdzie $id to id właśnie dodanego rekordu, da się zrobić to tym sposobem?

Jeśli "sztucznie" podstawię id to działa ok tylko czy da się to robić tak aby id się dodawało do zmiennej?

–1 głos
odpowiedź 26 listopada 2017 przez Chess Szeryf (76,710 p.)
edycja 27 listopada 2017 przez Chess
$zapytanie_pobierz = "SELECT * FROM zakupy ORDER BY id DESC LIMIT 1";

Zmień swoje zapytanie na to powyżej.

https://stackoverflow.com/questions/4073923/select-last-row-in-mysql

Jeśli chcesz, aby po odświeżeniu zapamiętał ostatnią sesję, czyli te dane, które się ukazały na ekranie, to niech skrypt zapamięta te ID po pierwszym kliknięciu w button i ostatnie ID, po ostatnim kliknięciu. Później napisz if'a, w którym podmieni zapytanie: $zapytanie_pobierz na inne, w którym będzie:

SELECT * FROM zakupy where id>=$var1 and id<=$var2;

Tak mi się wydaje, że to powinno być OK, ale może są inne rozwiązania.

Edit: Nie wiem, czy o takie rozwiązanie chodziło, ale wrzucę:

File jqqq.php:

<body style="background:grey">

<form name="refresh">
	<input name="visited" value="" type="hidden">
</form>

<button id="send">SEND</button>
<div id="pobierz">GET</div>
<div id="txt" value="7">SOME</div>
<div id="wykaz"></div>

</body> 

<script src="jqu.js"></script>
// jqu.js to załączona biblioteka jQuery. Chyba z tego link'u: https://code.jquery.com/jquery-3.2.1.min.js
<script>
 
if(binar === undefined){ 
	var binar = 0;
}
//---------------------------
if(document.refresh.visited.value == "" ){
   
	document.refresh.visited.value = "1";

	if(binar==0){ 
		binar=1;
	}else{ 
		binar=0;
	}
  
}
// Script detect refresh comes from: http://geekaylabs.blogspot.com/2012/06/how-to-detect-page-refresh-using.html
//----------------------------------


if(showCookie('iteratorC')>0){ 
	var iterator = showCookie('iteratorC');
} else{ 
	var iterator = 1 ;
}

//----------------------------
function showCookie(name) {
    if (document.cookie!="") {
        var cookies=document.cookie.split("; ");
        for (var i=0; i<cookies.length; i++) {
            var cookieName=cookies[i].split("=")[0];
            var cookieVal=cookies[i].split("=")[1];
            if (cookieName===name) {
                return decodeURI(cookieVal);
            }
        }
    }
}
// Script cookies comes from: http://kursjs.pl/kurs/cookie.php
//-----------------------------
 
var clicks =  0 ;

$('#send').click(function() { 

	if(iterator===undefined){ 
		null;
	}else{ 
		iterator++;
	}
			 
	clicks++;
		 
		 
	$.ajax({
		type:"POST", 
		success:function() {
			$.ajax({
		type:"GET",  
        url:"pobierz5.php",  
		contentType:"application/json; charset=utf-8",  
		dataType:'json',  
		data: {ilerazy:clicks,binarny:binar,iter:showCookie('iteratorC'),yourdata:'test4'},
		success: function(json) { 
		
			for (var klucz in json){
				
				var wiersz = json[klucz];  
				var id = wiersz[0];
				var nazwakraju = wiersz[1];
				
                $("<span>id: "+id+" nazwa: "+nazwakraju+"</span>").appendTo('#wykaz').append("<hr>");
						  
			}  
					
			document.cookie = "iteratorC="+iterator;				 		  
                  
			$("#pobierz").attr("disabled", true);
			setTimeout(function(){
				$("#pobierz").attr("disabled", false); 
			}, 10000);  
                
		},
                
             
              error: function(blad) {
                  alert( "Wystąpił błąd");
                  console.log(blad); 
              }
            
			});
                             
                  $("#send").attr("disabled", true);
                  setTimeout(function(){
                      $("#send").attr("disabled", false); 
                  }, 100);  
            
		},
 
				  error: function(blad) {
					  alert( "Wystąpił błąd");
					  console.log(blad); 
				  }
		});
 
});
  
</script>

File pobierz5.php:

<?php

header('Content-type: application/json');

$db = new mysqli('localhost','root','','zakupy');

$zap = mysqli_query($db,"INSERT INTO zakupy values(null,'{$_GET['yourdata']}',9)");

if(!isset($_GET['iter'])){ 
	$_GET['iter']=1;
}

$ddd = "SELECT * FROM zakupy ORDER BY id DESC LIMIT 1";
$ddd = mysqli_query($db,$ddd);
$res = $ddd->fetch_assoc();

$hhh = $res['id']-($_GET['iter']-1);
 
if($_GET['binarny']==1){
	  $zapytanie_pobierz = "SELECT * FROM zakupy ORDER BY id DESC LIMIT 1";
}elseif($_GET['binarny']==0 && $_GET['ilerazy']==1){ 
	$zapytanie_pobierz = "SELECT * FROM zakupy where id>='{$hhh}' and id<='{$res['id']}'";
}else{ 
	$zapytanie_pobierz = "SELECT * FROM  zakupy ORDER BY id DESC LIMIT 1";
}

$wynik_pobierz = mysqli_query($db, $zapytanie_pobierz);

$pobrane_dane = array();
  
while($wiersz = mysqli_fetch_row($wynik_pobierz)){
	$pobrane_dane[] = $wiersz;
}
  
echo json_encode($pobrane_dane);
  
?>

 

komentarz 26 listopada 2017 przez Boshi VIP (100,240 p.)
i po co mu dajesz gotowe rozwiązanie i do tego kiepskie?
komentarz 26 listopada 2017 przez Chess Szeryf (76,710 p.)
Ponieważ zapewne jest początkującym, więc chciałem podpowiedzieć jak to mogłoby wyglądać od strony kodu.
komentarz 26 listopada 2017 przez Boshi VIP (100,240 p.)
dajac gotowca?

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ź 183 wizyt
pytanie zadane 1 kwietnia 2018 w JavaScript przez Bakr Mądrala (6,850 p.)
0 głosów
2 odpowiedzi 767 wizyt

92,552 zapytań

141,399 odpowiedzi

319,534 komentarzy

61,938 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!

...