Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL] 2 zapytania w else
Forum PHP.pl > Forum > Przedszkole
ten_typ
Mam problem:
tak wyglądają mniej więcej relacje:
Kod
tabela1  | tabela łącząca | tabela2
     kurs     | poziom_kursu   | poziom
     grupa    | kurs_grupy     | kurs


Kiedy jakiś kurs jest przypisany grupie jest wszystko cacy. Problem występuje kiedy usuwam jakiś kurs. W momencie usunięcia kursu kasuje się rekord w tabelach: kurs, poziom_kursu oraz kurs_grupy. Po tym usunięciu nie pokazuje mi skrypt żadnych grup, ale wszystkie istnieją bo nie są usuwane. Mogę w jakiś sposób dopisać 2 warunek, że w przypadku usunięcia kursu pokazywane będą grupy ? Mam nadzieję, że w miarę jasno opisałem swój problem.

  1. <?php
  2. else{
  3. $wynik = mysql_query ("select * from poziom inner join poziom_kursu on poziom.id_poziomu=poziom_kursu.id_poziomu
  4.    inner join kurs on poziom_kursu.id_kursu=kurs.id_kursu inner join kurs_grupy on kurs.id_kursu=kurs_grupy.id_kurs
  5.    inner join grupa on kurs_grupy.id_grupy=grupa.id_grupy order by grupa.nazwa_grupy");
  6. $ilosc = mysql_num_rows($wynik);
  7. echo "<h3>Liczba wszystkich grup: $ilosc.</h3><br /><br />
  8.  <table border=2 align='center' cellspacing=2 cellpadding=2><tr>
  9.  <td align='left'><b>Nazwa grupy</b></td>
  10.  <td align='left'><b>Język</b></td>
  11.  <td align='left'><b>Poziom</b></td>
  12.  <td align='left'><b>Zajęcia (1 dzień</b></td>
  13.  <td align='left'><b>Godzina (1 zajęć)</b></td>
  14.  <td align='left'><b>Zajęcia (2 dzień)</b></td>
  15.  <td align='left'><b>Godzina (2 zajęć)</b></td>
  16.  <td align='left'><b>Opis grupy</b></td>
  17.  <td align='left'></td><td align='left'></td></tr>\n";
  18. while ($rekord = mysql_fetch_assoc ($wynik)) {
  19. $id_grupy= $rekord['id_grupy'];
  20. $nazwa_grupy = $rekord['nazwa_grupy'];
  21. $nazwa_kursu = $rekord['nazwa_kursu'];
  22. $nazwa_poziomu = $rekord['nazwa_poziomu'];
  23. $zajecia_1 = $rekord['zajecia_1'];
  24. $godzina_1 = $rekord['godzina_1'];
  25. $zajecia_2 = $rekord['zajecia_2'];
  26. $godzina_2 = $rekord['godzina_2'];
  27. $opis_grupy = $rekord['opis_grupy'];
  28. echo "<tr>
  29.  <td align=\"left\">$nazwa_grupy</td>
  30.  <td align=\"left\">$nazwa_kursu</td>
  31.  <td align=\"left\">$nazwa_poziomu</td>
  32.  <td align=\"left\">$zajecia_1</td>
  33.  <td align=\"left\">$godzina_1</td>
  34.  <td align=\"left\">$zajecia_2</td>
  35.  <td align=\"left\">$godzina_2</td>
  36.  <td align=\"left\">$opis_grupy</td>
  37.  <td align=\"left\"><a href=\"pwg.php?x=skasuj&id_grupy=$id_grupy\">Skasuj</a></td>
  38.  <td align=\"left\"><a href=\"pwg.php?x=edytuj&id_grupy=$id_grupy\">Edytuj</a></td></tr>\n";
  39.  "</TABLE>";
  40. }
  41. ?>
sowiq
  1. <?php
  2. if($usun == true){ // jeśli trzeba usunąć
  3.    usunWpisy(); // usuwanie
  4.    pokazListe(); // wyświetlanie
  5. }
  6. else{ // tylko wyświetlanie
  7.    pokazListe();
  8. }
  9. ?>
Piszesz sobie (kopiujesz już napisany kod) te dwie funkcje i śmiga smile.gif
ten_typ
Z tego kodu chyba nie da rady bo usuwanie kursów jest w kurs.php a wyświetlanie grup w grupa.php.
sowiq
No ale jakoś to robisz... Spójrz, zamiast robić tak:
  1. <?php
  2. if($czyUsunac == true){
  3.    // tutaj jest kod usuwający
  4. }
  5. else{
  6.    // tutaj jest kod wyświetlający
  7. }
  8. ?>
zrób tak:
  1. <?php
  2. if($czyUsunac == true){
  3.    usun();
  4. }
  5. else{
  6.    wyswietl();
  7. }
  8.  
  9. function usun(){
  10.    // tutaj jest kod usuwający
  11. }
  12. function wyswietl(){
  13.    // tutaj jest kod wyświetlający
  14. }
  15. ?>
a potem jeszcze raz przeczytaj mojego pierwszego posta.
ten_typ
Nadal nie rozumiem, zrobiłem tak:
  1. <?php
  2. else{
  3.    if ($_POST['id_kursu'] == null)    {
  4. $wynik = @mysql_query("select * from grupa");
  5. $ilosc = mysql_num_rows($wynik);
  6. echo "<h3>Liczba wszystkich grup: $ilosc.</h3><br /><br />
  7.  <table border=2 align='center' cellspacing=2 cellpadding=2><tr>
  8.  <td align='left'><b>Nazwa grupy</b></td>
  9.  <td align='left'><b>Język</b></td>
  10.  <td align='left'><b>Poziom</b></td>
  11.  <td align='left'><b>Zajęcia (1 dzień</b></td>
  12.  <td align='left'><b>Godzina (1 zajęć)</b></td>
  13.  <td align='left'><b>Zajęcia (2 dzień)</b></td>
  14.  <td align='left'><b>Godzina (2 zajęć)</b></td>
  15.  <td align='left'><b>Opis grupy</b></td>
  16.  <td align='left'></td><td align='left'></td></tr>\n";
  17. while ($rekord = mysql_fetch_assoc ($wynik)) {
  18. $id_grupy= $rekord['id_grupy'];
  19. $nazwa_grupy = $rekord['nazwa_grupy'];
  20. $nazwa_kursu = $rekord['nazwa_kursu'];
  21. $nazwa_poziomu = $rekord['nazwa_poziomu'];
  22. $zajecia_1 = $rekord['zajecia_1'];
  23. $godzina_1 = $rekord['godzina_1'];
  24. $zajecia_2 = $rekord['zajecia_2'];
  25. $godzina_2 = $rekord['godzina_2'];
  26. $opis_grupy = $rekord['opis_grupy'];
  27. echo "<tr>
  28.  <td align=\"left\">$nazwa_grupy</td>
  29.  <td align=\"left\">$nazwa_kursu</td>
  30.  <td align=\"left\">$nazwa_poziomu</td>
  31.  <td align=\"left\">$zajecia_1</td>
  32.  <td align=\"left\">$godzina_1</td>
  33.  <td align=\"left\">$zajecia_2</td>
  34.  <td align=\"left\">$godzina_2</td>
  35.  <td align=\"left\">$opis_grupy</td>
  36.  <td align=\"left\"><a href=\"pwg.php?x=skasuj&id_grupy=$id_grupy\">Skasuj</a></td>
  37.  <td align=\"left\"><a href=\"pwg.php?x=edytuj&id_grupy=$id_grupy\">Edytuj</a></td></tr>\n";
  38.  "</TABLE>";
  39. }}
  40. else {
  41.    $wynik = @mysql_query ("select * from poziom inner join poziom_kursu on poziom.id_poziomu=poziom_kursu.id_poziomu
  42.    inner join kurs on poziom_kursu.id_kursu=kurs.id_kursu inner join kurs_grupy on kurs.id_kursu=kurs_grupy.id_kurs
  43.    inner join grupa on kurs_grupy.id_grupy=grupa.id_grupy order by grupa.nazwa_grupy");
  44. $ilosc = mysql_num_rows($wynik);
  45. echo "<h3>Liczba wszystkich grup: $ilosc.</h3><br /><br />
  46.  <table border=2 align='center' cellspacing=2 cellpadding=2><tr>
  47.  <td align='left'><b>Nazwa grupy</b></td>
  48.  <td align='left'><b>Język</b></td>
  49.  <td align='left'><b>Poziom</b></td>
  50.  <td align='left'><b>Zajęcia (1 dzień</b></td>
  51.  <td align='left'><b>Godzina (1 zajęć)</b></td>
  52.  <td align='left'><b>Zajęcia (2 dzień)</b></td>
  53.  <td align='left'><b>Godzina (2 zajęć)</b></td>
  54.  <td align='left'><b>Opis grupy</b></td>
  55.  <td align='left'></td><td align='left'></td></tr>\n";
  56. while ($rekord = mysql_fetch_assoc ($wynik)) {
  57. $id_grupy= $rekord['id_grupy'];
  58. $nazwa_grupy = $rekord['nazwa_grupy'];
  59. $nazwa_kursu = $rekord['nazwa_kursu'];
  60. $nazwa_poziomu = $rekord['nazwa_poziomu'];
  61. $zajecia_1 = $rekord['zajecia_1'];
  62. $godzina_1 = $rekord['godzina_1'];
  63. $zajecia_2 = $rekord['zajecia_2'];
  64. $godzina_2 = $rekord['godzina_2'];
  65. $opis_grupy = $rekord['opis_grupy'];
  66. echo "<tr>
  67.  <td align=\"left\">$nazwa_grupy</td>
  68.  <td align=\"left\">$nazwa_kursu</td>
  69.  <td align=\"left\">$nazwa_poziomu</td>
  70.  <td align=\"left\">$zajecia_1</td>
  71.  <td align=\"left\">$godzina_1</td>
  72.  <td align=\"left\">$zajecia_2</td>
  73.  <td align=\"left\">$godzina_2</td>
  74.  <td align=\"left\">$opis_grupy</td>
  75.  <td align=\"left\"><a href=\"pwg.php?x=skasuj&id_grupy=$id_grupy\">Skasuj</a></td>
  76.  <td align=\"left\"><a href=\"pwg.php?x=edytuj&id_grupy=$id_grupy\">Edytuj</a></td></tr>\n";
  77.  "</TABLE>";}
  78. }}
  79. ?>


a w bazie mam 1 grupę bez kursu i 2 z kursem, powyższy warunek pokazuje wszystkie 3 ale w miejscu nazwa kursu i poziom kursu ( za które odpowiedzialny jest id_kursu) jest pusto. A powinno pokazać 2 grupy z kursami i 1 grupę bez. Czy ktoś potrafi mi pomóc?
sowiq
Cytat(ten_typ @ 10.01.2009, 16:46:18 ) *
Czym zastąpić powyższy kod, aby nie pokazywało tylko if lub else, ale żeby pokazało to, co jest w if i else?
Nie wiem czy masz zastąpić w powyższym kodzie, bo nie chce mi się tego bałaganu czytać.

Kod:
  1. <?php
  2. if($cos){
  3.  // 1
  4. }
  5. else{
  6.  // 2
  7. }
  8. ?>
Powyżej wykona się 1 LUB 2. Jeśli chcesz, żeby wykonało się 1 i 2, to robisz:
  1. <?php
  2. if($co&#347;_innego){
  3.  // 1
  4.  // 2
  5. }
  6. ?>
No chyba, że ja czegoś nie rozumiem, albo Ty nie umiesz napisać o co Ci chodzi.

[edit]
Jeśli edytujesz swojego posta co minutę, to zaznaczaj to jakoś, bo wychodzi, że odpowiedziałem Ci na coś, co nie istnieje w Twoim poście.

Cytat(ten_typ @ 10.01.2009, 16:46:18 ) *
powinno pokazać 2 grupy z kursami i 1 grupę bez. Czy ktoś potrafi mi pomóc?
LEFT JOIN
ten_typ
sowiq dzięki - wystarczył right join.

Wyświetla ok, tak jak chciałem winksmiley.jpg ale problem pojawia się gdy chcę edytować rekord, w którym nie ma kursu.
  1. <?php
  2. if ($_POST['x'] == 'popraw') {
  3. if ($_POST['nazwa_grupy'] && $_POST['zajecia_1'] && $_POST['godzina_1'] && $_POST['zajecia_2'] &&
  4.    $_POST['godzina_2'] && $_POST['opis_grupy']) {
  5. $zapytanie = @mysql_query("UPDATE grupa SET nazwa_grupy='".$_POST['nazwa_grupy']."', zajecia_1='".$_POST['zajecia_1']."',
  6.    godzina_1='".$_POST['godzina_1']."', zajecia_2='".$_POST['zajecia_2']."',
  7.    godzina_2='".$_POST['godzina_2']."', opis_grupy='".$_POST['opis_grupy']."'
  8.    WHERE id_grupy='".$_POST['id_grupy']."'");
  9. $zapytanie = @mysql_query("update kurs_grupy set id_kurs='".$_POST['id_kursu']."' WHERE id_grupy='".$_POST['id_grupy']."'");
  10. $wynik = mysql_query ($zapytanie);
  11. }
  12. echo     "<h3>Poprawnie edytowano grupę</h3><br><br>
  13.        <a href='pwg.php'>Odśwież</a>";
  14. ?>


Edycja umożliwia zmianę rekordu, ale w momencie, gdy żaden kurs nie jest przypisany grupie, chciałbym ją edytować i móc przypisać jakiś kurs. Nie może więc edytować rekordu który łączy tabele kurs i grupa ale musi dodać nowy wiersz.


  1. <?php
  2. $zapytanie = @mysql_query("insert into kurs_grupy set id_kurs_grupy=null, id_kurs='".$_POST['id_kursu']."', id_grupy=last_insert_id()");
  3. ?>


Jak mogę wkleić to zapytanie, żeby uzyskać zadawalający mnie efekt ?
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.