Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Tworzenie relacje z pomocą pól selectowych
Forum PHP.pl > Forum > Przedszkole
nighttrain
Witam,

Od jakiegoś czasu próbuję stworzyć dodawanie relacji między tabelą pierwszą (nazwa: komputery), a tabelą drugą (nazwa: oprogramowanie), i dodaje relację do tabeli 3 (nazwa: rel_komputer_oprogramowanie).
Udało mi się dodawać relacje poprzez podawanie numerów ID, jednak jest to bardzo nieporęczne i chciałbym to zamienić polami typu Select ( dwa pola typu select - pierwsze pole zawiera nazwy rekordów z tabeli pierwszej-nazwy komputerów, a drugi select zawiera nazwy rekordów z tabeli drugiej-oprogramowania), z nazwami rekordów zamiast id co udało mi się osiągnąć. Chciałbym uzyskać efekt,aby po wybraniu z dwóch selectów wartości można było kliknąć buttonik, i aby dodało ładnie do tabeli 3 relację.

Pokażę może działające rozwiązanie z polami na id:
  1. <?php
  2.  
  3. echo '<form action="doddotabrel.php" method="post">
  4. <h2>Prosze dodac nowe powiązanie:</h2><br />
  5. <b>Proszę podać ID komputera</b><br />
  6. <input type="text" size="5" style=" font-family:Verdana, Arial, Helvetica, sans-serif; font-size:16px; color:#000000; border: 2px solid #red" name="komputer_id"><br />
  7. <b>Proszę podać ID programu:</b><br />
  8. <input type="text" size="40" style=" font-family:Verdana, Arial, Helvetica, sans-serif; font-size:16px; color:#000000; border: 2px solid #red" name="program_id"><br />
  9. <input type="image" src="graphics/button_dodaj_opro.jpg" alt="Wyslij" value="dodaj">
  10. </form>';
  11.  
  12. $komputer_id = $_POST['komputer_id'];
  13. $program_id = $_POST['program_id'];
  14.  
  15. if($komputer_id and $program_id) {
  16.  
  17. $msql = mysql_connect('localhost', 'root', 'qazwsx');
  18. mysql_select_db('komputery');
  19.  
  20. $ins = @mysql_query("INSERT INTO rel_komputer_oprogramowanie SET komputer_id='$komputer_id', program_id='$program_id'" );
  21. if($ins) {
  22.  
  23. echo "Rekord zostal dodany poprawnie";
  24. }
  25.  
  26. else echo "Blad nie udalo sie dodac nowego rekordu";
  27.  
  28.  
  29. }
  30. ?>


Oraz poniżej kod, który póki co nie udało mi się stworzyć:

  1. <?php
  2. $msql = mysql_connect('localhost', 'root', 'qazwsx');
  3. mysql_select_db('komputery');
  4.  
  5. <form action="" method="post">
  6. <select name="id" onchange="this.form.submit()">
  7. <option value="">Wybierz komputer:</option>';
  8.  
  9. $res = mysql_query('select id, nazwa_komputera from komputery');
  10. while ($row = mysql_fetch_assoc($res))
  11. echo '<option value="'.$row['id'].'"'.($row['id'] == $_GET['id'] ? ' selected="selected"' : '').'>'.$row['nazwa_komputera'].'</option>';
  12.  
  13. echo '</select>
  14. </form><br />';
  15.  
  16. <form action="" method="post">
  17. <select name="id_programu" onchange="this.form.submit()">
  18. <option value="">Wybierz program do edycji:</option>';
  19.  
  20. $res = mysql_query('select id_programu, nazwa_programu, system_operacyjny from oprogramowanie ORDER BY nazwa_programu');
  21. while ($row = mysql_fetch_assoc($res))
  22. echo '<option value="'.$row['id_programu'].'"'.($row['id_programu'] == $_GET['id_programu'] ? ' selected="selected"' : '').'>'.$row['nazwa_programu'].' '.$row['system_operacyjny'].'</option>'
  23. ;
  24. echo '</select>
  25. <input type="hidden" name="a" value="edit";
  26. </form><br />';
  27.  
  28. $id = $_POST['id'];
  29. $id_programu = $_POST['id_programu'];
  30.  
  31. if($id and $id_programu) {
  32.  
  33. $msql = mysql_connect('localhost', 'root', 'qazwsx');
  34. mysql_select_db('komputery');
  35.  
  36.  
  37. $ins = @mysql_query("INSERT INTO rel_komputer_oprogramowanie SET komputer_id='$id', id_programu='$id_programu'" );
  38. if($ins) {
  39. echo "Udało się dodać rekord";
  40. }
  41.  
  42. else echo "Blad nie udalo sie dodac nowego rekordu";
  43. }
  44. ?>


pozdrawiam i proszę o pomoc
askone
Hej

Po pierwsze powinieneś obydwa pola select umieścić w jednym formularzu. Wysłanie formularza dopiero po kliknięciu w przycisk, a nie w zdarzeniu change...
Coś w tym stylu:
  1. <form action="" method="post">
  2. <select name="komputer">
  3. <option value="komputer1_id>Komupter1_name</option>
  4. <option value="komputer2_id>Komupter2_name</option>
  5. <option value="komputer3_id>Komupter3_name</option>
  6. <option value="komputer4_id>Komupter4_name</option>
  7. </select>
  8. <select name="oprogramowanie">
  9. <option value="oprogramowanie1_id>Oprogramowanie1_name</option>
  10. <option value="oprogramowanie2_id>Oprogramowanie2_name</option>
  11. <option value="oprogramowanie3_id>Oprogramowanie3_name</option>
  12. <option value="oprogramowanie4_id>Oprogramowanie4_name</option>
  13. </select>
  14. <input type="submit">Wyślij</input>
  15. </form>


W pliku php zrób coś takiego:
  1. if ($_POST)
  2. {
  3. $komputer_id = $_POST['komputer'];
  4. $oprogramowanie_id = $_POST['oprogramowanie'];
  5.  
  6. //tutaj zapis do bazy
  7. }


Oczywiście obydwa bloki mogą być w jednym pliku - elementy select generowane dynamicznie

ps.
Aha i wystarczy jednorazowe połączenie z bazą - nie musisz tego robić dwukrotnie winksmiley.jpg

Pozdrawiam
nighttrain
dzięki, problem rozwiązany (+1 POMÓGŁ) smile.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.