mam liste rozwijana z parametrami z kolumny w bazie, nie wyświetla w php rekordów

Odpowiedz Nowy wątek
2019-11-18 14:07
0

Witam, napisałem stronę php która pobiera z bazy danych wszystkie rekordy. Teraz chciałbym aby wyświetlane były tylko rekordy z wartością wybraną z rozwijanej listy, znajdujące się dla kolumny linia_nr.

Dotychczasowa strona poprawnie działająca, wyświetla wszystkie rekordy z tabeli 'pomiary' od najwyższego 'id' i dzieli na strony po 72 rubryki/pomiary,

<html><head><title>Wykaz pomiarów temp. z Bazy Danych</title></head>
<body>  

<?php
 echo '<p><h2>Rejestrator Temperatur</h2></p>';
 //Połączenie z mysql i wybranie bazy
 $link = mysqli_connect('localhost','user','pass')
  or die ('Nie można połączyć się z MySQL.'); 
 mysqli_select_db($link,'naratemperatury');

 //Domyślne wartości, odpowiednio liczby rekordów na strone i przesunięcia
 $count=72;
 $offset=0;

 //Pobranie danych z $_GET jezsli ustawione
 if(isset($_GET['count']))$count = $_GET['count'];
 if(isset($_GET['offset']))$offset = $count*$_GET['offset']; //numer strony

 //Pobranie liczby rekordów
 $sql = 'Select count(*) from pomiary';
 $result = mysqli_query($link,$sql);
 $r = mysqli_fetch_array($result);
 //Liczba stron, użycie ceil - zaokrąglenie w górę, w celu zapewnienia, że żadna strona się nie straci
 $pages = ceil($r[0]/$count);

 //Pobranie odpowieniej paczki
 $sql = 'Select * from pomiary ORDER BY id DESC Limit '.$count.' offset '.$offset.';';
 $result = mysqli_query($link,$sql);
//testy  z rozwijanym wyborem

 //Początek tabeli
 echo '<table Border CELLSPACING=0 CELLPADDING=5><tr bgcolor=#CCCCCC><th>ID</th><th >Data</th><th>Linia NR</th><th>Temperatura 1 IN</th><th>Temperatura 2 Out</th><th>Temperatura 3 opc.</th><th>Alarmy</th></tr>';

 //Pętla po wszystkich rekordach
 while(($row=mysqli_fetch_array($result))!=NULL){
$redalarm =     $row['temperatura2'] ;
if ($redalarm > 30 || $redalarm < -70)
{

 echo '<tr><td>'.$row['id'].'</td><td>'.$row['data']. '</td><td>'.$row['linia_nr'].'</td><td>'.$row['temperatura1'].'</td><td bgcolor="yellow">'.$row['temperatura2'].'</td><td>'.$row['temperatura3'].'</td><td>'.$row['alarm'].'</td></tr>';
} else
{
  echo '<tr><td>'.$row['id'].'</td><td>'.$row['data']. '</td><td>'.$row['linia_nr'].'</td><td>'.$row['temperatura1'].'</td><td>'.$row['temperatura2'].'</td><td>'.$row['temperatura3'].'</td><td>'.$row['alarm'].'</td></tr>';

}

 }
 echo '</table>';
 echo '<a>Strony: </a>';
 //Pętla po stronach
 for($i=0;$i<$pages;$i++){
 //jeśli obecna strona, nie twórz linku do strony
 if($i*$count==$offset){
 echo '<b>| '.$i.' |</b>';
 }else{
 echo '<a href="tabelapomiary.php?count='.$count.'&offset='.$i.'">| '.$i.' |</a>';
 }
 }

 ?>

</body> 

</html>

Teraz chciałbym mieć możliwość wyświetlania tylko wyników np dla linii nr 12,
Udało mi się zrobić obiekt Select pobierający z bazy danych wszystkie możliwe numery linii które zapisane zostały dotychczas. Lecz napotykam na problem gdy chcę połączyć wybór z listy rozwijanej i wyświetlanie tabeli z podziałem na strony.. (czy koniecznym jest napisanie strony z użyciem ramek?

oto kod:

<html><head><title>Wykaz pomiarów temp. z Bazy Danych</title></head>
<body>  

<?php
 echo '<p><h2>Rejestrator Temperatur</h2></p>';
 //Połączenie z mysql i wybranie bazy
 $link = mysqli_connect('localhost','user','pass')
  or die ('Nie można połączyć się z MySQL.'); 
 mysqli_select_db($link,'naratemperatury');

 // lista rozwijana
  echo '<form action="tabelapomiary.php" method="post">';
 echo '<!----- Select Option Fields Starts Here ----->';
 echo '<select style="width:50px" name="LiniaNR[]">';
 $sql = 'SELECT  DISTINCT linia_nr FROM pomiary';
 $linia_query = mysqli_query($link,$sql);

while($wiersz = mysqli_fetch_array($linia_query) )
{
    echo '<option vlaue="'.$wiersz['linia_nr'].'">'.$wiersz['linia_nr'].'</option>';
}
 echo '</select>';
/*<?php include'select_value.php'; ?> */

 echo '<input name="submit" type="submit" value="Wyświetl">';
 echo '</form>';

 /*
 echo '<p>Rejestrator Linii NR:</p><select name="opcja"  style="width:50px" >';

 $sqlw = 'SELECT  DISTINCT linia_nr FROM pomiary';
    $linia_query = mysqli_query($link,$sqlw);

while($wiersz = mysqli_fetch_array($linia_query) )
{
    echo '<option vlaue="'.$wiersz['linia_nr'].'">'.$wiersz['linia_nr'].'</option>';
}

echo '</select>';  */

 //Domyślne wartości, odpowiednio liczby rekordów na strone i przesunięcia
 $count=72;
 $offset=0;

 if(isset($_POST['submit'])){
     if(!empty($_POST['Color'])) {
echo "<span>You have selected :</span><br/>";
// As output of $_POST['Color'] is an array we have to use Foreach Loop to display individual value
foreach ($_POST['Color'] as $select)
{
 //Pobranie danych z $_GET jezsli ustawione
 if(isset($_GET['count']))$count = $_GET['count'];
 if(isset($_GET['offset']))$offset = $count*$_GET['offset']; //numer strony

 //Pobranie liczby rekordów
 $sql = 'Select count(*) from pomiary WHERE linia_nr ='.$select.'';
 $result = mysqli_query($link,$sql);
 $r = mysqli_fetch_array($result);
 //Liczba stron, użycie ceil - zaokrąglenie w górę, w celu zapewnienia, że żadna strona się nie straci
 $pages = ceil($r[0]/$count);

 //Pobranie odpowieniej paczki
 $sql = 'Select * from pomiary ORDER BY id DESC WHERE linia_nr ='.$select.' Limit '.$count.' offset '.$offset.';';
 $result = mysqli_query($link,$sql);

//testy  z rozwijanym wyborem

 //Początek tabeli
 echo '<table Border CELLSPACING=0 CELLPADDING=5><tr bgcolor=#CCCCCC><th>ID</th><th >Data</th><th>Linia NR</th><th>Temperatura 1 IN</th><th>Temperatura 2 Out</th><th>Temperatura 3 opc.</th><th>Alarmy</th></tr>';

 //Pętla po wszystkich rekordach
 while(($row=mysqli_fetch_array($link,$sql))!=NULL){
$redalarm =     $row['temperatura2'] ;
if ($redalarm > 30 || $redalarm < -70)
{

 echo '<tr><td>'.$row['id'].'</td><td>'.$row['data']. '</td><td>'.$row['linia_nr'].'</td><td>'.$row['temperatura1'].'</td><td bgcolor="yellow">'.$row['temperatura2'].'</td><td>'.$row['temperatura3'].'</td><td>'.$row['alarm'].'</td></tr>';
} else
{
  echo '<tr><td>'.$row['id'].'</td><td>'.$row['data']. '</td><td>'.$row['linia_nr'].'</td><td>'.$row['temperatura1'].'</td><td>'.$row['temperatura2'].'</td><td>'.$row['temperatura3'].'</td><td>'.$row['alarm'].'</td></tr>';

}

 }
 echo '</table>';
 echo '<a>Strony: </a>';
 //Pętla po stronach
 for($i=0;$i<$pages;$i++){
 //jeśli obecna strona, nie twórz linku do strony
 if($i*$count==$offset){
 echo '<b>| '.$i.' |</b>';
 }else{
 echo '<a href="tabelapomiary.php?count='.$count.'&offset='.$i.'">| '.$i.' |</a>';
 }
 }
 }
 }
 }

 ?>

</body> 

</html>

oto co się wyświetla:
strona
problematyczna linia: ```
while(($row=mysqli_fetch_array($link,$sql))!=NULL){

Pozostało 580 znaków

2019-11-18 14:32
0

Czy ten kod jest Tobie łatwy do ogarnięcia? Bez problemów nanosisz zmiany i wprowadzasz nowe ficzery? W obecnej formie kod jest zupełnie nieczytelny, narazie udziele prostych rad co do poprawy kodu (a to przełoży się na szybkość i łatwość odnalezienia rozwiązania problemu)

  • używaj funkcji
  • odseparuj html i php'a najlepiej jak Ci się uda
  • sprawdź dokładnie w dokumentacji jak się korzysta z funkcji mysqli_fetch_array i sprawdź jakie parametry podajesz przy użyciu tej funkcji.
  • zamiast komplikować zapis z echo - postaraj się zrozumieć jak używać funkcji sprintf i jej pochodnych.
  • tego typu zapis <table Border CELLSPACING=0 CELLPADDING=5><tr bgcolor=#CCCCCC>... obecnie jest karygodny, używaj poprawnie atrybutów, a w tym styli css. Jeśli nie umiesz css'a w 5 minut znajdziesz szybki tutorial w necie jak go się nauczyć i to co Ci będzie potrzebne powinieneś opanować w maks. godzinę.

Odnośnie pytania o robienie stron z ramkami - o ile myślisz o iframe - to nie rób tego. Jeśli chcesz mieć stronicowanie musisz zmodyfikować zapytania, a od użytkownika brać tylko numer strony (tylko nie wrzucaj tego bezpośrednio do zapytania, bo wsadzanie danych usera do zapytań to proszenie się o kłopoty).

edytowany 2x, ostatnio: axelbest, 2019-11-18 15:04

Pozostało 580 znaków

2019-11-18 14:46
0

Najprościej to w FORM zmienić action z POST na GET i dopisywać wybór do odnośników ze stronami.

Pozostało 580 znaków

2019-11-18 22:30
0

problem w składni zapytania,

 //Pobranie odpowieniej paczki
 $sql = 'Select * FROM pomiary WHERE linia_nr='.$LNR.' ORDER BY id DESC Limit '.$count.'  offset '.$offset.' ';
 $result = mysqli_query($link,$sql);

Jest ok, co do css dawno nie pisałem w html'u i pozapominało sie trochę, A strona w swej prostocie nie wymaga zmiany tego, i nie bedzie udostępniana na zewnątrz. Ma być szybką furtką do danych w bazie. :) dzieki za pomoc

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0