Dołącz do zespołu ekspertów! Backend lub Frontend Developer?

Sprawdź najnowsze oferty pracy naszego partnera - 8lines.io!

Wyświetlanie nicków administracji z ich opisem

PHP  Założony przez  Patryk Stefański.

Witam was znowu w tym dziale(nawet nie wiem czy dobrym, ale chyba tak).
Nowy pomysł, nowe problemy. Kombinuje z "automatycznym" dodawaniem listy administracji wraz z ich opisem, funkcjami, zadaniami jak zwał tak zwał.
Korzystam z bootstrap 4 i znalazłem tam fajny kodzik navbar, który wygląda normalnie tak:
   
Aczkolwiek po co mi home, profile etc.? Kiedy próbując wyciąg informacje z bazy nicki i opis, ale niestety chyba coś pomyliłem w kodzie html, bo wygląda to tak(Proszę nie zwracać uwagi na tylną część ciała, jest to tylko test)
   
Trochę kombinowałem, ale niestety nic nie przychodzi mi do głowy.

Oryginalny kod od bootstrap
div class="row">
 
 <div class="col-3">
 
   <div class="nav flex-column nav-pills" id="v-pills-tab" role="tablist" aria-orientation="vertical">
 
     <class="nav-link active" id="v-pills-home-tab" data-toggle="pill" href="#v-pills-home" role="tab" aria-controls="v-pills-home" aria-selected="true">Home</a>
 
     <class="nav-link" id="v-pills-profile-tab" data-toggle="pill" href="#v-pills-profile" role="tab" aria-controls="v-pills-profile" aria-selected="false">Profile</a>
 
     <class="nav-link" id="v-pills-messages-tab" data-toggle="pill" href="#v-pills-messages" role="tab" aria-controls="v-pills-messages" aria-selected="false">Messages</a>
 
     <class="nav-link" id="v-pills-settings-tab" data-toggle="pill" href="#v-pills-settings" role="tab" aria-controls="v-pills-settings" aria-selected="false">Settings</a>
 
   </div>
 
 </div>
 
 <div class="col-9">
 
   <div class="tab-content" id="v-pills-tabContent">
 
     <div class="tab-pane fade show active" id="v-pills-home" role="tabpanel" aria-labelledby="v-pills-home-tab">...</div>
 
     <div class="tab-pane fade" id="v-pills-profile" role="tabpanel" aria-labelledby="v-pills-profile-tab">...</div>
 
     <div class="tab-pane fade" id="v-pills-messages" role="tabpanel" aria-labelledby="v-pills-messages-tab">...</div>
 
     <div class="tab-pane fade" id="v-pills-settings" role="tabpanel" aria-labelledby="v-pills-settings-tab">...</div>
 
   </div>
 
 </div>
</
div

Mój cały plik test.php
<?php
require_once('header.php');
?>
<!DOCTYPE HTML>
<html lang="pl">
<head>
<title> ZnQ_Pv2 | Lista Administracji </title>
</head>
<body>
<section class="container bg-success">
<div class="row  margin-t-100 padding-t-40 padding-b-40">
  <div class="col-3">
<?php
require_once "connect.php";
$polaczenie = @new mysqli($host$db_user$db_password$db_name);

if (
$polaczenie->connect_errno!=0)
{
echo 
"Error: ".$polaczenie->connect_errno;
}
else {
if (
$rezultat = @$polaczenie->query("SELECT * FROM administracja WHERE gid='1'"))
{
while(
$administracja mysqli_fetch_assoc($rezultat))
{




?>
<div class="nav flex-column nav-pills" id="v-pills-tab" role="tablist" aria-orientation="vertical">
<a class="nav-link active" id="v-pills-home-tab" data-toggle="pill" href="#v-pills-home" role="tab" aria-controls="v-pills-home" aria-selected="true"><?php echo $administracja['nickname']; ?></a>
</div>
<div class="col-9">
<div class="tab-content" id="v-pills-tabContent">
  <div class="tab-pane fade show active" id="v-pills-home" role="tabpanel" aria-labelledby="v-pills-home-tab"><?php echo $administracja['opis']; ?></div>
<?php }?>
</div>
</div>
</div>
</section>
    </body>
  </html>
<?php
}
$rezultat->free_result();

$polaczenie->close();
?>
<?php
require_once('footer.php');
?>
Tylko to
<a class="nav-link active" id="v-pills-home-tab" data-toggle="pill" href="#v-pills-home" role="tab" aria-controls="v-pills-home" aria-selected="true">Home</a>
powinno znaleźć się w Twojej pętli, reszta kodu poza nią.
Po części działa chwała Ci 
   
! Ale, no tak zawsze musi być ale. Ale, teraz nie wyświetla opisu. domyślam się, że winą mogą być atrybuty href, aria-controls, aria-labelledby. Czy dałoby radę jakoś temu zaradzić czy tworzyć własne menu z js i divem onclick()?
Mój dawna wersja alpha zawierała takiego js i wyglądał tak( Wiem amatorsko)
function znaqu() {
 
document.getElementById("nick").style.display "none";
document.getElementById("nick1").style.display "block";
document.getElementById("nick2").style.display "none";
document.getElementById("nick3").style.display "none";
document.getElementById("nick4").style.display "none";
document.getElementById("nick5").style.display "none";

i divami
<div onclick="nick()" class="nicki"><span style="margin-left:5px;" class="wlasciciel"nick</span></div>
 <
div onclick="nick1()" class="nicki"><span style="margin-left:5px;" class="wlasciciel"nick1</span></div>
<
div onclick="nick2()" class="nicki"><span style="margin-left:5px;" class="admin"nick2</span></div>
<
div onclick="nick3()" class="nicki"><span style="margin-left:5px;" class="admin"nick3</span></div>
<
div onclick="nick4()" class="nicki"><span style="margin-left:5px;" class="jadmin"nick4</span></div>
<
div onclick="nick5()" class="nicki"><span style="margin-left:5px;" class="gmod"nick5</span></div
Ale jak to rozwiązać po stronie php
Nie wiem jak chcesz aby ten opis wyglądał, ale w bootstrapie w tym komponencie raczej go nie ma. Generalnie możesz wszystko wrzucić w miejsce nicku, tylko musisz to sobie ostylować w css
Jest w bootstrapie i nawet w tym kodzie
<div class="row">
  <
div class="col-3">
    <
div class="nav flex-column nav-pills" id="v-pills-tab" role="tablist" aria-orientation="vertical">
      <
class="nav-link active" id="v-pills-home-tab" data-toggle="pill" href="#v-pills-home" role="tab" aria-controls="v-pills-home" aria-selected="true">Tutaj nick</a>
    </
div>
  </
div>
  <
div class="col-9">
    <
div class="tab-content" id="v-pills-tabContent">
      <
div class="tab-pane fade show active" id="v-pills-home" role="tabpanel" aria-labelledby="v-pills-home-tab">Tutaj opis</div>
    </
div>
  </
div
Tylko jak zrobić, aby odpowiednio się zmieniały
Aaa, dobra, bo to są zakładki. Musisz zrobić dwie pętle, jedna na przyciski które masz, a drugą na content tabów.
<div class="tab-pane fade show active" id="v-pills-home" role="tabpanel" aria-labelledby="v-pills-home-tab">...</div>
Do tego musisz im nadać unikalne id. Najlepiej dodając np. id usera. Powinieneś mieć coś takiego
<a class="nav-link active" id="v-pills-<id_usera>-tab" data-toggle="pill" href="#v-pills-<id_usera>" role="tab" aria-controls="v-pills-<id_usera>" aria-selected="true">Home</a>
<div class="tab-pane fade show active" id="v-pills-<id_usera>" role="tabpanel" aria-labelledby="v-pills-home-tab">opis</div>
Nie wiem czy dobrze zrozumiałem, jeżeli tak to nie działa :/ W linku zmiena teraz home i tak dalej, na id, ale dalej nie wyświetla tekstu, który jest w bazie
if ($polaczenie->connect_errno!=0)
{
    echo 
"Error: ".$polaczenie->connect_errno;
}
else {
    if (
$rezultat = @$polaczenie->query("SELECT * FROM administracja WHERE gid='1'"))
    {
        while(
$administracja mysqli_fetch_assoc($rezultat))
        {
?>
            
            <a class="nav-link active" id="v-pills-<?php echo $administracja['id'];?>-tab" data-toggle="pill" href="#v-pills-<?php echo $administracja['id'];?>" role="tab" aria-controls="v-pills-<?php echo $administracja['id'];?>" aria-selected="true"><?php echo $administracja['nickname']; ?></a>
        <?php }?>
                    </div>
            <div class="col-9">
                <div class="tab-content" id="v-pills-tabContent">
<?php     while($administracja mysqli_fetch_assoc($rezultat))
        {
?>    
            <div class="tab-pane fade show active" id="v-pills-<?php echo $administracja['id'];?>" role="tabpanel" aria-labelledby="v-pills-<?php echo $administracja['id'];?>-tab"><?php echo $administracja['opis']; ?></div>
        <?php }?>
                </div>
            </div> 
Echo Ci gdzieś zaginęło przy id
Cytat:<?php.$administracja['id'].?>
i te kropki niepotrzebne.
Wiem, że nie było echo i kropek, już poprawione, ale dalej nie wyświetla.

@edit
Nie wyświetla nic z tej pętli
while($administracja mysqli_fetch_assoc($rezultat))
        {
?>            
            <div class="tab-pane fade show active" id="v-pills-<?php echo $administracja['id'];?>" role="tabpanel" aria-labelledby="v-pills-<?php echo $administracja['id'];?>-tab"><?php echo $administracja['opis']; ?></div>

        <?php }?>
Czy winą może być dublowanie $administracja w dwóch różnych pętlach ?
Problemem jest użycie mysqli_fetch_assoc które pobiera wiersz, po wierszu dane z bazy dla zapytania, jednak przy kolejnym użyciu nie ma co pobierać, ponieważ wszystko już poprał wcześniej.
Użycie mysqli_fetch_all która zwraca wszystkie dane w formie arraya powinno załatwić sprawę. Potrzebujesz coś w tym stylu:
$users = mysqli_fetch_all($rezultat);

foreach($users as $user) {
?>
//Kod buttonow
<?php } ?>

<?php foreach($users as $user) { ?>
// kod contentu zakladek
<?php } ?>
Po zmiane while na foreacha mamy puste tablice
   
Ale teraz content zakładki działa
kod php

if ($polaczenie->connect_errno!=0)
{
echo 
"Error: ".$polaczenie->connect_errno;
}
else {
if (
$rezultat = @$polaczenie->query("SELECT * FROM administracja WHERE gid='1'"))
{
$users mysqli_fetch_all($rezultat);
foreach(
$users as $user) {
?>
<a class="nav-link active" id="v-pills-<?php echo $user['id'];?>-tab" data-toggle="pill" href="#v-pills-<?php echo $user['id'];?>" role="tab" aria-controls="v-pills-<?php echo $user['id'];?>" aria-selected="true"><?php echo $user['nickname']; ?></a>
<?php }?>
</div>
</div>
<div class="col-9">
<div class="tab-content" id="v-pills-tabContent">
<?php foreach($users as $user) { ?> 
<div class="tab-pane fade show active" id="v-pills-<?php echo $user['id'];?>" role="tabpanel" aria-labelledby="v-pills-<?php echo $user['id'];?>-tab"><?php echo $user['opis']; ?></div>

<?php }?>
var_dump($users); die; pokaz
array(2) { [0]=> array(5) { [0]=> string(1"3" [1]=> string(5"Dupa3" [2]=> string(0"" [3]=> string(32"Jest to d?ugi opis by starczy?o3" [4]=> string(1"1" } [1]=> array(5) { [0]=> string(1"4" [1]=> string(5"Dupa4" [2]=> string(0"" [3]=> string(32"Jest to d?ugi opis by starczy?o4" [4]=> string(1"1" } } 
Zobacz tak:
$users = mysqli_fetch_all($rezultat, MYSQLI_ASSOC);
Jak nie będzie działało to znowu pokaż var_dump
Działa to !
$users = mysqli_fetch_all($rezultat, MYSQLI_ASSOC);
I to tak jak chciałem dzięki wielkie za chęci pomocy

Ale czemu cały czas nie mam polskich znaków ?
[3]=> string(32"Jest to d?ugi opis by starczy? 
w pliku php mam takie coś
w head
<meta charset="utf-8">
i w php
$polaczenie->set_charset("utf-8"); 
w bazie mam ustawione kodowanie na utf8_general_ci(zmieniam na polish_ci)
w Notepadzie mam UTF-8 bez BOM

W bazie wygląda to normalnie są polskie znaki, a na stronie już nie ma



Użytkownicy przeglądający ten wątek:

1 gości