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

question-closed Jak wyświetlić zawartość rekordów z bazy danych w formie tabeli?

Object Storage Arubacloud
0 głosów
2,295 wizyt
pytanie zadane 7 listopada 2018 w PHP przez razor6017 Użytkownik (780 p.)
zamknięte 11 listopada 2018 przez razor6017

Hej!

Po raz kolejny zmuszony jestem zasięgnąć porady od bardziej doświadczonych.
Otóż - posiadam tabelę w bazie danych z zapisanymi rekordami. Jest to lista użytkowników, których ręcznie dodałem do bazy.

Tabela w bazie ma takie nagłówki

Nagłówki kolumn w bazie
id login user pass email in-game_nick l_l_date u_p

Mój pomysł jest konkretnie taki, aby na specjalnej podstronie wyświetlić w formie tabeli zawartość wybranych rekordów zapisanych w bazie:

Zamysł:
Ksywka E-mail Nick w grze Ranga
dana ksywka dany email dany nick dana ranga

Oczywiście, im więcej rekordów z bazy, tym więcej wierszy. Co kod PHP powinien dynamicznie sobie obliczyć i stworzyć odpowiednią ilość wierszy.

Kombinowałem już z pętlą while. Mój kod wygląda mniej więcej tak:

<?php
	session_start();
	if(!isset($_SESSION['logged_in']) && ($_SESSION['logged_in'])==!true)
	{
		header('Location:back.php');
		exit();
	}
	require "connect.php";
	mysqli_report(MYSQLI_REPORT_STRICT);
	try
	{
		$connect = new mysqli($host, $db_user, $db_pass, $db_name);
		if ($connect->connect_errno!=0)
		{
			throw new Exception(mysqli_connect_errno());
		}
		else
		{
			if ($result = $connect->query("SELECT 'user', 'email', 'in-game_nick', 'u_p' FROM uzytkownicy"))
			{
				$rowsno = $result->num_rows;
				
				if($rowsno>0)
				{
					$row=$result->fetch_assoc();
				}
				else
				{
					throw new Exception($connect->error);
				}
			}
			else
			{
				throw new Exception($connect->error);
			}
			$connect->close();
		}
	}
	catch (Exception $e)
	{
		echo '<span style="color:red;">Błąd serwera! Przepraszamy i prosimy spróbować później!</span>';
		echo '<br />Informacja deweloperska: '.$e;
	}
?>
<html>
<head>
<meta charset="utf-8">
<title>Konto</title>
<link rel="stylesheet" type="text/css" href="style.css"/>
</head>
<body>
	<div class="login_container">
	<div class="login_logged_in_bar">
<?php
if((isset($_SESSION['logged_in'])) && ($_SESSION['logged_in']=true))
{
	include "./login_logged_in_bar/logged_in_bar.php";
}
?>
	</div>
	</div>
<div class="logo_container">
<img src="logo.png" class="logo"/>
</div>
<?php
if(($_SESSION['logged_in']==true) && ($_SESSION['user_privileges']<3))
	{
		include "./menu/menu_main_site_admins.php";
	}
else
	{
		include "./menu/menu_main_site_users.php";
	}
?>
<!-- div z tabelą z rekordami z bazy -->
<div class="table_container">
<table class="table">
	<tr>
		<th>Ksywka</th>
		<th>E-mail</th>
		<th>Nick w grze</th>
		<th>Ranga</th>
	</tr>
	<?php
		$i=0;
		while ($i < $rowsno)
		{
			$guild_ingame_nick=mysqli_fetch_lengths($result,$i,"in-game_nick");
			$guild_user=mysqli_fetch_lengths($result,$i,"user");
			$quild_email=mysqli_fetch_lengths($result, $i, "email");
			$guild_rank_db=mysqli_fetch_lengths($result,$i,"u_p");
			if ($guild_rank_db==3)
			{
				$rank_db = "Członek";
			}
			if ($guild_rank_db==2)
			{
			$rank_db = "Guild Vice";
			}
			if ($guild_rank_db==1)
			{
				$rank_db = "Guild Master";
			}
			if ($guild_rank_db==0)
			{
				$rank_db = "Main Admin";
			}
	?>
	<tr>
		<td><?php echo $guild_user ?></td>
		<td><?php echo $quild_email ?></td>
		<td><?php echo $guild_ingame_nick ?></td>
		<td><?php echo $rank ?></td>
	</tr>
	<?php
			$i++;
		}
echo "</table>";
	?>
</div>
</body>
</html>

Doradzi ktoś? Nadal jestem początkujący jeśli chodzi o programowanie w PHP, ale wszelka KONSTRUKTYWNA krytyka mile widziana. Liczę na Waszą wyrozumiałość i wyczerpującą odpowiedź!

Z góry dziękuję!

komentarz zamknięcia: Problem został rozwiązany. Szczególne podziękowania dla Bosswell!

2 odpowiedzi

+1 głos
odpowiedź 7 listopada 2018 przez Bosswell Nałogowiec (36,470 p.)
wybrane 11 listopada 2018 przez razor6017
 
Najlepsza

Zmienna " $row " w twoim kodzie przechowuje tablice z wszystkimi użytkownikami. Wystarczy zrobić pętle i wypisać te dane. W przykładzie zmienie nazewnictwo z "$row" na "$data".

<table>
<tr>
     <td>Nick</td>
     <td>Ranga</td>
     <td>Ksywka</td>
     <td>Email</td>
</tr>

<?php foreach ($data as $row): ?>
   <tr>
       <td><?php echo $row['user']; ?></td>
       <td>
              <?php
                    if ($row['u_p'] == '0') echo 'ranga';
                    else if (($row['u_p'] == '1') echo 'ranga';
              ?>
       </td>
       <td><?php echo $row['in_game_nick']; ?></td>
       <td><?php echo $row['nick']; ?></td>
   </tr>
<?php endforeach; ?> 
</table>

 

komentarz 10 listopada 2018 przez razor6017 Użytkownik (780 p.)
mysqli_result Object
(
    [current_field] => 0
    [field_count] => 4
    [lengths] => 
    [num_rows] => 2
    [type] => 0
)

 

komentarz 10 listopada 2018 przez Bosswell Nałogowiec (36,470 p.)

Spróbuj zamienić tą cześć kodu

<?php foreach ($data as $row): ?>

Na

<?php while ($result->fetch_assoc()): ?>

I zamiast enfforeach; użyj endwhile.

komentarz 10 listopada 2018 przez razor6017 Użytkownik (780 p.)
Fatal error: Uncaught Error: Cannot use object of type mysqli_result as array

Podejrzewam, że to przez to, że robię to drugi raz po wyjęciu z bazy

komentarz 11 listopada 2018 przez Bosswell Nałogowiec (36,470 p.)
Tutaj masz funkcje, która wyciąga rzeczywiście wszystkie wiersze. Fetch assoc wyciąga jedynie jeden wiersz. Musisz jej użyć w pętli aby działało.
komentarz 11 listopada 2018 przez razor6017 Użytkownik (780 p.)
Miło jest usłyszeć rady i komentarze od kogoś bardziej doświadczonego podczas nauki.

Ogarnąłem temat. Parę wskazówek, trochę myślenia i rozwiązałem problem!

Dla potomnych zostawię zapis gotowego skryptu z opisami.

Bosswell, dziękuję!
0 głosów
odpowiedź 11 listopada 2018 przez razor6017 Użytkownik (780 p.)

Problem został rozwiązany z pomocą Bosswell'a.

Otóż, żeby wywołać zapisy z bazy danych trzeba je uprzednio wyciągnąć z bazy. Nie wolno wywoływać na nich funkcji fetch_assoc();, ponieważ zabraknie potem informacji do argumentu w pętli.

Pierwsza część kodu PHP:

//zaczynamy połączenie z bazą, żeby wyciągnąć dane z bazy
	require "connect.php";
	mysqli_report(MYSQLI_REPORT_STRICT);

	try
	{
		$connect = new mysqli($host, $db_user, $db_pass, $db_name);
		if ($connect->connect_errno!=0)
		{
			throw new Exception(mysqli_connect_errno());
		}
		else
		{
			
			//zadajemy pytanie do bazy danych
			$result = $connect->query("SELECT `nazwa_pierwszej_kolumny`,`nazwa_drugiej_kolumny`,`nazwa_trzeciej_kolumny`,`nazwa_kolejnej_kolumny`FROM nazwa_twojej_tabeli");
			
			//po wykonanych poleceniach zamykamy połączenie z bazą, no bo skoro mamy wyciągnięte dane z bazy to po co nam aktywne połączenie z bazą?
			$connect->close();
		}
	}
	catch (Exception $e)
	{
		echo '<span style="color:red;">Błąd serwera! Przepraszamy i prosimy spróbować później!</span>';
		echo '<br />Informacja deweloperska: '.$e;
	}

Druga część kodu:

<table>
	<tr>
		<th>Kolumna_1</th>
		<th>Kolumna_2</th>
		<th>Kolumna_3</th>
		<th>Kolumna_4</th>
	</tr>
	<?php
		//tworzymy tablicę asocjacyjną dla wyciągniętych z bazy
		$result->fetch_assoc();

		//jeżeli w bazie przechowywane są liczby, które odnoszą się do konkretnych rang lub uprawnień użytkownika tworzymy tablicę z opisami rang
		$ranks = ['ranga_1', 'ranga_2', 'ranga_3', 'ranga_4',];
		//ludzie liczą od 1, komputer liczy od 0, więc tablice numerowane są kolejno od 0, więc w tym przypadku, jest 0, 1, 2 ,3
		
		//uruchamiamy pętlę
		foreach ($result as $data): ?>
	<tr>
		<td><?php echo $data['nazwa_pierwszej_kolumny']; ?></td>
		<td><?php echo $data['nazwa_drugiej_kolumny']; ?></td>
		<td>
			<?php echo $data['nazwa_trzeciej_kolumny'];?></td>
		<td>
			<?php
			
				//definiujemy teraz instrukcje warunkowe, które będą interpretowały zawartość danych wyjętych z kolumeny
				//jeżeli wartość tego rekordu w bazie będzie równa 0, to wyświetl na ekranie wartość pierwszej tablicy (liczymy od 0!!) zmiennej $ranks
				if ($data['nazwa_czwartej_kolumny'] == 0) echo $ranks['0'];
				
				//analogicznie pozostałe warunki
				elseif ($data['nazwa_czwartej_kolumny'] == 1) echo $ranks['1'];

				elseif ($data['nazwa_czwartej_kolumny'] == 2) echo $ranks['2'];

				elseif ($data['nazwa_czwartej_kolumny'] == 3) echo $ranks['3'];
		?>
		</td>
	</tr>
	<?php
		//zamykamy pętlę
		endforeach;
	?>
</table>

 

Podobne pytania

0 głosów
1 odpowiedź 243 wizyt
0 głosów
1 odpowiedź 179 wizyt
pytanie zadane 28 marca 2016 w SQL, bazy danych przez Ceki Mądrala (5,310 p.)
0 głosów
1 odpowiedź 3,535 wizyt

92,555 zapytań

141,403 odpowiedzi

319,554 komentarzy

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

...