Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL]zapytanie w IF
Forum PHP.pl > Forum > Przedszkole
ten_typ
Mam sobie bazę gdzie są tabele:

Kod
           tabela1 | tabela łącząca | tabela2
           kurs    |  kurs_grupy    | grupa


Plik pwk.php odpowiada za wyświetlenie, edycję i usuwanie kursów, plik pwg.php odpowiada za wyświetlanie, edycję i usuwanie grup. Tworzę nową grupę, przypisuje jej odpowiedni kurs i wszystko śmiga - pwg.php pokazuje nową grupę z kursem. Kiedy usuwam kurs, usuwa mi się rekord w tabeli `kurs_grupy` oraz w tabeli `kurs`. Plik pwg pokazuje mi grupę ale bez kursu - czyli ok. Chciałbym, aby w momencie kliknięcia na "edytuj grupę" mieć możliwość wybrania nowego kursu dla istniejącej grupy.

W chwili obecnej mam:
  1. <?php
  2. if ($_POST['nazwa_grupy'] && $_POST['zajecia_1'] && $_POST['godzina_1'] && $_POST['zajecia_2'] &&
  3.    $_POST['godzina_2'] && $_POST['opis_grupy']) {
  4. $zapytanie = @mysql_query("UPDATE grupa SET nazwa_grupy='".$_POST['nazwa_grupy']."', zajecia_1='".$_POST['zajecia_1']."',
  5.    godzina_1='".$_POST['godzina_1']."', zajecia_2='".$_POST['zajecia_2']."',
  6.    godzina_2='".$_POST['godzina_2']."', opis_grupy='".$_POST['opis_grupy']."'
  7.    WHERE id_grupy='".$_POST['id_grupy']."'");
  8. $zapytanie = @mysql_query("update kurs_grupy set id_kurs='".$_POST['id_kursu']."' WHERE id_grupy='".$_POST['id_grupy']."'");
  9. $wynik = mysql_query ($zapytanie);
  10. }
  11. echo     "<h3>Poprawnie edytowano grupę</h3><br><br>
  12.        <a href='pwg.php'>Odśwież</a>";
  13. ?>


1 zapytanie pomijamy bo dotyczy tabeli `grupa`. 2 zapytanie jest poprawne w momencie, kiedy mam w tabeli `kurs_grupy` rekord odpowiedzialny za połączenie tych 2 tabel. Biorąc pod uwagę, że podczas usuwania kursu tracę rekord w tabeli łączącej, wydaje mi się, że potrzebne jest zapytanie "insert into ..." ale nie wiem jak je uwarunkować. Czy jest ktoś w stanie mi pomóc? Mam nadzieję, że w miarę jasno opisałem problem.
Pozdrawiam.
melkorm
Z tego co rozumiem , jeżeli w tabeli łączącej grupa nie ma rekordu z odpowiadającym mu kursem chcesz mieć możliwość wyboru nowego kursy dla grupy? Więc .... INNER JOIN z limitem 1 (tak dla swietego spokoju") grupy na tabele łączącą i sparwdzasz warunkiem

  1. <?php
  2. if(!$result = mysql_fetch_array($query)) {
  3.      //tutaj wczytanie HTML'a z możliwością wyboru kursu dla grupy
  4. }
  5. ?>


Chyba rozrysowałem szkic jak to powinno działać ? tongue.gif

no i wtedy do update tabeli łączącej dajesz id_kursu = $_POST['id_grupy'] (albo z radio - wyboru, lub hidden gdy ma już przypisany kurs)
ten_typ
No u mnie to wygląda tak:
  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. } elseif ($_GET['x'] == 'edytuj') {
  15. $zapytanie = "select * from poziom inner join poziom_kursu on poziom.id_poziomu=poziom_kursu.id_poziomu
  16.    inner join kurs on poziom_kursu.id_kursu=kurs.id_kursu inner join kurs_grupy on kurs.id_kursu=kurs_grupy.id_kurs
  17.    right join grupa on kurs_grupy.id_grupy=grupa.id_grupy where grupa.id_grupy='".$_GET['id_grupy']."'";
  18. $wynik = mysql_query ($zapytanie);
  19. $rekord = mysql_fetch_assoc ($wynik);
  20. $id_grupy = $rekord['id_grupy']; $nazwa_grupy = $rekord['nazwa_grupy']; $zajecia_1 = $rekord['zajecia_1'];
  21. $godzina_1 = $rekord['godzina_1']; $zajecia_2 = $rekord['zajecia_2']; $godzina_2 = $rekord['godzina_2'];
  22. $opis_grupy = $rekord['opis_grupy']; $id_kursu = $rekord['id_kursu'];
  23. echo   '<form method="post"><h3>Edycja<h3><input type="hidden" name="x" value="popraw">
  24.        <input type="hidden" name="id_grupy" value="'.$id_grupy.'">
  25.        <table width=90% align=center>
  26.        <tr><td>Nazwa grupy:</td><td><input type="text" name="nazwa_grupy" value="'.$nazwa_grupy.'"></td></tr>
  27.        <tr><td>Poziom:</td><td>
  28.        <div><select name="id_kursu">';
  29. $zapytanie = @mysql_query("select poziom.nazwa_poziomu, kurs.id_kursu, kurs.nazwa_kursu from poziom inner join poziom_kursu on poziom.id_poziomu=poziom_kursu.id_poziomu inner join kurs on poziom_kursu.id_kursu=kurs.id_kursu order by kurs.nazwa_kursu");
  30. while($rekord = @mysql_fetch_array($zapytanie)){
  31.  
  32.    $selected = ($rekord['id_kursu']==$id_kursu) ? 'selected="selected"' : '';
  33.    echo '<option '.$selected.' value="'.$rekord['id_kursu'].'">';
  34.    echo $rekord['nazwa_kursu'].' '.$rekord['nazwa_poziomu'].'</option>';}
  35.    echo '</select></div></td></tr>
  36.         <tr><td>Zajęcia (1 dzień):</td><td><input type="text" name="zajecia_1" value="'.$zajecia_1.'"></td></tr>
  37.        <tr><td>Godzina (1 zajęć):</td><td><input type="text" name="godzina_1" value="'.$godzina_1.'"></td></tr>
  38.        <tr><td>Zajęcia (2 dzień):</td><td><input type="text" name="zajecia_2" value="'.$zajecia_2.'"></td></tr>
  39.        <tr><td>Godzina (2 zajęć):</td><td><input type="text" name="godzina_2" value="'.$godzina_2.'"></td></tr>
  40.        <tr><td>Opis grupy:</td><td><input type="text" name="opis_grupy" value="'.$opis_grupy.'"></td></tr>
  41.        <tr><td></td><td><input type="submit" value="Edytuj"></td></tr></table>
  42.        </form>';
  43. ?>

Czy to trochę zmienia postać rzeczy ?
Kod który napisałeś nie wiem jak zastosować (ten html) bo ja to mam w formularzu edycji, więc nie powinienem powielać?

I czemu id_kursu = $_POST['id_grupy']?
melkorm
Aua. Śmietnik.

Zrób sobie var_dump'a na wynik 1 zapytania (select grupy*) i zobaczysz że gdy w tabeli łączącej nie będzie rekordu dla grupa <-> kurs wartości tych pul będa miał wartość NULL, i na tym możesz oprzeć swój warunek dla zapytania insert dla tabeli łączącej.

Ale jak już mówi strasznei czyta isę ten kod - aliasy ... nie msuzisz się odwoływać nazwa_tabeli.nazwa_pola ale przez aliasy np:
  1. SELECT * FROM cokolwiek c WHERE c.id='44'; -- to tylko przykład zastosowania
ten_typ
No właśnie nie potrafię stworzyć tego warunku.
Nie wiem co przyrównać do null
  1. <?php
  2. if (? == null){
  3. $zapytanie = @mysql_query("insert into kurs_grupy set id_kurs_grupy=null, id_kurs='".$_POST['id_kursu']."', id_grupy='".$_POST['id_grupy']."'");
  4. $zapytanie = @mysql_query("UPDATE grupa SET nazwa_grupy='".$_POST['nazwa_grupy']."', zajecia_1='".$_POST['zajecia_1']."',
  5.    godzina_1='".$_POST['godzina_1']."', zajecia_2='".$_POST['zajecia_2']."',
  6.    godzina_2='".$_POST['godzina_2']."', opis_grupy='".$_POST['opis_grupy']."'
  7.    WHERE id_grupy='".$_POST['id_grupy']."'");
  8. $wynik = mysql_query ($zapytanie);
  9. echo "blad1";
  10. }else{
  11. $zapytanie = @mysql_query("UPDATE grupa SET nazwa_grupy='".$_POST['nazwa_grupy']."', zajecia_1='".$_POST['zajecia_1']."',
  12.    godzina_1='".$_POST['godzina_1']."', zajecia_2='".$_POST['zajecia_2']."',
  13.    godzina_2='".$_POST['godzina_2']."', opis_grupy='".$_POST['opis_grupy']."'
  14.    WHERE id_grupy='".$_POST['id_grupy']."'");
  15. $zapytanie = @mysql_query("update kurs_grupy set id_kurs='".$_POST['id_kursu']."' WHERE id_grupy='".$_POST['id_grupy']."'");
  16. $wynik = mysql_query ($zapytanie);
  17. echo "blad2";
  18. ?>


Ok już załapałem, miałem dać $id_kursu tongue.gif
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.