Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][HTML][MYSQL]Pobieranie informacji z bazy danych do tabeli
Forum PHP.pl > Forum > Przedszkole
kamulator
Witam!
Mam mały problem z pobraniem potrzebnych informacjji z bazy danych do tabeli. Mianowicie wykonuję dziennik elektroniczny na zaliczenie i nie mogę się z tym uporać sad.gif . Problem polega na tym że chcę wybrać wszystkie przedmioty a obok nich oceny które sa przypisane dla danego przedmiotu. Z sesji przekazane jest tylko login usera. W chwili obecnej przedmiot wyświetla mi się tyle razy ile jest w nim ocen. A chodzi mi o to żeby przedmiot wyswietlał się tylko w jednym wierszu a oceny w jednej komórce po przecinku. Pod spodem zamieszczam baze danych i tabelke jak ma to wyglądać. Proszę o pomoc.


  1. CREATE TABLE `klasy` (
  2.   `id_klasy` int(11) NOT NULL AUTO_INCREMENT,
  3.   `nazwa_klasy` varchar(5) NOT NULL DEFAULT '',
  4.   `id_wychowawcy` int(11) NOT NULL DEFAULT '0',
  5.   PRIMARY KEY (`id_klasy`)
  6. ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
  7.  
  8.  
  9.  
  10. INSERT INTO `klasy` VALUES (1, '4IA', 1);
  11.  
  12.  
  13. CREATE TABLE `nauczyciele` (
  14.   `id_nauczyciela` int(11) NOT NULL AUTO_INCREMENT,
  15.   `imie` varchar(30) NOT NULL DEFAULT '',
  16.   `nazwisko` varchar(40) NOT NULL DEFAULT '',
  17.   PRIMARY KEY (`id_nauczyciela`)
  18. ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;
  19.  
  20.  
  21. INSERT INTO `nauczyciele` VALUES (1, 'hh', 'hh');
  22. INSERT INTO `nauczyciele` VALUES (2, 'xcn', 'xzci');
  23. INSERT INTO `nauczyciele` VALUES (3, 'Jazxcsz', 'zxcjewski');
  24. INSERT INTO `nauczyciele` VALUES (4, 'zxcna', 'Fxczt');
  25.  
  26.  
  27.  
  28. CREATE TABLE `oceny` (
  29.   `id_oceny` int(11) NOT NULL AUTO_INCREMENT,
  30.   `id_usera` int(11) NOT NULL DEFAULT '0',
  31.   `id_przedmiotu` int(11) NOT NULL DEFAULT '0',
  32.   `ocena` char(3) NOT NULL DEFAULT '0',
  33.   `ocena_semsetr` char(3) NOT NULL DEFAULT '0',
  34.   `ocena_koncowa` char(3) NOT NULL DEFAULT '0',
  35.   PRIMARY KEY (`id_oceny`)
  36. ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;
  37.  
  38. INSERT INTO `oceny` VALUES (1, 7, 1, '4', '', '');
  39. INSERT INTO `oceny` VALUES (2, 7, 1, '3', '', '');
  40. INSERT INTO `oceny` VALUES (3, 7, 2, '5', '', '');
  41. INSERT INTO `oceny` VALUES (4, 7, 2, '6', '', '');
  42.  
  43.  
  44. CREATE TABLE `przedmioty` (
  45.   `id_przedmiotu` int(11) NOT NULL AUTO_INCREMENT,
  46.   `nazwa_przedmiotu` varchar(60) NOT NULL DEFAULT '',
  47.   `id_nauczyciela` int(11) NOT NULL DEFAULT '0',
  48.   `id_klasy` int(11) NOT NULL DEFAULT '0',
  49.   PRIMARY KEY (`id_przedmiotu`)
  50. ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
  51.  
  52.  
  53. INSERT INTO `przedmioty` VALUES (1, 'Programowanie Strukturalne i Obiektowe', 2, 1);
  54. INSERT INTO `przedmioty` VALUES (2, 'Zajęcia Specjalizacyjne', 2, 1);
  55.  
  56.  
  57. CREATE TABLE `user` (
  58.   `id_usera` int(11) NOT NULL AUTO_INCREMENT,
  59.   `imie` varchar(30) NOT NULL DEFAULT '',
  60.   `nazwisko` varchar(50) NOT NULL DEFAULT '',
  61.   `login` varchar(20) NOT NULL DEFAULT '',
  62.   `haslo` varchar(32) NOT NULL DEFAULT '',
  63.   `adres` varchar(50) NOT NULL DEFAULT '',
  64.   `telefon` varchar(15) NOT NULL DEFAULT '',
  65.   `email` varchar(25) NOT NULL DEFAULT '',
  66.   `id_prawa` int(11) NOT NULL DEFAULT '0',
  67.   `id_klasy` int(11) NOT NULL DEFAULT '0',
  68.   PRIMARY KEY (`id_usera`)
  69. ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;
  70.  
  71.  
  72. INSERT INTO `user` VALUES (7, 'hgj', 'jghjk', 'sad@sd.pl', 'c47e0be39df10a86231be52303796d51', 'ty', '645345345', 'werwer', 0, 1);


  1. <table align='center' border='0' width='700' cellspacing='0' cellpadding='5'>
  2. <tr bgcolor=333333>
  3. <td align='center' ><b><font color=white>Przedmioty</font></b></td>
  4. <td align='center'><b><font color=white>Oceny I semestr</font></b></td>
  5. <td align='center'><b><font color=white>Ocena półroczna </font></b></td>
  6. <td align='center'><b><font color=white>Oceny II semestr</font></b></td>
  7. <td align='center'><b><font color=white>Ocena Końcowa</font></b></td>
  8. </tr>
isso
No więc po koleji...

Masz login użytkownika, więc sprawdzasz w tabeli użytkowników jego id_user, dalej robisz tak: robisz zapytanie o wszystkie przedmioty i w pętli robisz zapytanie o oceny użytkownika.

W pseudo kodzie:
Kod
1. Na podstawie loginu pobierz ID użytkownika
2. Wypisz kolejny przedmiot z listy przedmiotów, jeżeli nie ma przedmiotu do wypisania zakończ algorytm.
3. Wypisz wszystkie oceny z tego przedmiotu dla ID użytkownika, wróć do punktu 2.
kamulator
W tamtym poscie ucieło mi kod. Oto reszta kodu 


  1. <?php
  2. $user=$_SESSION['logowanie'];
  3. $query1 = "SELECT * FROM user WHERE login = '$user'";
  4. $result1 = mysql_query($query1)
  5.     or die("Query failed");
  6. while ($row1 = mysql_fetch_array($result1)) {
  7. $id_userka=$row1["id_usera"];
  8. }
  9. $query3 = "SELECT * FROM user WHERE login = '$user'";
  10. $result3 = mysql_query($query1)
  11.     or die("Query failed");
  12. while ($row3 = mysql_fetch_array($result3)) {
  13. $id_klaski=$row3["id_klasy"];
  14. }
  15.  
  16. $query = "SELECT * FROM oceny, user, przedmioty, klasy WHERE oceny.id_usera = '$id_userka' AND przedmioty.id_przedmiotu=oceny.id_przedmiotu AND przedmioty.id_klasy = user.id_klasy";
  17.  
  18. $result= mysql_query($query);
  19.  
  20.  
  21. $obAmount=mysql_num_rows($result);
  22.  
  23. for($x=0;$x<$obAmount;$x++)
  24.   {
  25.  
  26.     $row=mysql_fetch_assoc($result);
  27.   echo "<tr><td class='header2' align='center' bgcolor=333333><font color=white>";
  28. echo $row["nazwa_przedmiotu"];
  29. echo "</td><td class='header2' align='left' bgcolor=ECECEC>&nbsp;&nbsp;";
  30.  
  31. echo $row["ocena"];
  32.  
  33. echo "</td><td class='header2' align='left'>&nbsp;&nbsp;";
  34. echo "</td><td class='header2' align='left'>";
  35. echo "";
  36. echo "</a></td></tr>";
  37.   }
  38. ?>
isso
kurcze, nie chce mi się pisać kodu... ale to co tu masz to troche złe jest... bo to od razu wyciaga wszystko i ustawia w kolumny... musiałbyś w tym wypadku porobić warunki, że dopóki nazwa_przedmiotu == nazwa_przedmiotu_temp(czyli poprzednie wczytanie) to wypiszy tylko ocenę, w przeciwnym wypadku wypisz nazwę przedmiotu i ocenę... ale to ogólnie :| kiepskie rozwiazanie


///EEE - no ok...

  1. <?php
  2.    mysql_connect('localhost', 'root' ) or die(mysql_error());
  3.    mysql_select_db('klasy') or die(mysql_error());
  4.    mysql_query('SET NAMES utf8');
  5. $user='sad@sd.pl';
  6. $query1 = "SELECT * FROM user WHERE login = '$user'";
  7. $result1 = mysql_query($query1)
  8.    or die("Query failed");
  9. while ($row1 = mysql_fetch_array($result1)) {
  10. $id_userka=$row1["id_usera"];
  11. }
  12. $query3 = "SELECT * FROM user WHERE login = '$user'";
  13. $result3 = mysql_query($query1)
  14.    or die("Query failed");
  15. while ($row3 = mysql_fetch_array($result3)) {
  16. $id_klaski=$row3["id_klasy"];
  17. }
  18.  
  19.  
  20.  
  21. $query = "SELECT * FROM oceny, user, przedmioty, klasy WHERE oceny.id_usera = '$id_userka' AND przedmioty.id_przedmiotu=oceny.id_przedmiotu AND przedmioty.id_klasy = user.id_klasy";
  22.  
  23. $result= mysql_query($query);
  24.  
  25.  
  26. $obAmount=mysql_num_rows($result);
  27. $temp_przedmiot = '';
  28. for($x=0;$x<$obAmount;$x++)
  29.  {
  30.  
  31.    $row=mysql_fetch_assoc($result);
  32.    if($temp_przedmiot == $row["nazwa_przedmiotu"]){
  33.        $temp_przedmiot = $row["nazwa_przedmiotu"];
  34.        echo ' '.$row["ocena"];
  35.    }else{
  36.        echo '<br />';
  37.        $temp_przedmiot = $row["nazwa_przedmiotu"];
  38.        echo ' '.$row["nazwa_przedmiotu"];
  39.        echo ' '.$row["ocena"];
  40.    }
  41.    
  42.  
  43.  }
  44. ?>


Tylko to jest w/g mnie bardzo bardzo bardzo bardzo nie optymalnie... ale działa ;]

potrzebujesz tylko teraz tą małą część przerobić - zauważ, że poczatek skryptu troszke zmieniłem.. i nie chce mi sie wracać do starej wersji... bez problemu to uaktualnisz
erix
Cytat
Tylko to jest w/g mnie bardzo bardzo bardzo bardzo nie optymalnie...

Zgadza się:
  1. <?php
  2. $obAmount=mysql_num_rows($result);
  3. $temp_przedmiot = '';
  4. for($x=0;$x<$obAmount;$x++)
  5. {
  6. ?>

Jeśli nie znasz długości tablicy/ilości danych z DB, iteruj posługując się while" title="Zobacz w manualu PHP" target="_manual. Takie zliczanie rekordów nie jest efektywne.
kamulator
Dzięki wielkie za pomoc. Ja dopiero zaczynam zabawe z php więc na przyszłość będe o tym pamiętał. Co do skryptu to nie musi być on optymalny. Jak już mówiłem to jest na zaliczenie więc takich rzeczy się nie czepiają. Chodzi o to żeby tylko chodziło.

Witam!
Mam kolejny problem co do wyświetlania ocen. Mianowicie chce aby wyswietlily mi sie w tej tabelce jeszce oceny na II polrocze oraz oceny koncowe i semestralne. Próbowałem juz wiele sposobów ale żaden nie działał prawidłowo. Proszę o pomoc. Z góry dziękuję


  1. <?php
  2.  
  3.  
  4.  
  5. if(!isset($_SESSION['logowanie']))
  6. { 
  7. exit();
  8. }
  9. ?>
  10.  
  11.  
  12.  
  13. <table align='center' border='0' width='700' cellspacing='0' cellpadding='5'>
  14. <tr bgcolor=333333>
  15. <td  align='center' ><b><font color=white>Przedmioty</font></b></td>
  16. <td  align='center'><b><font color=white>Oceny I semestr</font></b></td>
  17. <td  align='center'><b><font color=white>Ocena półroczna </font></b></td>
  18. <td  align='center'><b><font color=white>Oceny II semestr</font></b></td>
  19. <td  align='center'><b><font color=white>Ocena Końcowa</font></b></td>
  20. </tr>
  21.  
  22. <?php
  23.    include ('connect.php');
  24. $user=$_SESSION['logowanie'];
  25.  
  26.  
  27.  
  28.       mysql_query('SET NAMES utf8');
  29.  
  30. $query1 = "SELECT * FROM user WHERE login = '$user'";
  31. $result1 = mysql_query($query1)
  32.    or die("Query failed");
  33. while ($row1 = mysql_fetch_array($result1)) {
  34. $id_userka=$row1["id_usera"];
  35. }
  36. $query3 = "SELECT * FROM user WHERE login = '$user'";
  37. $result3 = mysql_query($query1)
  38.    or die("Query failed");
  39. while ($row3 = mysql_fetch_array($result3)) {
  40. $id_klaski=$row3["id_klasy"];
  41. }
  42.  
  43.  
  44.  
  45. $query = "SELECT * FROM oceny, user, przedmioty, klasy WHERE oceny.id_usera = '$id_userka' AND przedmioty.id_przedmiotu=oceny.id_przedmiotu AND przedmioty.id_klasy = user.id_klasy";
  46.  
  47. $result= mysql_query($query);
  48.  
  49.  
  50. $obAmount=mysql_num_rows($result);
  51. $temp_przedmiot = '';
  52. for($x=0;$x<$obAmount;$x++)
  53.  {
  54.    $row=mysql_fetch_assoc($result);
  55.    if($temp_przedmiot == $row["nazwa_przedmiotu"])
  56. {    echo "";
  57.        $temp_przedmiot = $row["nazwa_przedmiotu"];
  58.        echo ', '.$row["ocena"];
  59.    }else{
  60.        $temp_przedmiot = $row["nazwa_przedmiotu"];
  61.        echo '<tr><td class=header2 align=left bgcolor=333333><font color=white> '.$row["nazwa_przedmiotu"];
  62. echo " ";
  63.        echo '</td><td class=header2 align=center bgcolor=ececec>'.$row["ocena"];
  64.    }
  65.    }
  66. ?>


  1. CREATE TABLE `oceny` (
  2.   `id_oceny` int(11) NOT NULL AUTO_INCREMENT,
  3.   `id_usera` int(11) NOT NULL DEFAULT '0',
  4.   `id_przedmiotu` int(11) NOT NULL DEFAULT '0',
  5.   `ocena` char(3) NOT NULL DEFAULT '0',
  6.   `ocena2` char(3) NOT NULL DEFAULT '0',
  7.   `ocena_semsetr` char(3) NOT NULL DEFAULT '0',
  8.   `ocena_koncowa` char(3) NOT NULL DEFAULT '0',
  9.   PRIMARY KEY (`id_oceny`)
  10. ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;
  11.  
  12.  
  13.  
  14. INSERT INTO `oceny` VALUES (1, 7, 1, '4', '', '','');
  15. INSERT INTO `oceny` VALUES (2, 7, 1, '3', '', '','');
  16. INSERT INTO `oceny` VALUES (3, 7, 2, '5', '', '','');
  17. INSERT INTO `oceny` VALUES (4, 7, 2, '6', '', '','');
  18.  
  19. INSERT INTO `oceny` VALUES (5, 7, 1, '', '4', '','');
  20. INSERT INTO `oceny` VALUES (6, 7, 1, '', '5', '','');
  21. INSERT INTO `oceny` VALUES (7, 7, 2, '', '6', '','');
  22. INSERT INTO `oceny` VALUES (8, 7, 2, '', '5', '','');
  23.  
  24.  
  25.  
  26. INSERT INTO `oceny` VALUES (9, 7, 2, '', '', '3','');
  27. INSERT INTO `oceny` VALUES (10, 7, 2, '', '', '','4');
erix
Cytat
Próbowałem juz wiele sposobów ale żaden nie działał prawidłowo.

To znaczy?
kamulator
Wszystko co zrobiłem działało albo nieprawidłowo albo wcale. Zrobiłem opcję bez tabelek i tam nie było żadnego problemu (wszystko działało) natomiast gdy wrzuciłem to wsyztko do tabeli zaczęły się schody;/. Albo źle wyświetlało oceny albo nie wyświetlało nic. Niestety nie posiadam tamtych plików gdyż robiłem to na praktykach w Niemczech i nie miałem jak tego wysłać ani skopiowac na dysk przenośny gdyż wszystko było poblokowane;/
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.