Nie umiem sobie poradzić z następującym problemem. Najpierw diagram

Chcę zrobić skrypt w php, który wyciągnie z tabeli NASZE_ZAWODY pole idnz, przekaże je do tabeli ZAWODY_DYSCYPLINY i umożliwi mi dodanie do tej tabeli jednej lub kilku dyscyplin. W skrócie mówiąc ma to wyglądać tak:

ZAWODY_DYSCYPLINY

Kod
IDZD    IDNZ    IDD    TERMIN
1-     2    -    1 -    12 06 2005
2    -    2    -    2 -    13 06 2005
3  -   2    -    3 -    13 06 2005
4   -  2    -    4 -    15 06 2005
5    - 2    -    5 -    15 06 2005
6   -  3    -    1 -    4 07 2005
7   -  3    -    10 -    5 07 2005


itp itd Myślę, że wiadomo o co chodzi.

I teraz tak: mam dwie stronki: a.php i b.php. Na tej pierwszej zrobiłem wybór idnz z tabeli NASZE_ZAWODY. Po naciśnięciu przycisku "wybierz" skrypt przechodzi do strony b.php, która ma za zadanie zaktualizowanie bazy

Skypt a.php:
  1. <?
  2. $conn = mssql_connect(&#092;"localhost\",\"user\",\"password\") or die(mssql_error());
  3. $db = mssql_select_db(&#092;"[Zawody lekkoatletyczne]\", $conn) or die(mssql_error());
  4. $sql = &#092;"SELECT nazwa, termin, idnz FROM NASZE_ZAWODY ORDER BY termin\";
  5.  
  6.  
  7. $sql_result = mssql_query($sql) or die (mssql_error());
  8. if (!$sql_result) {
  9. echo &#092;"Something has gone wrong!\";
  10. } else {
  11. echo &#092;"
  12.  
  13. <h1>Wybierz zawody dla których chcesz edytować dyscypliny</h1>
  14. <FORM method=&#092;"POST\" action=\"b.php\">
  15. <p><strong>Wybierz zawody. Imprezy są ustawione wg dat.</strong><br>
  16. <select name=&#092;"sel_record\">
  17. <option value=&#092;"\"> -- Wybierz zawody -- </option>\";
  18. while ($row = mssql_fetch_array($sql_result)) {
  19. $idnz = $row[&#092;"idnz\"];
  20. $nazwa = $row[&#092;"nazwa\"];
  21. $termin = $row[&#092;"termin\"];
  22. echo &#092;"<option value=\"$idnz\">$nazwa (data: $termin)</option>\";
  23. }
  24. echo &#092;"
  25. </select>
  26. <P align=center><INPUT type=&#092;"submit\" value=\"Wybierz\"></p>
  27. </FORM>&#092;";
  28. }
  29.  
  30. ?>


Przęglądarka przechodzi na stronę b.php i jest wszystko ok. Widzę wybrane zawody, czyli zmienna dobrze się przeniosła winksmiley.jpg W tym ekranie chciałem do każdych zawodów w tabeli ZAWODY_DYSCYPLINY dodać do nich kilka dyscyplin i podać termin ich rozegrania. Wymyśliłem sobie, że zrobię to w postaci skryptu, który pokaże na ekranie select-boxa (a więc tak samo jak wybór zawodów), obok przyciski "dodaj" oraz pole do wpisania terminu. Obsługa tego ma wyglądać tak: użytkownik wybiera z listy dyscyplinę, wspiauje jej termin i naciska przycisk "dodaj" - i wtedy tworzy się nowy wiersz w tabeli ZAWODY_DYSCYPLINY zawierający 4 pola:
idzd (autoinkrementacja)
idnz (pobrany ze skryptu a.php),
idd (pobrany z tabeli DYSCYPLINY,
termin (pobrany z ze skryptu wyżej).

Mój problem polega na tym, że nie wiem jak połączyć ową feralną zmienną z tabeli NASZE_ZAWODY i przekazał ją do ZAWODY_DYSCYPLINY a jednocześnie żeby dodał idd z DYSCYPLINY to ZAWODY_DYSCYPLINY. Próbowałem już to zrobić podzapytaniem takim:

$sql = "UPDATE ZAWODY_DYSCYPLINY
SET idnz =
(SELECT * FROM NASZE_ZAWODY
WHERE idnz = '$_POST[sel_record]')";

Ale ponieważ nie poszło mi już na tym skrypcie to nie próbowałem nawet JOIN-ować to z 3 tabelą (DYSCYPLINY). Błąd, który mi się ukazał to:

Warning: mssql_query(): message: Only one expression can be specified in the select list when the subquery is not introduced with EXISTS. (severity 16) in c:\...\b.php on line ...


EDIT >>


Heh, że tak powiem sam sobie pomogłem. Zmieniłem zapytanie $sql z UPDATE na INSERT (rzecz jasna). Teraz wygląda to tak:

  1. $sql = "SET IDENTITY_INSERT ZAWODY_DYSCYPLINY ON EXEC zet
  2. INSERT
  3. INTO ZAWODY_DYSCYPLINY (idzd, idnz, idd, termin)
  4. VALUES (' ', '$_POST[sel_record]', '10', '2003-12-01')";


Jak widać dodałem też procedurę 'zet'. Miała mi ona służyć do tego by pobierać największe pole idzd (które jest kluczem gł. i typu autoincrement).

Składnia mojej procedury wygląda tak:

  1. CREATE PROCEDURE zet AS declare @idzd int
  2. SET @idzd = (SELECT max(idzd)
  3. FROM ZAWODY_DYSCYPLINY) SELECT @idzd+1
  4. GO

Składnię wziąłem z tego tematu. Po włączeniu Query analyzera i wywołaniu procedury wszystko jest ok - pole idzd zwiększa się o 1. Niestety w kodzie php już to nie działa ponieważ zamiast wrzucać każdą następną wartość większą o 1 od ostatniego wpisanego idzd to kod cały czas uparcie wstawia mi pole z idzd = 0. Czy ktoś mi pomoże?