Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: System dla studenta
Forum PHP.pl > Forum > PHP
Stron: 1, 2
sapit
Witam wszytskich,

Szukam osób ktore beda wstanie mi pomoc lub pokierowac w stworzeniu systemu dla studentow. Aplikacja miala by byc stworzona w PHP 7 i MYSQLi a wyglad w Bootstrap.Wizja jest taka ze jest logowanie do systemu z roznymi rolami dokladnie z 3 (Admin, Pracownik Uczelni oraz obsluga typu Kadry) wiadomo ze Admin widzial by w CMS wszystkie opcje po zalogowaniu , Pracownik 85%-90% opcji, a obsługa np Kadry tylko liste w tabeli o studentach i inforamcje o tym czy jest skreslony czy aktywny itd. Chcialbym stworzyc menu gdzie byla by mozliwosc dodawania studentow,edycja i usuwanie oraz oczywiscie wypelnianie danych o nich oraz mozliwosc wklejenia zdjecia legitymacyjnego, druga opcja mozliowosc dodawania przedmiotow edycja i usuwanie ich. Trzecia opcja promotorzy takze dodawanie ich edycja i usuwanie. Co najwazniejsze przy dodawaniu studenta byla by mozliwosc wtedy wybrania takze na jki idzie przedmiot lub kto bedzie jego promotorem. Czwarte menu aby byla mozliwosc stworzenia "file managera" osobiscie znalazłęm cos takiego jak (Tiny File Manager - https://tinyfilemanager.github.io/ ) Mysle ze super by sie nadawalo do tego systemu. Przepraszam wszytskich ale jestem raczkujacy i na forum i w PHP wiec cos tam juz stworzone mam na localhoscie ale wolalem najpierw podpytac sie czy ktos moglby mi pomoc lub moze bylby chetny pokierowac mnie z kodem itd. Z gory bardzo dziekuje wszytskim za odpowiedzi. smile.gif

Myślicie że dobrze zostało to napisane ? z 3 rożnymi rolami

  1.  
  2. $conn = mysqli_connect('localhost', 'root', '', 'baza');
  3.  
  4. $query = mysqli_query($conn, "SELECT * FROM uzytkownicy where user='" . $_SESSION['user'] . "'");
  5. while ($row = mysqli_fetch_array($query)) {
  6.  
  7. $role = $row['rols'];
  8. }
  9. if ($role == 'Admin') {
  10.  
  11. <h5>Dzień dobry <?php echo $_SESSION['user']; ?> !</h5>
  12. <p>Zalogowano się jako: <br><u>Administrator</u>
  13. </p>

  1. } elseif ($role == "Users") {
  2.  
  3. <h5>Dzień dobry <?php echo $_SESSION['user']; ?> !</h5>
  4. <p>Zalogowano się jako: <br><u>Użytkownik</u>
  5. </p>
  6.  


  1. } elseif ($role == "Kadry") {
  2.  
  3. <h5>Dzień dobry <?php echo $_SESSION['user']; ?> !</h5>
  4. <p>Zalogowano się jako: <br><u>Kadry</u>
  5. </p>
  6.  


  1. rols enum('Admin', 'Users', 'Kadry') utf8_polish_ci
gino
Sprawdzenie kto jest zalogowany, jakie ma role itp. powinno się zrobić podczas logowania przez warstwy aplikacji, które te operacje wykonają w sposób bezpieczny.
A poza tym dane logowania (np. user) to najmniej pożądane dane aby trzymać je w sesji.
Zacznij chociażby tutaj:
php logowanie, SQL Injection
gornik
Auth słaby, ale nie o tym.

Co do ról to ja bym zrobił to w formie tablicy:
Będzie Ci później łatwiej rozwijać jakieś elementy w projekcie moim zdaniem.

  1. /* Tak zeby user z bazy zwracał np cos takiego */
  2. $user = [
  3. 'id' => 1,
  4. 'username' => 'testuser',
  5. 'roles' => [
  6. 'ROLE_USER',
  7. 'ROLE_STUDENT',
  8. 'ROLE_MODERATOR',
  9. ]
  10. ];
  11.  
  12. /* Ustalasz hierarchie ról, tak zeby np. ADMINISTRATOR miał dostęp do czynności moderatora */
  13. $roleHierarchy = [
  14. 'ROLE_STUDENT' => ['ROLE_USER'],
  15. 'ROLE_MODERATOR' => ['ROLE_USER', 'ROLE_STUDENT'],
  16. 'ROLE_ADMINISTRATOR' => ['ROLE_MODERATOR'], /* ROLE_ADMIN ma dostęp do ROLE_MODERATOR i dziediczy jego role - w tym przypadku ROLE_USER, ROLE_STUDENT */
  17. 'ROLE_TEST' => ['ROLE_STUDENT'], /* ROLE_TEST ma dostęp do ROLE_STUDENT i dziediczy jego role - w tym przypadku ROLE_USER */
  18. ];
  19.  
  20. /* Jakaś funkcja sprawdzająca dostęp do ról */
  21. function hasGranted($user, $role){
  22. global $roleHierarchy;
  23. /* ... tu jeszcze trzeba dopisać sprawdzanie hierachii itp */
  24. return in_array($role, $user['roles']);
  25. }
  26.  
  27. /* Akcje dla ról */
  28. $menu = [];
  29. $menu[] = ['route' => 'home_index', 'name' => 'Strona glowna'];
  30. if( hasGranted($user, 'ROLE_ADMINISTRATOR') ){
  31. /* Zrób coś dla admina np. dodaj menu item */
  32. $menu[] = ['route' => 'admin_index', 'name' => 'Panel Admina'];
  33.  
  34. }
  35. echo "<PRE>";
  36. print_r($menu);
  37. echo "</PRE>";
  38.  
  39.  
  40. /* Blokowanie dostępu */
  41. if( !hasGranted($user, 'ROLE_ADMINISTRATOR') ){
  42. exit('Wrong permissions');
  43. }
  44.  
sapit
WoW exclamation.gif!! Myślałem że nikt mi nie pomorze ,a tu prosze jaka super pomoc na wstepię za co bardzo mocno dziękuje za wszystkie odpowiedzi i podpowiedzi. smile.gif

Mam jeszcze jedno pytanie jak robie formularz dodawania Przedmiotu np

  1. <?php
  2. include_once('connection.php');
  3.  
  4. // Dodaj przedmiot
  5. if (isset($_POST['submit'])) {
  6. $item = $_POST['item'];
  7.  
  8. if(mysqli_query($conn, "INSERT INTO item (item) VALUES ('$item')")) {
  9. $success = "Pozytywnie dodano przedmiot!";
  10. } else {
  11. $error = "Błąd dodawania przedmiotu...";
  12. }
  13. }
  14. ?>



  1.  
  2.  
  3. <form method="post" action="add_item.php">
  4. <div class="form-group">
  5. <input type="text" name="item" placeholder="Dodaj przedmiot" required class="form-control" />
  6. </div>
  7. <div class="form-group">
  8. <input type="submit" name="submit" value="Dodaj przedmiot" class="btn btn-info btn-block" />
  9. </div>
  10. <span class="text-success"><?php if (isset($success)) {
  11. echo $success;
  12. } ?></span>
  13. <span class="text-danger"><?php if (isset($error)) {
  14. echo $error;
  15. } ?></span>
  16. </form>


To jak by to działa i dodaje mi to do bazy danych ale mam problem mianowicie z tym że gdy robie formularz dodawania danych studenta to chciałbym tam zrobić aby był "dropdown" i zeby była mozliwosc własnie zanzaczenia tego przedmiotu przy dodawaniu w tym formualrzu i to samo sie dotyczy wyboru prowadzonego , promotora itd? Chodzi mi o to ze bede mial pewnie kilka roznych tabel MYSQL "Tabela np item=przedmiot , teacher = prowadzocy , promoter=promotor, a na koniec tabela student=studenci i zapewne ta tabela studenci musi byc polaczona z tamtymi tabelami aby pozniej przy wypelnianiu formlarza moglo pobierac te dane z tych tabel a potem przy stronie z wykazem tych studentow (tabelce) byly te dane wyswietlane. I tu wlasnie mi chodzi jak to zrobic w PHP i jak zadac pytanie SQL ?

Haha nie wiem czy za mocno nie namieszałem i czy jasno to opisalem, moze ktos z Państwa zrozumie mnie o co chodzi smile.gif
com
no musisz posiadać miedzy tymi tabelami relacje, a my nie znamy twojej bazy danych smile.gif
sapit
Dobra juz sobie prawie wszystko ogarnąłem, tylko mam jeden problem.

Gdy mam formularz dodawania danych studenta i różnych opcji z nimi związane jak np przedmiot, chcialbym aby dla danego studenta była możliwośc wybrania kilku przedmiotów i wyświetlenia ich pozniej w tabeli.


Tutaj czesc kodu z formularza dodawania studenta: add_student.php

  1. <div class="form-group">
  2. <div class="row">
  3. <label class="col-sm-3 control-label">Przedmiot</label>
  4. <div class="col-sm-9">
  5. <select type="list" name="list" class="form-control">
  6. <option value="">-- Wybierz przedmiot --</option>
  7. <?php
  8. $c1 = "SELECT * FROM `list`";
  9. $result = $conn->query($c1);
  10.  
  11. if ($result->num_rows > 0) {
  12. while ($row = mysqli_fetch_array($result)) { ?>
  13. <option value="<?php echo $row["id_list"]; ?>">
  14. <?php echo $row['list']; ?>
  15. </option>
  16. <?php
  17. }
  18. } else {
  19. echo "0 results";
  20. }
  21. ?>
  22. </select>
  23. </div>
  24. </div>
  25. </div>


A w drugim pliku list_student.php ( teraz mam tak) - wiem że to wyswietla mi jeden przedmiot ktory wybiore z listy

  1. <?php
  2. include_once('connection.php');
  3. $sql = "SELECT * FROM student";
  4. $result = $conn->query($sql);
  5. while ($row = $result->fetch_assoc()) {
  6.  
  7. $sql2 = "SELECT * FROM `list` WHERE id_list='" . $row['list'] . "'";
  8. $result2 = $conn->query($sql2);
  9. $row2 = $result2->fetch_assoc();
  10. <tr>
  11.  
  12. <td><?php echo $row2['list']; ?></td>
  13. </tr>
  14.  




Efekt chciałbym taki ze jest tabela np "DataTable" są komórki i kolumny i np w jednej z kolumn jest "Przedmiot" , a pod nim dla danego studenta jest wypisane kilka przedmiotów . POMOCY exclamation.gif! sad.gif

|Przedmiot| | Imię | | Naziwsko |
---------------------------------
| Biologia | | Piotr | |Kowalski |
| Historia |
| Polski |
gornik
Strasznie chaotycznie się wypowiadasz, nie wystarczy tam zapętlić listy przedmiotów i oddzielić np. najprościej
  1. <Br />
?
sapit
Przepraszam za chaotycznosc ale już tak mam jak cos mam w glowie to staram sie to opisac jak najlepiej aby ktos mogl mnie w miare zrozumiec. smile.gif
gino
A dlaczego nie zrobisz osobnej tabeli z przedmiotami dla studentów? np. id, przedmiot, status i tabeli która powiąże to ze studentem id, id_student, id_przedmiot. W innym razie będziesz się bujał z redundancją bazy.
sapit
Zrobiłem to tak:

Tutaj jest lista dodanych przedmiotów:


A tutaj widok bazy danych:


Formularz dodawania studenta i wybór przedmiotu:(jak widac pobiera przedmioty z bazy danych)


Widok po dodaniu studenta:



A co bym chciał zrobić finalnie aby mozna było w formularzu studenta wybrac np. dwa lub więcej przedmiotów naraz i aby one byly widoczne na liscie studenta. Ponieawż student moze chodzić na kilka przedmiotow .


com
musisz zrobić sobie tabele z przedmiotami i studentami i kolejną która połączy na bazie relacji te przedmioty ze studentami w relacji wiele do wielu (http://www.glowacki.p9.pl/nowa_strona/strony/niedatowane/kurs_mysql/k_2_2_3.php i sekcja Relacja wiele do wielu W:W) a przedmioty przechowuj za pomocą id bo tak masz redundancje danych smile.gif
sapit
Cytat(com @ 29.09.2021, 11:18:46 ) *
musisz zrobić sobie tabele z przedmiotami i studentami i kolejną która połączy na bazie relacji te przedmioty ze studentami w relacji wiele do wielu (http://www.glowacki.p9.pl/nowa_strona/strony/niedatowane/kurs_mysql/k_2_2_3.php i sekcja Relacja wiele do wielu W:W) a przedmioty przechowuj za pomocą id bo tak masz redundancje danych smile.gif


Dziekuje za wskazówkę smile.gif Jak już to zrobie to jak sprawić w kodzie PHP aby to wyswietlic ?

  1. <?php
  2. include_once('connection.php');
  3. $sql = "SELECT * FROM student";
  4. $result = $conn->query($sql);
  5. while ($row = $result->fetch_assoc()) {
  6.  
  7. $sql2 = "SELECT * FROM `list` WHERE id_list='" . $row['list'] . "'";
  8. $result2 = $conn->query($sql2);
  9. $row2 = $result2->fetch_assoc();
  10. <tr>
  11.  
  12. <td><?php echo $row2['list']; ?></td>
  13. </tr>
gornik
Dobra teraz czaje arrowheadsmiley.png
Musisz mieć 3 tabelki tak na szybko np:
Students:
- id:int
- name:string(255)
- createdAt:datetime

Subjects:
- id:int
- name:string(255)
- createdAt:datetime

StudentSubjects
- id:int
- subjectId: reference to Subjects
- studentId: reference to Students
- createdAt: datetime

  1. /* Jakistam student */
  2. $student = [
  3. 'id' => 30,
  4. 'name' => 'Marek Kowalski',
  5. 'createdAt' => '2021-09-20 12:30:40'
  6.  
  7. ];
  8.  
  9. /* I teraz wszystko zalezy od tego co potrzeba, mozesz uzyć INNER albo IN. Kombinuj */
  10. $sql = "SELECT * FROM `Subjects` WHERE `id` IN ( SELECT `subjectId` FROM `StudentSubjects` WHERE `studentId` = {$student['id']} )";
sapit
Raczej bardziej opierał bym się na tym o co mi chodzi smile.gif

  1. https://www.onlyxcodes.com/2019/01/multiple-checkbox-value-add-edit-delete.html
gornik
Podałem Ci tylko przykład, a nie gotowe rozwiązanie, od tego już tylko prosta droga żeby osiągnąć to co chcesz.
sapit
Cytat(gornik @ 29.09.2021, 12:19:54 ) *
Podałem Ci tylko przykład, a nie gotowe rozwiązanie, od tego już tylko prosta droga żeby osiągnąć to co chcesz.


Rozumiem. Dziekuje z góry smile.gif

Kurcze jednak drodzy Państwo poległem na tym chyba , ale znając życie zaraz się okaże finalnie że to bardzo proste jest o zrobienia ale za każdym razem jak coś robie to mam błąd sad.gif

Może jednak ktoś z Pańśtwa się zlituje nade mną i więcej podpowie lub pomoze smile.gif Taki final chcialbym uzyskać ze sa dane studenta a w jednej z kolumn lista przedmiotow dla niego czasami moga to byc 2 przedmioty , jeden lub 5



Stworzyłem 3 tabele w bazie danych:

tabela list= *czyli lista przedmiotow

  1. id_list - INT AUTO INCREMENT
  2. list - VARCHAR 255


tabela student = * czyli dane sudenta
  1. id - INT AUTO INCREMENT
  2. id_student - INT
  3. firstname - VARCHAR 255
  4. lastname - VARCHAR 255
  5. pesel - VARCHAR 255
  6. list - VARCHAR 255


tabela studentlists = * czyli połaczenie dwóch tabel
  1. id - INT AUTO INCREMENT
  2. id_list - INT
  3. id_student - INT



w formularzu dodawania studenta * add_student.php w sekcji Przedmiot napisałem to tak
  1. <div class="form-group">
  2. <div class="row">
  3. <label class="col-sm-3 control-label">Przedmiot</label>
  4. <div class="col-sm-9">
  5. <select type="text" name="list[]" multiple class="form-control">
  6. <option value="">-- Wybierz przedmiot --</option>
  7. <?php
  8. $c1 = "SELECT * FROM `list`";
  9. $result = $conn->query($c1);
  10.  
  11. if ($result->num_rows > 0) {
  12. while ($row = mysqli_fetch_array($result)) { ?>
  13. <option value="<?php echo $row["id_list"]; ?>">
  14. <?php echo $row['list']; ?>
  15. </option>
  16. <?php
  17. }
  18. } else {
  19. echo "0 results";
  20. }
  21. ?>
  22. </select>
  23. </div>
  24. </div>
  25. </div>
  26.  


po kliknięciu przycisk Dodaj - czyli (name=submit) stworzyłem plik *save_student.php
  1. <?php
  2. include('../connection.php');
  3. $sql = "INSERT INTO student (firstname, lastname, pesel, list) VALUES ('$firstname', '$lastname', '$pesel', '$list')";
  4. if ($conn->query($sql) === TRUE) {
  5. $_SESSION['success'] = 'Pomyślnie dodano studenta';
  6. ?>
  7. <script type="text/javascript">
  8. window.location = "../list_student.php";
  9. </script>
  10. <?php
  11. } else {
  12. $_SESSION['error'] = 'Coś poszło nie tak';
  13. ?>
  14. <script type="text/javascript">
  15. window.location = "../list_student.php";
  16. </script>
  17. <?php } ?>


a na koniec plik z widokiem listy studentów *list_student.php

  1. <tr>
  2. <th></th>
  3. <th>Imie</th>
  4. <th>Nazwisko</th>
  5. <th>Pesel</th>
  6. <th>Przedmiot</th>
  7. </tr>
  8. </thead>


  1. <?php
  2. include_once('connection.php');
  3. $sql = "SELECT * FROM student";
  4. $result = $conn->query($sql);
  5. while ($row = $result->fetch_assoc()) {
  6. $sqll = "SELECT * FROM studentlists WHERE id questionmark.gifquestionmark.gif? (Jak zada poprawne zapytanie aby pobrało te dwa przedmioty ?
  7. $result1 = $conn->query($sqll);
  8. $row1 = $result1->fetch_assoc();
  9. ?>
  10. <tr>
  11. <td></td>
  12.  
  13. <td><?php echo $row['firstname']; ?></td>
  14. <td><?php echo $row['lastname']; ?></td>
  15. <td><?php echo $row['pesel']; ?></td>
  16. <td><?php echo $row1[' I właśnie co tutaj mam zrobić aby np. dwa przedmioty się tu wybrane po wybraniu ich w formularzu się pojawiły ?']; ?></td>
  17.  


Jak ktoś będzie mnie chciał opierdzielić za brak jakieś wiedzy itd spoko biore to na klate smile.gif ale potrzebuje pomocy sad.gif
nospor
Po pierwsze wywal pole LIST z tabeli STUDENT. przeciez teraz masz oddzielna tabele na przedmioty do ktorych jest przypisany student, nieprawdaz? I wlasnie do tej tabeli masz wpisywac przedmioty przypisane do studenta.

Co do wyswietlania przedmiotow studenta to poprostu przy pomocy LEFT join laczysz ze soba tabele podczas SELECTa
sapit
Cytat(nospor @ 30.09.2021, 16:26:17 ) *
Po pierwsze wywal pole LIST z tabeli STUDENT. przeciez teraz masz oddzielna tabele na przedmioty do ktorych jest przypisany student, nieprawdaz? I wlasnie do tej tabeli masz wpisywac przedmioty przypisane do studenta.

Co do wyswietlania przedmiotow studenta to poprostu przy pomocy LEFT join laczysz ze soba tabele podczas SELECTa


Dobra zaraz się za to zabieram wywalę pole LIST z tabeli student i postaram się sklepac zapytanie przy pomocy LEFT JOIN smile.gif Dziękuje za cenne wskazówki , bo czasami to już ręce opadają co człowiek robi źle ze nie wychodzi tak jak by się chciało smile.gif

Zrobiłem przez LEFT JOIN ale nie wiem czemu dalej i wychodzi teraz tak że np w tabeli mam wypisane
  1. "SELECT * FROM student LEFT JOIN list ON list.id_list=student.id_student"


ID Imię Nazwisko Przedmiot
1. Jan Kowalski Biologia
2. Jan Kowalski Geografia
3. Marta Szymańska Biologia


zamiast

ID Imię Nazwisko Przedmiot
1 Jan Kowalski Biologia
...... ...... ...... Geografia

2. Marta Szymańska Biologia
gino
Co ma wspólnego u Ciebie id_list z id_student bo za bardzo nie rozumiem. Po co w taki razie utworzyłeś tabelę studentlist, jeśli w zapytaniu w ogóle z niej nie korzystasz? To przecież ta tabela właśnie robi relacje miedzy tabelami student i list.
Zapytanie ma połączyć 3 tabele a nie tylko dwie.

edit

Czy mi się wydaje, że za każdym razem jeśli dodajesz przedmiot to wrzucasz komplet danych studenta?
sapit
Cytat(gino @ 1.10.2021, 10:26:00 ) *
Co ma wspólnego u Ciebie id_list z id_student bo za bardzo nie rozumiem. Po co w taki razie utworzyłeś tabelę studentlist, jeśli w zapytaniu w ogóle z niej nie korzystasz? To przecież ta tabela właśnie robi relacje miedzy tabelami student i list.
Zapytanie ma połączyć 3 tabele a nie tylko dwie.

edit

Czy mi się wydaje, że za każdym razem jeśli dodajesz przedmiot to wrzucasz komplet danych studenta?



Tak faktycznie teraz też zobaczyłęm ze walnąłęm gafe z tą tabelą i zauwazyłęm błąd w tym zapyraniu SQL zaraz to poprawie :/

Nie dodawanie przedmiotu odbywa sie osobno w formualrzu

a dodawanie studenta odbywa sie tez osobno w innym formularzu tam wtedy powinien byc chyba coś takiego (NAME='list[]' multiple ) co sprawi żę bedzie mozna wybrac w formualrzu kilka przedmiotow trzymając przycisk "ctrl" a po nacisnieciu name="submit" - "Dodaj" chcialbym aby na liscie studentow wyglodalo to jak wyzej.

gino
Cytat
Nie dodawanie przedmiotu odbywa się osobno w formualrzu


formularz jest najmniej interesujący, pytanie gdzie wrzucasz dane z tego name list multiple. Masz je zapisać w tabeli studentlist z odpowiednim id studenta.
Po co w tabeli student pole id_student? Co tam wpisujesz?
sapit
Cytat(sapit @ 1.10.2021, 11:06:09 ) *
Tak faktycznie teraz też zobaczyłęm ze walnąłęm gafe z tą tabelą i zauwazyłęm błąd w tym zapyraniu SQL zaraz to poprawie :/

Nie dodawanie przedmiotu odbywa sie osobno w formualrzu

a dodawanie studenta odbywa sie tez osobno w innym formularzu tam wtedy powinien byc chyba coś takiego (NAME='list[]' multiple ) co sprawi żę bedzie mozna wybrac w formualrzu kilka przedmiotow trzymając przycisk "ctrl" a po nacisnieciu name="submit" - "Dodaj" chcialbym aby na liscie studentow wyglodalo to jak wyzej.


Czy to moze być poprawne zapytanie ?
  1. "SELECT * FROM `studentlists` LEFT JOIN list ON studentlists.id_student = list.id_list"

gino
To jest poprawne zapytanie w sensie sql-a, pytanie czy jest poprawne dla Ciebie. Wrzuć do zapytania trzecią tabele student, aby otrzymać dane studenta.
To samo musisz zrobić z promotorami (osobna tabela i tabela wiążąca ze studentami), bo student ma prawo zmienić promotora a dane warto sobie zachować chociażby do statystyk. Dodałbym w tabeli student status, żeby wiedzieć co się dzieje ze studentem (dziekanka, wykreślony, wyrzucony itd.). Czy zbierasz informacje o kierunku nauczania? Bo student może być na 2 kierunkach.
Na dzień dobry zastanów się jakie dane chcesz zbierać, co chcesz wyświetlać itd. Wszystko zaczyna się na kartce papieru jako projekt.
sapit
Cytat(gino @ 1.10.2021, 11:39:28 ) *
To jest poprawne zapytanie w sensie sql-a, pytanie czy jest poprawne dla Ciebie. Wrzuć do zapytania trzecią tabele student, aby otrzymać dane studenta.
To samo musisz zrobić z promotorami (osobna tabela i tabela wiążąca ze studentami), bo student ma prawo zmienić promotora a dane warto sobie zachować chociażby do statystyk. Dodałbym w tabeli student status, żeby wiedzieć co się dzieje ze studentem (dziekanka, wykreślony, wyrzucony itd.). Czy zbierasz informacje o kierunku nauczania? Bo student może być na 2 kierunkach.
Na dzień dobry zastanów się jakie dane chcesz zbierać, co chcesz wyświetlać itd. Wszystko zaczyna się na kartce papieru jako projekt.



OK rozumiem, tylko dalej nie wiem w jaki sposob mam zazaznaczyc ze chce dwa przedmioty dla jednego studenta aby sie pojawily w formularzu dodawania oraz dwie odpowiedzi umiescic w jednej komorce tabeli dla jednego studenta :/ Bo jesli chodzi o zapytanie to ok ale jak to umiescic i napisac w php ? Chyba ze ja zle tlumacze i pisze o co mi chodzi sad.gif Ja sie kurcze chyba poddaje tongue.gif
nospor
Nie mam zbytnio duzo czasy by dokladnie ci opisac twoj przyklad ale tutaj
http://nospor.pl/grupowanie-wynikow.html
masz zrobione wyswetilanie danych na przykladzie niemalze identycznym jak twoj. Ok, nie ma jednej tabeli, ale zasada pobierania danuch w php z zapytania i ich wyswietlanie jest ta sama co u ciebie
sapit
Cytat(nospor @ 1.10.2021, 15:12:05 ) *
Nie mam zbytnio duzo czasy by dokladnie ci opisac twoj przyklad ale tutaj
http://nospor.pl/grupowanie-wynikow.html
masz zrobione wyswetilanie danych na przykladzie niemalze identycznym jak twoj. Ok, nie ma jednej tabeli, ale zasada pobierania danuch w php z zapytania i ich wyswietlanie jest ta sama co u ciebie


nospor Jestem mega Tobie wdzięczny bo na szybko zerknąlem na link i chyba wychodzi na to ze w koncu cos jednak w tym temacie mi się ruszy jesli chodzi o rozwaizanie mojego problemu dzieki tobie smile.gif . Kurcze wiadomo po kombinuje sobie dalej mimo ze jestem "żółto dziub" w PHP ale chce sie uczyc i poznawac rozne rozwiazania i dzieki Tobie mając w głowie że bede musiał się poddać mam śwaitło w tunelu smile.gif Dziękuje pięknie exclamation.gif!!

Dam znać jak mi się uda i puszcze efekt smile.gif

A teraz mam pytanie z innej beczki , jak moge sprawic aby w formukarzu byl dropdown multiple select ? Abym mogl zaznaczyc dwie rzeczy i aby te dwie rzeczy tak jak w moim przypadku są to przedmioty się dodały do bazy danych ? Pokaze moze jak zrobilem moze ktos z was zauwazy błąd bo u mnie to nie dziala sad.gif

Chciałęm zastosować ten select z tej strony ale on mi nie dziala : https://select2.org/
*save_student.php
  1. <?php
  2. include('../connection.php');
  3. extract($_POST);
  4. if (isset($_POST['submit'])) {
  5. $student = $_POST['student'];
  6. $list = $_POST['list'];
  7. foreach ($list as $rowlist) {
  8. //echo $rowlist;
  9. $query = "INSERT INTO studentlists (id_list, id_student) VALUES ('$student','$rowlist')";
  10. $query_run = mysqli_query($conn, $query);
  11. }
  12. if ($query_run) {
  13. $_SESSION['status'] = 'rekord dodano';
  14. header("Location: list_student.php");
  15. } else {
  16. $_SESSION['status'] = 'rekordu nie dodano';
  17. header("Location: list_student.php");
  18. }
  19. }
  20. ?>


*add_student.php
  1. <div class="form-group">
  2. <div class="row">
  3. <label class="col-sm-3 control-label">Produkt</label>
  4. <div class="col-sm-9">
  5. <select class="js-example-basic-multiple" name="list[]" multiple="multiple">
  6. <option value=""></option>
  7. <?php
  8. $conn = mysqli_connect("localhost:3308", "root", "", "mydatabase");
  9. $query = "SELECT * FROM `list`";
  10. $query_run = mysqli_query($conn, $query);
  11. if (mysqli_num_rows($query_run) > 0) {
  12. foreach ($query_run as $rowlist) {
  13. ?>
  14. <option value="<?php echo $rowlist['id']; ?>"><?php echo $rowlist['list']; ?></option>
  15. <?php
  16. }
  17. } else {
  18. echo "Brak rekordów";
  19. }
  20. ?>
  21. </select>
  22. </div>
  23. </div>
  24. </div>


list.sql
  1. id - IN
  2. list - VARCHAR


studentlists.sql
  1. id - IN
  2. id_list - IN
  3. id_student - IN

nospor
Ale po co chcesz teraz uzywac jakis libow do selectow?

Samo
select name="list[]" multiple="multiple">

bez zadnego dodatkowe libu powinno ci pozwalac na wybor kilku opcji w tym select
sapit
Cytat(sapit @ 4.10.2021, 11:27:45 ) *
nospor Jestem mega Tobie wdzięczny bo na szybko zerknąlem na link i chyba wychodzi na to ze w koncu cos jednak w tym temacie mi się ruszy jesli chodzi o rozwaizanie mojego problemu dzieki tobie smile.gif . Kurcze wiadomo po kombinuje sobie dalej mimo ze jestem "żółto dziub" w PHP ale chce sie uczyc i poznawac rozne rozwiazania i dzieki Tobie mając w głowie że bede musiał się poddać mam śwaitło w tunelu smile.gif Dziękuje pięknie exclamation.gif!!

Dam znać jak mi się uda i puszcze efekt smile.gif

A teraz mam pytanie z innej beczki , jak moge sprawic aby w formukarzu byl dropdown multiple select ? Abym mogl zaznaczyc dwie rzeczy i aby te dwie rzeczy tak jak w moim przypadku są to przedmioty się dodały do bazy danych ? Pokaze moze jak zrobilem moze ktos z was zauwazy błąd bo u mnie to nie dziala sad.gif

Chciałęm zastosować ten select z tej strony ale on mi nie dziala : https://select2.org/
*save_student.php
  1. <?php
  2. include('../connection.php');
  3. extract($_POST);
  4. if (isset($_POST['submit'])) {
  5. $student = $_POST['student'];
  6. $list = $_POST['list'];
  7. foreach ($list as $rowlist) {
  8. //echo $rowlist;
  9. $query = "INSERT INTO studentlists (id_list, id_student) VALUES ('$student','$rowlist')";
  10. $query_run = mysqli_query($conn, $query);
  11. }
  12. if ($query_run) {
  13. $_SESSION['status'] = 'rekord dodano';
  14. header("Location: list_student.php");
  15. } else {
  16. $_SESSION['status'] = 'rekordu nie dodano';
  17. header("Location: list_student.php");
  18. }
  19. }
  20. ?>


*add_student.php
  1. <div class="form-group">
  2. <div class="row">
  3. <label class="col-sm-3 control-label">Produkt</label>
  4. <div class="col-sm-9">
  5. <select class="js-example-basic-multiple" name="list[]" multiple="multiple">
  6. <option value=""></option>
  7. <?php
  8. $conn = mysqli_connect("localhost:3308", "root", "", "mydatabase");
  9. $query = "SELECT * FROM `list`";
  10. $query_run = mysqli_query($conn, $query);
  11. if (mysqli_num_rows($query_run) > 0) {
  12. foreach ($query_run as $rowlist) {
  13. ?>
  14. <option value="<?php echo $rowlist['id']; ?>"><?php echo $rowlist['list']; ?></option>
  15. <?php
  16. }
  17. } else {
  18. echo "Brak rekordów";
  19. }
  20. ?>
  21. </select>
  22. </div>
  23. </div>
  24. </div>


list.sql
  1. id - IN
  2. list - VARCHAR


studentlists.sql
  1. id - IN
  2. id_list - IN
  3. id_student - IN


Zapomniałem wyzej dopisac skad ta zmiena $student

  1. <form class="form-horizontal" method="POST" action="pages/save_student.php" name="student" enctype="multipart/form-data">
nospor
NAME w formularzu ma sie nijak do tego co idzie postem. To NAME w polach odpowiada za to co idzie postem.
Dodatkowo napisalem komentarz wczesniej, widziales?
sapit
Cytat(nospor @ 4.10.2021, 12:58:31 ) *
NAME w formularzu ma sie nijak do tego co idzie postem. To NAME w polach odpowiada za to co idzie postem.
Dodatkowo napisalem komentarz wczesniej, widziales?


Ok z tym name to zaraz sprawdzę ale komentarza wcześniejszego nie widzę :/

Cytat(sapit @ 4.10.2021, 13:23:10 ) *
Ok z tym name to zaraz sprawdzę ale komentarza wcześniejszego nie widzę :/


Ok sorry ślepy jakiś jestem znalazłem komentarz smile.gif ale nie skumalem co jest "libow" w select ?
nospor
No uzywasz jakiegos select2. To jest wlasnie lib/biblioteka. po grzyba ci to na tym etapie?
sapit


<select name="list[]" multiple="multiple">

Tak zrobiłęm i tak wygląda efekt sad.gif



nospor
No i prawidlowo wyglada

Wywal tylko te opcje "-- wybierz przedmio--" bo jest totalnie zbedna tam
sapit
Cytat(nospor @ 4.10.2021, 16:40:54 ) *
No i prawidlowo wyglada

Wywal tylko te opcje "-- wybierz przedmio--" bo jest totalnie zbedna tam


Ok wywaliłem to ale jak mam to zaznaczyć i zrobić aby zapisało się w bazie bo jak narazie w bazie zapisuje się "array" sad.gif
nospor
No bo przedmiot wysylany postem, jest teraz tablica (array). poniewaz zrobiles multiselect, wiec ta tablica zawiera teraz kilka przedmiotow.
Masz iterowac po tej tablicy, i wykonac tyle zapan INSERT ile masz elementow (przedmiotow) w tej tablicy. INSERT rzecz jasna masz wykonywac do tabeli student_przedmioty
sapit
Cytat(nospor @ 4.10.2021, 16:48:44 ) *
No bo przedmiot wysylany postem, jest teraz tablica (array). poniewaz zrobiles multiselect, wiec ta tablica zawiera teraz kilka przedmiotow.
Masz iterowac po tej tablicy, i wykonac tyle zapan INSERT ile masz elementow (przedmiotow) w tej tablicy. INSERT rzecz jasna masz wykonywac do tabeli student_przedmioty




cos takiego zrobilem ? Dobrze ? Tam dzie jest "itd"itd to oczywiscie chodzilo mi ze trzeba napisac wszystkie zmienne $_POST z formularza ale to i tak dalej nie dziala bo pokazuje mi "rekordu nie dodano" sad.gif
nospor
Toz sam piszesz w delkaracji zapytania, ze tabela ma tylko 2 pola: id_client i id_product. To jakim cudem wkladasz tam jakies firstName oraz masze ITD? przeciez tam wklozyc ID studenta i ID przedmiotu, tak?

I nie zadne client-product, tylko client_product.
Wyswietlaj bledy zapytania to bedziesz widzial co sie pieprzy
I czemy w ogole client_product kiedy tam mialo byc studentlists?
sapit
Cytat(nospor @ 4.10.2021, 17:15:59 ) *
Toz sam piszesz w delkaracji zapytania, ze tabela ma tylko 2 pola: id_client i id_product. To jakim cudem wkladasz tam jakies firstName oraz masze ITD? przeciez tam wklozyc ID studenta i ID przedmiotu, tak?

I nie zadne client-product, tylko client_product.
Wyswietlaj bledy zapytania to bedziesz widzial co sie pieprzy
I czemy w ogole client_product kiedy tam mialo byc student_przedmiot?



client_product To mój błąd nie to wkleiłem ponieważ robiłem sobie na boku cos podobnego w wersji skróconej aby zobaczyć czy zadziała czy tez nie .

A jesteś może wstanie mi jakoś to napisać pokazać na jakimś przykładzie ?
nospor
Notoz masz przyklad, sam pisales go wczesniej

foreach ($list as $rowlist) {
//echo $rowlist;
$query = "INSERT INTO studentlists (id_list, id_student) VALUES ('$student','$rowlist')";
$query_run = mysqli_query($conn, $query);
}

Tylko sie upewnij ze masz wlasciwe wartosci tu
sapit
Dzięki nospor za wszystko. Podszedłem do tematu troche na nowo. Stworzyłem szybko mikro system "demo" zaczałem robic od samego poczatku wszystko na nowo i faktycznie dzięki Twoim wskazówką zaczeło działać wiec moj problem już jest rozwiązany w 95%. Teraz podsyłam ostatnią prostą z czym nie potrafie sobie poradzić. Pokaze to na zdjeciu i zapytanie SQL ktore napisałem.

$sql = "SELECT * FROM client_product INNER JOIN clients ON client_product.id_client = clients.id INNER JOIN product ON client_product.id_product = product.id ";

--> wiem że powiniene zastosowac z CONCAT_GROUP i cos z GROUP BY ale ni hu hu mi nic nie wychodzi z tego sad.gif

tabela = clients

id
firstname
lastname

tabela = client_product

id
id_client
id_product

tabela = product

id
list

gino
Czy mógłbyś mi pokazać skąd pobierasz identyfikator studenta dla danych do tabeli studentlist? Ok, dodajesz firstname, pesel itd do tabeli student a co wpisujesz do tabeli stidentlist w pole id_student? Możesz pokazać ten fragment kodu, który za to odpowiada?
Pytałem też, co to jest za pole w tabeli student o nazwie id_student? Masz tam pole id autoincrement i to pole jest identyfikatorem studenta i wartość tego pola musisz pobrać do tabeli studentlist podczas iteracji przedmiotów, zaraz po wprowadzeniu danych studenta.

I w "systemie" student i w demo nie możesz przypisać do pola typu int danych typu string:
dla tabeli studentlist: id_student->$student (to jest nazwa formularza a nie identyfikator studenta)
dla tabeli client_product: id_client->$firstname (podejrzewam, że to imię)
Insert do tych tabel nie ma prawa się wykonać.
nospor
No dobrze, ale nie napisales z czym sobie nie mozesz poradzic smile.gif
Jesli zas co chodzi o wyswietlanie odpowiednie teraz tych danych, to przeciez jakis czas temu podalem ci linka do arta, ktory rozwiazuje ten problem

ps: jesli zas problemem byl ten group_concat to olej, jest to niepotrzebne tutaj. W arcie co ci podalem obchodze sie bez tego tez
sapit
Cytat(nospor @ 5.10.2021, 09:57:16 ) *
No dobrze, ale nie napisales z czym sobie nie mozesz poradzic smile.gif
Jesli zas co chodzi o wyswietlanie odpowiednie teraz tych danych, to przeciez jakis czas temu podalem ci linka do arta, ktory rozwiazuje ten problem

ps: jesli zas problemem byl ten group_concat to olej, jest to niepotrzebne tutaj. W arcie co ci podalem obchodze sie bez tego tez


No wlasnie z tamtym linkiem fajnie to wyglada wszytsko na stronie i tak to chialbym ale jak robie podobne zapytanie jak tam bez tego GROUP_CONCAT to nic mi nie wychodzi :/
nospor
To pokaz jak probujesz smile.gif
sapit
Cytat(gino @ 5.10.2021, 08:08:23 ) *
Czy mógłbyś mi pokazać skąd pobierasz identyfikator studenta dla danych do tabeli studentlist? Ok, dodajesz firstname, pesel itd do tabeli student a co wpisujesz do tabeli stidentlist w pole id_student? Możesz pokazać ten fragment kodu, który za to odpowiada?
Pytałem też, co to jest za pole w tabeli student o nazwie id_student? Masz tam pole id autoincrement i to pole jest identyfikatorem studenta i wartość tego pola musisz pobrać do tabeli studentlist podczas iteracji przedmiotów, zaraz po wprowadzeniu danych studenta.

I w "systemie" student i w demo nie możesz przypisać do pola typu int danych typu string:
dla tabeli studentlist: id_student->$student (to jest nazwa formularza a nie identyfikator studenta)
dla tabeli client_product: id_client->$firstname (podejrzewam, że to imię)
Insert do tych tabel nie ma prawa się wykonać.


Tam ten system ma błędy z tego co zauwazylem, wiec stworzylem system na szybko "demo" aby zrobic cos co i zadziala i bedzie efekt taki jak bym chcial , wtedy wroce do tam tego systemu i postaram sie wtedy sprawic tak i poprawic kod aby efekt z systemu "demo" uzyskac w tym systemie macierzystym. smile.gif haha mam nadzieje ze taka kombinacja mi sie uda smile.gif Chyba ze za bardzo przekombinuje :/
gino
Ale demo nie działa i działać nie będzie w takim kształcie.

1. Do tabeli clients wprowadzasz firstname, lastname i automatycznie generuje się w polu autoincrement id tego rekordu
2. Musisz pobrać ten identyfikator z tabeli clients, np. tak mysql last id
3. W iteracji gdzie insertujesz produkty do tabeli client_product wrzucasz do pola id_client uzyskany last_id, do pola id_product id produktu z tabeli product
Tyle i aż tyle.
sapit
Cytat(gino @ 5.10.2021, 11:19:38 ) *
Ale demo nie działa i działać nie będzie w takim kształcie.

1. Do tabeli clients wprowadzasz firstname, lastname i automatycznie generuje się w polu autoincrement id tego rekordu
2. Musisz pobrać ten identyfikator z tabeli clients, np. tak mysql last id
3. W iteracji gdzie insertujesz produkty do tabeli client_product wrzucasz do pola id_client uzyskany last_id, do pola id_product id produktu z tabeli product
Tyle i aż tyle.



Ojjj poczekaj musze to sobie sprawidzc twoim sposobem zobacze czy wyjdzie efekt taki jak chciałbym:)


Cytat(sapit @ 5.10.2021, 11:21:59 ) *
Ojjj poczekaj musze to sobie sprawidzc twoim sposobem zobacze czy wyjdzie efekt taki jak chciałbym:)


Sorry _ nie wiem czy dobrze rozumuje ten 3 punkt , czy moglbys mnie naprowadzic jakos ?

3. W iteracji gdzie insertujesz produkty do tabeli client_product wrzucasz do pola id_client uzyskany last_id, do pola id_product id produktu z tabeli product
Tyle i aż tyle.

$id_client = $_POST['id_client'];
$product = $_POST['product'];
foreach($product as $rowlist)
{
$query = "INSERT INTO client_product (id_client, id_product) VALUES ('$id_client','$rowlist')"; (jest )

$query = "INSERT INTO client_product (last_id, id_product) VALUES ('$id_client','$rowlist')"; (a powinno być tak ? )

Widok

SELECT * FROM client_product INNER JOIN clients ON client_product.last_id = clients.id INNER JOIN product ON client_product.id_product = product.id ";
gino
Kod
$id_client = $_POST['id_client'];


skąd wziąłeś w formularzu id_client?
Pokaż kod całego formularza i cały plik do zapisu danych.
sapit
Cytat(gino @ 5.10.2021, 12:20:52 ) *
Kod
$id_client = $_POST['id_client'];


skąd wziąłeś w formularzu id_client?
Pokaż kod całego formularza i cały plik do zapisu danych.



  1. <form method="POST" action="code.php">
  2.  
  3. <input type="hidden" name="currnt_date" class="form-control" value="">
  4.  
  5.  
  6. <div class="form-group">
  7. <div class="row">
  8. <label class="col-sm-3 control-label">ID</label>
  9. <div class="col-sm-9">
  10. <select class="form-control" name="id_client" type="text">
  11. <?php
  12. $conn = mysqli_connect("localhost:3308", "root", "", "demo");
  13. $query = "SELECT * FROM clients";
  14. $query_run = mysqli_query($conn, $query);
  15. if (mysqli_num_rows($query_run) > 0) {
  16. foreach ($query_run as $rowlist) {
  17. ?>
  18. <option value="<?php echo $rowlist['id']; ?>"><?php echo $rowlist['firstname']; ?> <?php echo $rowlist['lastname']; ?></option>
  19. <?php
  20. }
  21. } else {
  22. echo "Brak rekordów";
  23. }
  24. ?>
  25. </select>
  26. </div>
  27. </div>
  28. </div><br <div class="form-group">
  29. <div class="row">
  30. <label class="col-sm-3 control-label">Produkt</label>
  31. <div class="col-sm-9">
  32. <select name="product[]" multiple="multiple">
  33. <?php
  34. $conn = mysqli_connect("localhost:3308", "root", "", "demo");
  35. $query = "SELECT * FROM product";
  36. $query_run = mysqli_query($conn, $query);
  37. if (mysqli_num_rows($query_run) > 0) {
  38. foreach ($query_run as $rowlist) {
  39. ?>
  40. <option value="<?php echo $rowlist['id']; ?>"><?php echo $rowlist['list']; ?></option>
  41. <?php
  42. }
  43. } else {
  44. echo "Brak rekordów";
  45. }
  46. ?>
  47. </select>
  48. </div>
  49. </div>
  50. </div>
  51.  
  52. <button type="submit" name="submit" class="btn btn-primary btn-flat m-b-30 m-t-30">Dodaj</button>
  53. </form>



  1. <?php
  2. $conn = mysqli_connect("localhost:3308","root","","demo");
  3.  
  4. if(isset($_POST['submit']))
  5. {
  6. $id_client = $_POST['id_client'];
  7. $product = $_POST['product'];
  8. foreach($product as $rowlist)
  9. {
  10. $query = "INSERT INTO client_product (id_client, id_product) VALUES ('$id_client','$rowlist')";
  11. $query_run = mysqli_query($conn, $query);
  12. }
  13. if ($query_run) {
  14. $_SESSION['status'] = 'rekord dodano';
  15. header("Location: display.php");
  16. } else {
  17. $_SESSION['status'] = 'rekordu nie dodano';
  18. header("Location: index.php");
  19. }
  20.  
  21. }
  22. ?>




A to jest plik display.php

  1. <div class="container-fluid">
  2.  
  3. <div class="card">
  4. <div class="card-body">
  5. <div class="table-responsive m-t-40">
  6. <table class="table table-bordered table-striped">
  7. <tr>
  8. <th>Imie</th>
  9. <th>Nazwisko</th>
  10. <th>Produkt</th>
  11. </tr>
  12. </thead>
  13. <?php
  14. $sql = "SELECT * FROM client_product INNER JOIN clients ON client_product.id_client = clients.id INNER JOIN product ON client_product.id_product = product.id ";
  15. $result = $conn->query($sql);
  16. while ($row = mysqli_fetch_assoc($result)) {
  17.  
  18. ?>
  19. <tr>
  20. <td><?php echo $row['firstname']; ?></td>
  21. <td><?php echo $row['lastname']; ?></td>
  22. <td><?php echo $row['list']; ?></td>
  23. </tr>
  24. <?php } ?>
  25. </tbody>
  26. </table>
  27. </div>
  28. </div>
  29. </div>


Finalnie taki efekt chcialbym uzyskac

nospor
no to ci pisalem: pokaz kod jak kombinujesz z moim artem
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.