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

42 Warsaw Coding Academy
0 głosów
3,033 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ź 304 wizyt
0 głosów
1 odpowiedź 264 wizyt
pytanie zadane 28 marca 2016 w SQL, bazy danych przez Ceki Mądrala (5,310 p.)
0 głosów
1 odpowiedź 3,919 wizyt

93,389 zapytań

142,385 odpowiedzi

322,547 komentarzy

62,749 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

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...