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

Wstrzykiwanie danych do tabeli - Bootstrap

Object Storage Arubacloud
+1 głos
308 wizyt
pytanie zadane 1 stycznia 2021 w PHP przez dequk Użytkownik (810 p.)
edycja 1 stycznia 2021 przez dequk

Witam, wykonuje swoj maly projekt, który ma forme przypomnienia mi paru rzeczy zwięzłych z programowaniem webowym oraz nauki i mam jeden mały problem związany z wyświetlaniem danych w tabeli w tabeli (nie takiej jak mogę stworzyć w phpie, tylko mam swój szablon napisany, stworzone tabele i szukam skryptu albo po prostu filmu pokazującego tą ideę. Obecnie skrypt PHPa wypisuje mi dane, ale po prostu jest to zwykły format tekstowy, ja chciałbym go wstrzyknąć do przygotowanej tabeli.

Posiadam poniższy kod napisany w osobnym pliku PHP:

 

<?php

    require('db_data.php');

    $zapytanie = "SELECT parametry_baterie.kod_produktu, parametry_baterie.producent, parametry_baterie.cena, kategoria.typ_kategoria From kategoria Join parametry_baterie on parametry_baterie.id_kategoria= kategoria.id_kategoria UNION SELECT parametry_czujniki.kod_produktu, parametry_czujniki.producent, parametry_czujniki.cena, kategoria.typ_kategoria From kategoria Join parametry_czujniki on parametry_czujniki.id_kategoria= kategoria.id_kategoria UNION SELECT parametry_diody.kod_produktu, parametry_diody.producent, parametry_diody.cena, kategoria.typ_kategoria From kategoria Join parametry_diody on parametry_diody.id_kategoria= kategoria.id_kategoria UNION SELECT parametry_kondensatory.kod_produktu, parametry_kondensatory.producent, parametry_kondensatory.cena, kategoria.typ_kategoria From kategoria Join parametry_kondensatory on parametry_kondensatory.id_kategoria= kategoria.id_kategoria";


    $wynik = $connect->query($zapytanie);

    if ($wynik->num_rows > 0) {
        while ($row = $wynik->fetch_assoc()) {
            echo " ".$row["kod_produktu"]." ".$row["producent"]." ".$row["cena"]." ".$row["typ_kategoria"]."<br />";
        }
    }
$connect->close();
?>

Szablon tabeli: 
 

			<div class="tabela-wyniki-wyszukiwania my-4">
				<table id="przeglad-oferty" class="display compact" style="width: 100%">
					<thead>
						<tr>
			                <th>Kod produktu</th>
			                <th>Producent</th>
			                <th>Cena</th>
			                <th>Kategoria</th>					
						</tr>
					</thead>
			        <tbody>
			            <tr>
			                <td>Tiger Nixon</td>
			                <td>System Architect</td>
			                <td>Edinburgh</td>
			                <td>61</td>
			            </tr>
			        </tbody>					
				</table>				
			</div>

Tabela pochodzi z pluginu DataTables. Dodatkowo posiada oskryptowanie w JSie jeśli chodzi o dodatkowe jej funkcje:
 

<script type="text/javascript">
$(document).ready(function() {
    $('#przeglad-oferty').DataTable();
} );
</script>

Bardzo proszę o pomoc

1 odpowiedź

+1 głos
odpowiedź 1 stycznia 2021 przez SzkolnyAdmin Szeryf (86,400 p.)
wybrane 2 stycznia 2021 przez dequk
 
Najlepsza
Pozwól sobie pomóc i zamieść kod. I zmień kategorię pytania albo jego temat.
komentarz 1 stycznia 2021 przez dequk Użytkownik (810 p.)
Zmieniłem :)
komentarz 1 stycznia 2021 przez SzkolnyAdmin Szeryf (86,400 p.)
edycja 1 stycznia 2021 przez SzkolnyAdmin

A szablon tabeli jaki jest? Bo może wystarczy dodać tagi w pętli while i wystarczy. Pętla sama wygeneruje ci wiersze tabeli, np. tak:

if($wynik->num_rows > 0) {
		echo "<table>";
        // Tu możesz dać nagłówek tabeli
        while ($row = $wynik->fetch_assoc()) {
            echo "<tr><td>".$row["kod_produktu"]."</td></td>".$row["producent"]."</td></td>".$row["cena"]."</td></td>".$row["typ_kategoria"]."</tr>";
        }
		echo "</table>";
    }

 

komentarz 1 stycznia 2021 przez dequk Użytkownik (810 p.)
Myslę, że już niczego nie brakuje :)
komentarz 1 stycznia 2021 przez dequk Użytkownik (810 p.)

@SzkolnyAdmin,

dodałem wstrzykiwanie zgodnie ze przykładem na górze, wydaje mi się, że dobrze, jednak wystąpił błąd, w sumie to nie wiem czego dotyczy :/

 

			<div class="tabela-wyniki-wyszukiwania my-4">
				<?php
				echo "<table id="przeglad-oferty" class="display compact" style="width: 100%">";
					<thead>
						<tr>
			                <th>Kod produktu</th>
			                <th>Producent</th>
			                <th>Cena</th>
			                <th>Kategoria</th>					
						</tr>
					</thead>
			        <tbody>
			        while ($row = $wynik->fetch_assoc()) {
			            "<tr>
			                <td>".$row["kod_produktu"]."</td>
			                <td>".$row["producent"]."</td>
			                <td>".$row["cena"]."</td>
			                <td>".$row["typ_kategoria"]."</td>
			            </tr>"
			        }
			        </tbody>					
				echo "</table>";				
				?>
			</div>	

Błąd:

Parse error: syntax error, unexpected 'przeglad' (T_STRING), expecting ';' or ',' in C:\xampp\htdocs\sklep\przeglad-oferty.php on line 77

Jakby odnosił się do nazwy, próbowałem także zmienić znak - pomiędzy nimi na _ jednak ten problem dalej występuje

komentarz 1 stycznia 2021 przez SzkolnyAdmin Szeryf (86,400 p.)

Problem z apostrofami jako ogranicznikami tekstu i apostrofami w tagach HTML. Tu masz dobrze:

<div class="tabela-wyniki-wyszukiwania my-4">
    <?php
    echo '<table id="przeglad-oferty" class="display compact" style="width: 100%">';
    echo "<thead>
            <tr>
                <th>Kod produktu</th>
                <th>Producent</th>
                <th>Cena</th>
                <th>Kategoria</th>                  
            </tr>
        </thead>
        <tbody>";
        while ($row = $wynik->fetch_assoc()) {
            echo "<tr>
                <td>".$row["kod_produktu"]."</td>
                <td>".$row["producent"]."</td>
                <td>".$row["cena"]."</td>
                <td>".$row["typ_kategoria"]."</td>
            </tr>";
        }
                        
    echo "</tbody>  </table>";              
    ?>
</div> 

 

komentarz 1 stycznia 2021 przez dequk Użytkownik (810 p.)

Poprawiłem obecne błedy, przeszło, dziękuje za pomoc. Tylko obecnie mam dwa błedy, które się wyświetlają już bezpośrednio w miejscu tabeli, tzn:

Notice: Undefined variable: wynik in C:\xampp\htdocs\sklep\przeglad-oferty.php on line 77

Notice: Trying to get property 'num_rows' of non-object in C:\xampp\htdocs\sklep\przeglad-oferty.php on line 77

Tutaj to już trochę się pogubiłem, dlaczego tak się dzieje, gdyż te zmienne uwzględniałem :/ 

komentarz 1 stycznia 2021 przez SzkolnyAdmin Szeryf (86,400 p.)
Wrzuć kod całej strony, ponieważ wygląda na to, że gdzieś zgubiłeś zmienną wynik.
komentarz 1 stycznia 2021 przez dequk Użytkownik (810 p.)
Podrzucam na Pastebina, gdyż nie wiem jak to będzie z widocznoscią tutaj całej strony:

Cała strona: https://pastebin.com/aBG1ZM8u
Skrypt PHP: https://pastebin.com/56xZknMr
Połączenie z bazą danych: https://pastebin.com/8Mki302n
komentarz 1 stycznia 2021 przez SzkolnyAdmin Szeryf (86,400 p.)
Pliki nie są połączone ze sobą. W skrypcie PHP umieść kod generujący tabelę: zamiast linii od 10 do 14 wstaw linie od 77 do 97 z index.php (usuń znaki komentarza z linii 77 i 97). W pliku index.php z miejsce linii 77-97 (przeniesionych do skryptu) wstaw instrukcję dołączającą ten skrypt.
komentarz 1 stycznia 2021 przez dequk Użytkownik (810 p.)

Dziekuje, faktycznie zadziałało jednak niestety style pluginu nie działają przy tym ustawieniu.

 

<div class="tabela-wyniki-wyszukiwania my-4">
				<?php
					include("wys_lista_produktow-wszystkie.php")				
				?>
</div>


Pliki skryptu:
 

<?php

	require('db_data.php');

	$zapytanie = "SELECT parametry_baterie.kod_produktu, parametry_baterie.producent, parametry_baterie.cena, kategoria.typ_kategoria From kategoria Join parametry_baterie on parametry_baterie.id_kategoria= kategoria.id_kategoria UNION SELECT parametry_czujniki.kod_produktu, parametry_czujniki.producent, parametry_czujniki.cena, kategoria.typ_kategoria From kategoria Join parametry_czujniki on parametry_czujniki.id_kategoria= kategoria.id_kategoria UNION SELECT parametry_diody.kod_produktu, parametry_diody.producent, parametry_diody.cena, kategoria.typ_kategoria From kategoria Join parametry_diody on parametry_diody.id_kategoria= kategoria.id_kategoria UNION SELECT parametry_kondensatory.kod_produktu, parametry_kondensatory.producent, parametry_kondensatory.cena, kategoria.typ_kategoria From kategoria Join parametry_kondensatory on parametry_kondensatory.id_kategoria= kategoria.id_kategoria";


	$wynik = $connect->query($zapytanie);

				if($wynik->num_rows > 0) {
				echo '<table id="przeglad_oferty" class="display compact" style="width: 100%">';
					"<thead>
						<tr>
			                <th>Kod produktu</th>
			                <th>Producent</th>
			                <th>Cena</th>
			                <th>Kategoria</th>					
						</tr>
					</thead>
			        <tbody>";
			        while ($row = $wynik->fetch_assoc()) {
			    echo    "<tr>
			                <td>".$row["kod_produktu"]."</td>
			                <td>".$row["producent"]."</td>
			                <td>".$row["cena"]."</td>
			                <td>".$row["typ_kategoria"]."</td>
			            </tr>";
			        }
			    echo "</tbody> </table>";
				}
$connect->close();
?>

Zdjęcie poglądowe:

komentarz 1 stycznia 2021 przez SzkolnyAdmin Szeryf (86,400 p.)
Wcześniej miałeś identyfikator tabli "przeglad-oferty", teraz zmieniłeś go na "przeglad_oferty", a w arkuszu stylów jak jest?
komentarz 1 stycznia 2021 przez SzkolnyAdmin Szeryf (86,400 p.)

Już widze. W skrypcie JS masz:

$(document).ready(function() {
    $('#przeglad-oferty').DataTable();
} );

Natomiast identyfikator tabeli to "przeglad_oferty".

Jak pomogłem, to kliknij najlepszą odpowiedź.

 

komentarz 1 stycznia 2021 przez dequk Użytkownik (810 p.)

Faktycznie, nie uwzględniłem tego, moje niedopatrzenie, jednak po zmianie nazwy dodały się tylko linie z stylu :/ Wiec coś jest nie tak do końca 

komentarz 1 stycznia 2021 przez SzkolnyAdmin Szeryf (86,400 p.)
A jak konkretnie ma wyglądać prezentacja wyników?
Wyczyść cache przeglądarki, może tam siedzi coś starego.
komentarz 1 stycznia 2021 przez dequk Użytkownik (810 p.)

Ciasteczka wyczyszczone, niestety nie pomogło.
Prezentacja wyników na wyglądać w taki sposób:

Tutaj na przykładzie jednego wiersza wpisanego na sztywno. Zauważyłem także, że po przeniesieniu tej części do skryptu zaczeły wyrzucać błędy i ostrzeżenia.

 

Treść błędów:
jquery-3.5.1.slim.min.js:2 jQuery.Deferred exception: Cannot read property 'mData' of undefined TypeError: Cannot read property 'mData' of undefined
    at HTMLTableCellElement.

Uncaught TypeError: Cannot read property 'mData' of undefined
    at HTMLTableCellElement

komentarz 1 stycznia 2021 przez SzkolnyAdmin Szeryf (86,400 p.)
Wrzuć błąd w wyszukiwarkę, pierwszy z góry wynik ze StackOverflow. Wersja jQuery odpowiednia?
komentarz 1 stycznia 2021 przez dequk Użytkownik (810 p.)
Oto strona pluginu i ten styl, jest informacja o tej wersji:
https://www.datatables.net/examples/styling/compact.html
Dodatkowo także w instrukcji manualnej sa do tego odnośniki:
https://www.datatables.net/manual/installation

Przyznam, ze nie widzę tutaj niczego innego.
komentarz 2 stycznia 2021 przez SzkolnyAdmin Szeryf (86,400 p.)
Zobacz w źródle strony, czy tabela generuje się poprawnie (zgodnie z wymaganiami).
komentarz 2 stycznia 2021 przez dequk Użytkownik (810 p.)
Właśnie generuje się tak jak pokazałem, jedynie dochodzą linie pomiędzy nimi, dodane są odpowiednio trzy pliki, arkusz stylów i dwa skrypty JS.
komentarz 2 stycznia 2021 przez SzkolnyAdmin Szeryf (86,400 p.)

U mnie tabela generuje się dobrze (na innych danych oczywiście). Przy generowaniu tabeli brak ci jednej instrukcji echo (tej, która generuje thead, wiersz nagłówka i rozpoczynający tag tbody)

if($wynik->num_rows > 0) {
                echo '<table id="przeglad_oferty" class="display compact" style="width: 100%">';
                 echo   "<thead>
                        <tr>
                            <th>Kod produktu</th>
                            <th>Producent</th>
                            <th>Cena</th>
                            <th>Kategoria</th>                  
                        </tr>
                    </thead>
                    <tbody>";
                    while ($row = $wynik->fetch_assoc()) {
                echo    "<tr>
                            <td>".$row["kod_produktu"]."</td>
                            <td>".$row["producent"]."</td>
                            <td>".$row["cena"]."</td>
                            <td>".$row["typ_kategoria"]."</td>
                        </tr>";
                    }
                echo "</tbody> </table>";
                }

 

 

komentarz 2 stycznia 2021 przez dequk Użytkownik (810 p.)

@SzkolnyAdmin,

Teraz pojawiły się informacje o kolumnach na górze(pogrubione) jednak za to znikły podziały pomiędzy wierszami :/ 

komentarz 2 stycznia 2021 przez dequk Użytkownik (810 p.)
Odświeżyłem jeszcze raz i zadziałało :) Dziękuje bardzo!
komentarz 2 stycznia 2021 przez SzkolnyAdmin Szeryf (86,400 p.)
Daliśmy radę, ale jeszcze pewnie nie jeden raz będziesz tak siedział i główkował.

Podobne pytania

0 głosów
0 odpowiedzi 366 wizyt
pytanie zadane 25 czerwca 2018 w PHP przez hiper007 Stary wyjadacz (11,270 p.)
+1 głos
1 odpowiedź 267 wizyt
pytanie zadane 10 grudnia 2020 w PHP przez ariva6152 Użytkownik (570 p.)
0 głosów
2 odpowiedzi 1,152 wizyt
pytanie zadane 11 stycznia 2016 w HTML i CSS przez ShadoWs Bywalec (2,800 p.)

92,624 zapytań

141,482 odpowiedzi

319,822 komentarzy

62,005 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!

...