Skocz do zawartości
  • 0
producer

Wyświetlenie tablicy w php

Od ostatniej odpowiedzi w tym temacie minęło 100 dni. Pamiętaj, że odkopywanie takich tematów jest niewskazane, chyba że chcesz wnieść coś nowego do dyskusji.

Pytanie

Autor tematu Napisano (edytowany)

Cześć, podczas tworzenia statystyk natrafiłem na pewien problem, jeszcze tylko przedstawię że moim finalnym celem ma być tabelka zawierająca 5 ostatnich użytkowników, a sama tabelka jest z google chart oto jej skrypt 

Spoiler
<html>
  <head>
    <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
    <script type="text/javascript">
      google.charts.load('current', {'packages':['table']});
      google.charts.setOnLoadCallback(drawTable);

      function drawTable() {
        var data = new google.visualization.DataTable();
        data.addColumn('string', 'Name');
        data.addColumn('number', 'Salary');
        data.addColumn('boolean', 'Full Time Employee');
        data.addRows([
          ['Mike',  {v: 10000, f: '$10,000'}, true],
          ['Jim',   {v:8000,   f: '$8,000'},  false],
          ['Alice', {v: 12500, f: '$12,500'}, true],
          ['Bob',   {v: 7000,  f: '$7,000'},  true]
        ]);

        var table = new google.visualization.Table(document.getElementById('table_div'));

        table.draw(data, {showRowNumber: true, width: '100%', height: '100%'});
      }
    </script>
  </head>
  <body>
    <div id="table_div"></div>
  </body>
</html>

 

fajnie tylko że zamiast użytkowników mike,jim,alice,bob chce dopisać swoich, pomyślałem że to nic trudnego więc zrobiłem zapytanie do bazy danych, wykonałem i pobrałem dla łatwiejszej nauki tylko jednego ostatniego użytkownika oto kod: 

Spoiler

						if(!$connect){
							echo "Blad polaczenia z baza danych";
							} else {
								$zapytanie05 = 'SELECT id,email,dateregister,ip FROM user ORDER BY id DESC LIMIT 1;';
								$wynik05 = mysqli_query($connect,$zapytanie05);
								//$wiersz05 = mysqli_fetch_array($wynik05);
								
								while($rekord = mysqli_fetch_array($wynik05))
								{
									
								@$id1.= '"'.$rekord[0].'", "'.$rekord[1].'", "'.$rekord[2].'", "'.$rekord[3].'",';

								}
								echo $id1;
								
							}
							mysqli_close($connect);
					?>

 

w miejsce gdzie byli wpisani alice bob i tp, wstawiłem 

[<?php echo $id1; ?>],

więc wygląda tak

Spoiler
function drawTable() {
					var data = new google.visualization.DataTable();
					data.addColumn('string', 'ID');
					data.addColumn('string', 'Name');
					data.addColumn('string', 'Register Data');
					//data.addColumn('boolean', 'Privelege');
					data.addColumn('string', 'Adress IP');
					data.addRows([
					  [<?php echo $id1; ?>],
					  ['3', 'Alice', '12', '111'],
					  ['4', 'Bob',   '12', '111']
					  
					]);

 

 

 wszystko zadziałało, tylko teraz pytanie jak osiągnąć to dla 5 użytkowników?, gdyż musiałbym aby skrypt php każdego użytkownika przypisywał do innej zmiennej $id1, $id2 więc musiałbym wykonywać aż 5 zapytań do bazy danych, potem tylko w js dopisać jak jak wyżej. Zapewne jest jakaś opcja która pobiera od razu 5 użytkowników, rozdziela to na kilka zmiennych i po kłopocie tylko niestety nie wiem jak to wykonać byłbym bardzo wdzięczny za pomoc 

 

Baza danych to jedna tabela user która zawiera id,email,password,datereigster,ip

Edytowano przez producer

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

7 odpowiedzi na to pytanie

Polecane posty

  • 0
Napisano (edytowany)

UP

co ty pierdolisz XD

w frameworku masz wszystko gotowe ,rozwijane na bieżąco pod wszystkie przegladarki przy czym jest on responsywny,a tak musiałbyś sie babrać w cssie,a i tak pewnie storna by sie rozjeżdżała tak jak nogi niektórych nastolatek.

offtop

baza.php

<?PHP
$DB = new PDO('mysql:host=IP;dbname=NAZWABAZY', 'UZYTKOWNIK', 'HASLO');
$zap = $DB->prepare("SELECT id,email,dateregister,rank,ip FROM user ORDER BY id DESC LIMIT 5;");
$zap->execute();
$wynik = $zap->fetchAll();
$json = json_encode($wynik);
echo $json;
?>

 

index.html

	<div id="button">
		<button type="button" onclick="drawT()">Refresh</button>
	</div>			
	<script src="https://code.jquery.com/jquery-1.11.3.js"></script>
	<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
	<script type="text/javascript">
	var asd = [];
				function drawT(){
					asd = [];
					$.ajax({
						url: "/baza.php",
						dataType: "json",
						success: function(msg){
							parse_date(msg);
							drawTable();
						}
					});
					
				};
				
				function parse_date(tb){
				
						for (x in tb) {
							asd.push(new Array(tb[x][0] , tb[x][1] , tb[x][2] , tb[x][3] , tb[x][4] , ));
						};
						
				};
				  google.charts.load('current', {'packages':['table']});
				  google.charts.setOnLoadCallback(drawTable);
      			  drawT();
				
				function drawTable() {
					var data = new google.visualization.DataTable();
					data.addColumn('string', 'ID');
					data.addColumn('string', 'Name');
					data.addColumn('string', 'Register Data');
					data.addColumn('string', 'Privelege');
					data.addColumn('string', 'Adress IP');
					data.addRows(asd);


					var table = new google.visualization.Table(document.getElementById('table_div'));

					table.draw(data, {showRowNumber: false, width: '100%', height: '100%'});
				 }
				</script>
				<div id="table_div"></div>

odświeżanie sam sobie dodaj, tylko tyle Ci zostało.

Jeżeli przewidujesz jakims cudem, że ruch na stronie bedzie naprawde duzy(mowie to o tysiacach nie kilku-kilkunastu odwiedzajaych) to mozesz sobie odciązyć troche i zamiast odpytywac baze co kazde wejscie odwiedzajacego to zrzucac sobie obecny wynik do pliku co sekudne,minute czy ile tam chcesz poprzez crona i wczytwywac ajaxem przy czym musisz zmienic kod, ktory Ci dałem.

 

Edytowano przez Bumbap

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
  • 0
Napisano (edytowany)

Powiem ci tak na to samo ci wyjdzie jeżeli zamiast bawienia się w JS zrobisz to poprostu za pomocą pętli w php i tak widze że nie używasz czasowego sprawdzania nowości więc na to samo ci by wyszło

 

A po drugie takie żeczy możesz sobie zrobić samodzielnie w pętli czy to za pomocą php czy za pomocą php i JS nie musisz używać takich frame worków

 

Edytowano przez KRZYSZT0FSLENDER

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
  • 0
Autor tematu Napisano
15 godzin temu, KRZYSZT0FSLENDER napisał:

Powiem ci tak na to samo ci wyjdzie jeżeli zamiast bawienia się w JS zrobisz to poprostu za pomocą pętli w php i tak widze że nie używasz czasowego sprawdzania nowości więc na to samo ci by wyszło

 

A po drugie takie żeczy możesz sobie zrobić samodzielnie w pętli czy to za pomocą php czy za pomocą php i JS nie musisz używać takich frame worków

 

Bardzo dziękuje za pomoc, masz racje, ale znalazłem jeszcze inny sposób zastosowałem Tablicę dwuwymiarową, choć teraz dałeś mi pomysł aby czasowo odświeżać to by miało większy sens

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
  • 0
Napisano (edytowany)

@producer

nie musisz czasowo odświeżać masz w JS takie coś jak XMLhttpreuqest i to daj do funkcji i daj czasowe wywolanie funkcji z tym lub przycisk odswiez na stronie

 

https://www.google.pl/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=2ahUKEwjGpurE9OffAhULLewKHezEAOUQFjAAegQICRAB&url=https%3A%2F%2Fdeveloper.mozilla.org%2Fpl%2Fdocs%2FXMLHttpRequest&usg=AOvVaw3Ib4xxl78zqRrGmGB-yBIq

 

https://www.google.pl/url?sa=t&rct=j&q=&esrc=s&source=web&cd=3&cad=rja&uact=8&ved=2ahUKEwjGpurE9OffAhULLewKHezEAOUQFjACegQIBxAB&url=https%3A%2F%2Fwww.w3schools.com%2Fxml%2Fxml_http.asp&usg=AOvVaw0W0Yg8A0nKpKAtk1_MQQ0s

 

https://www.google.pl/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&cad=rja&uact=8&ved=2ahUKEwjGpurE9OffAhULLewKHezEAOUQFjABegQICBAB&url=https%3A%2F%2Fpl.wikipedia.org%2Fwiki%2FXMLHttpRequest&usg=AOvVaw3UfhyDbkX1kxwywsjK-Jav

 

to działa na każdej przeglądarce i może powyższe artykuły przydadzą ci się do stworzenia takiego czegoś.
PS sam używam tego do sprawdzania poprawności wprowadzonych danych w formularzu logowania i rejestracji u mnie na stronie i jak narazie sprawuje się wyśmienicie. Nie trzeba przeładowywać setki razy przez jeden bląd tylko odrazu wyświetla 

Edytowano przez KRZYSZT0FSLENDER

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
  • 0
Autor tematu Napisano (edytowany)

@KRZYSZT0FSLENDER

Faktycznie chyba o to mi chodziło lecz mam kolejny problem, aby nie zaśmiecać łącza z serverem zrobie na zasadzie przycisku, jeżeli będzie Ci się chciało możesz powiedzieć jak zrobić z automatyczna np co 1 minute. 

Okej ale problem mam taki że nie wiem jak połączyć te 2 skrypty bo wychodzą konflikty i albo coś się nie ładuje albo coś nie wyświetla, zamieszcze tutaj niżej te wycinki kodu.

 

Robiłem to na różne sposoby po prostu jak wkleję skrypt chart do loadxmldoc() to nic się nie zadzieje, nawet próbowałem to w osobnych plikach odwoływać się przez skrypt php w js, ale javascript ma chyba konflikt z php i nic nie czyta dla przykłądu <script>  <?php include plik...; ?> </script>

pomyślałem że zapewne po każdym takim facie trzeba czyścić tablice to użyłem <?php unset($row); ?> na początku i brak efektów

 

testpolecenie.php

Spoiler
					<?php 
							include("connect.php");
							if(!$connect){
								echo "Blad polaczenia z baza danych";
								} else {
									$query = 'SELECT id,email,dateregister,rank,ip FROM user ORDER BY id DESC LIMIT 5;';
	 
									if ($result = $connect->query($query)) {
											 
												
										while ($row[]  = $result->fetch_array(MYSQLI_NUM));
													 
										$result->free();
									}
									// print_r($row);
									echo $row[0][1];
									echo $row[1][1];
									
								}
								mysqli_close($connect);
					?>

 

index.php 

Spoiler
<?php include("testpolecenie.php"); ?> // tutaj połączenie do pliku testpolecenie.php w którym jest całe zapytanie do bazy, te polecenie includuje ponieważ 									//	sama funkcja drawTable ta od tabelki tego wymaga aby załadować dane.

				<div id="button">
					<button type="button" onclick="loadXMLDoc()">Refresh</button>
				</div>
				
				<div id="demo"></div> // testowy podląd czy to wgl ładuje
				
				<script type="text/javascript">
				function loadXMLDoc() {
				  var xhttp = new XMLHttpRequest();
				  xhttp.onreadystatechange = function() {
					if (this.readyState == 4 && this.status == 200) {
					  document.getElementById("demo").innerHTML =
					  this.responseText;
					}
				  };
				  xhttp.open("GET", "testpolecenie.php", true);
				  xhttp.send();
				  load(); // load ładuje od nowa właśnie ten skrypt go google chart ta tabelke lecz niestety informacje w tabelce się nie zmieniają ale co 							// ciekawe sama funckja działa i tam wyżej w divie demo wyświetla mi to co chce czyli aktualny rekord problem wygląda jak by był
                  		// w drawTable() niżej czyli od google chart, tak jak by $row się nie odświeżała i dalej zostają stare informacje
				 					
				}
				
				</script>

				
			  	<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
				<script type="text/javascript">
				
				load() // funckja aby na początku też ja ładowało a nie tylko przez przycisk, jak tego nie dam prawdopodobnie tabelka pojawi się dopiero po 					//naciśnieciu buttona gdzie jest właśnie aktywacja funkcji load()
				
				function load() {
				  google.charts.load('current', {'packages':['table']});
				  google.charts.setOnLoadCallback(drawTable);

				  function drawTable() {
					var data = new google.visualization.DataTable();
					data.addColumn('string', 'ID');
					data.addColumn('string', 'Name');
					data.addColumn('string', 'Register Data');
					data.addColumn('string', 'Privelege');
					data.addColumn('string', 'Adress IP');
					data.addRows([
						['<?php echo $row[0][0]; ?>', '<?php echo $row[0][1]; ?>', '<?php echo $row[0][2]; ?>', '<?php echo $row[0][3]; ?>','<?php echo $row[0][4]; ?>'],
						['<?php echo $row[1][0]; ?>', '<?php echo $row[1][1]; ?>', '<?php echo $row[1][2]; ?>', '<?php echo $row[1][3]; ?>','<?php echo $row[1][4]; ?>'],
						['<?php echo $row[2][0]; ?>', '<?php echo $row[2][1]; ?>', '<?php echo $row[2][2]; ?>', '<?php echo $row[2][3]; ?>','<?php echo $row[2][4]; ?>'],						
					]);

					var table = new google.visualization.Table(document.getElementById('table_div'));

					table.draw(data, {showRowNumber: false, width: '100%', height: '100%'});
				  }
				}
				</script>

 

Edytowano przez producer

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
  • 0

@producer spytam się cb tak poco ty się bawisz w te frameworki od googla tu masz poprostu 
 

Cytat


        <table>
            <tr>
                <td></td>
                <td></td>
                <td></td>
            </tr>
            <tr>
                <td></td>
                <td></td>
                <td></td>
            </tr>
            <tr>
                <td></td>
                <td></td>
                <td></td>
            </tr>
        </table>

i to na to samo ci wyjdzie i wywala ci wlasnie ten frame work a co do zrobienia tego daj mi troche czasu to ci wysle skrypt na ktorym oprzesz swoj

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
  • 0
Autor tematu Napisano

Bardzo dziękuje panowie za pomoc, wszystko już działa świetnie, frameworków używam bo mam gotowe już segregowanie np według uprawnień lub ostatnio zarejestrowanych, samemu pewnie do tabeli też bym to zrobił ale to znowu dodatkowe linijki kodu i czas

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Od ostatniej odpowiedzi w tym temacie minęło 100 dni. Pamiętaj, że odkopywanie takich tematów jest niewskazane, chyba że chcesz wnieść coś nowego do dyskusji.

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się


  • Kto przegląda   0 użytkowników

    Brak zalogowanych użytkowników przeglądających tę stronę.


×
Okienko zamknie się za 5 sekund...