Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Lista rozwijalna
Forum PHP.pl > Forum > Przedszkole
arwat2019
Witam
Prośba o poprawienie kodu.
Mam dwie tabele: 1. Lista_przetarg (kolumny: id_przetarg; zamawiajacy)
2. kontrahent (kolumny: id_kontrahent, nazwa_kontrahent)
Cel: Wybranie nazwy_kontrahent z tabeli kontrahent ( w postaci listy rozwijalnej ) i wstawienie do tabeli lista_przetarg w kolumnę: zamawiający
Problem: Jest możliwość wyboru ?nazwa_kontrahent? z tabeli kontahent jednak nie chce zapisać do tabeli: ?lista_przetarg? Nawet nie pojawia się błąd ze ?przetarg nie został zapisany?
  1. <html>
  2. <body>
  3.  
  4. <?php
  5.  
  6.  
  7. // POŁACZENIE Z BD "PRZETARGI"
  8.  
  9. $con=mysqli_connect("localhost","root","haslo123","przetargi");
  10.  
  11. if ($con){
  12.  
  13. echo"polaczyles sie z baza PRZETARGI";
  14. }
  15. else{
  16.  
  17. echo"Brak połaczenia";
  18. }
  19.  
  20. // LISTA ROZWIJALNA ZAMAWIAJACYCH Z TABELI KONTRAHENT
  21.  
  22. $lista = mysqli_query($con,"SELECT nazwa_kontrahent FROM kontrahent ") or die (mysqli_connect_error);
  23. mysqli_close ($con);
  24.  
  25. ?>
  26.  
  27. <table>
  28.  
  29. <tr><th>id</th><td><input type="text" name="id_przetarg" maxlength="13" size="13"></td></tr>
  30.  
  31.  
  32. <tr><th>zamawiajacy</th><td>
  33. <select>
  34. <option>
  35.  
  36. <?php
  37.  
  38. while ($row = mysqli_fetch_array($lista, MYSQLI_ASSOC))
  39. {
  40. $rows[] = $row;
  41. }
  42.  
  43.  
  44. foreach ($rows as $row)
  45. {
  46. print "<option value='" . $row['nazwa_kontrahent'] . "'>" . $row['nazwa_kontrahent'] . "</option>";
  47.  
  48. }
  49.  
  50.  
  51. $wstaw = "insert into lista_przetarg values('".$id_przetarg."','".$zamawiajacy. "')";
  52.  
  53.  
  54. $wynik = $con->query($wstaw);
  55.  
  56.  
  57. if ($wynik)
  58. {
  59. echo $con->affected_rows." przetarg zapisany do bazy.";
  60. }
  61.  
  62. else {
  63. echo "Wystapil blad. przetarg nie zostal dodany do bazy.";
  64. }
  65.  
  66.  
  67. ?>
  68.  
  69.  
  70. </option>
  71.  
  72. <input type="submit" name="submit" value="zatwierdz">
  73. </select>
  74.  
  75. </table>
  76.  
  77.  
  78.  
  79.  
  80. <body>
  81. </html>
  82.  
nospor
Nigdzie nie tworzysz zmiennych $id_przetarg ani $zamawiajacy tylko bierzesz z kosmosu
dublinka
Masz ta mtroche namieszane chocby z tymi selectami. Jedno zamkniete drugie gdzies poniżej zamykane ktorego nie otwierales wczesniej.
Musisz to zrobic na 2 krokach. Ten klucz z pierwszej tabeli ma byc przekazany do drugiej ?

Mozna zrobic to tak np:
  1. <?php
  2.  
  3.  
  4. function PokazForm($server, $username, $password, $database, $table1)
  5. {
  6.  
  7. $mysqli = new mysqli($server, $username, $password, $database);
  8.  
  9. if ($mysqli->connect_error)
  10. {
  11. die("Błąd połączenia z MySQL: " . $mysqli->connect_error);
  12. }
  13.  
  14.  
  15.  
  16. $sql = "SELECT `id_kontrahent`, `nazwa_kontrahent` FROM $table1";
  17. $result = $mysqli->query($sql);
  18.  
  19.  
  20.  
  21. if ($result->num_rows > 0)
  22. {
  23.  
  24. echo "<form method=post action=" . $_SERVER['SCRIPT_NAME'] . "?s=2>";
  25. echo "<select name=\"wybor\">";
  26.  
  27. while($row = $result->fetch_assoc())
  28. {
  29.  
  30. echo "<option value=" . $row['id_kontrahent'] . "|" . $row['nazwa_kontrahent'] . ">" . $row['nazwa_kontrahent'] . "</option>";
  31.  
  32. }
  33.  
  34. echo "<input type=\"submit\" name=\"dodaj\" value=\"Dodaj\">";
  35. echo "</select></form>";
  36.  
  37.  
  38. } else
  39. {
  40.  
  41. print "Znaleziono: 0 wpisów";
  42.  
  43. }
  44.  
  45. $mysqli->close();
  46.  
  47.  
  48.  
  49.  
  50. }
  51.  
  52.  
  53.  
  54. function Dodaj($server, $username, $password, $database, $table2, $selected)
  55. {
  56.  
  57. $mysqli = new mysqli($server, $username, $password, $database);
  58.  
  59. $selected = htmlspecialchars($selected);
  60. $selected = $mysqli->real_escape_string($selected);
  61.  
  62. $ex = explode('|', $selected);
  63.  
  64. if ($stmt = $mysqli->prepare("INSERT INTO $table2" . " (id_przetarg, zamawiajacy) VALUES ( ?, ? )"))
  65. {
  66.  
  67. $stmt->bind_param('is', $ex[0], $ex[1]);
  68.  
  69.  
  70. $stmt->execute();
  71. $stmt->close();
  72. $mysqli->close();
  73.  
  74. exit('dodano nowa wartosc do nowej tabeli');
  75.  
  76. }
  77.  
  78. else {
  79.  
  80. exit("blad zapisu");
  81.  
  82. }
  83.  
  84. }
  85.  
  86.  
  87. (isset($_GET['s'])) ? $_GET['s'] = $_GET['s'] : $_GET['s'] = '1';
  88.  
  89. $s = $_GET['s'];
  90.  
  91. switch($s):
  92.  
  93. case('1'):
  94.  
  95. PokazForm('localhost', 'root', 'pass', 'przetargi', 'kontrahent');
  96.  
  97. break;
  98.  
  99.  
  100. case('2'):
  101.  
  102. Dodaj('localhost', 'root', 'pass', 'przetargi', 'lista_przetarg', $_POST['wybor']);
  103.  
  104. break;
  105. default:
  106. header('location: ' . $_SERVER['SCRIPT_NAME'] . '?s=1');
  107. break;
  108. endswitch;
  109.  
  110.  
  111.  
  112. ?>


Ogolnie nie powinno sie wyswietlac ID z tabeli nigdzie. W tym przykladzie jest doklejony do pola option ale mozna byloby to zrobic na sesji tez
arwat2019
Dublinka dziękuję za BARDZO wyczerpującą odpowiedz. Lista wybieralna działa. Minęły by lata świetlne zanim sam bym to skleił. Pozdrawiam
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.