Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Lista rozwijalna, Poprawienie kodu
arwat2019
post 24.06.2019, 10:06:24
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 20.06.2019

Ostrzeżenie: (0%)
-----


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.  
Powód edycji: [nospor]: Uzywaj prosze bbcode PHP do takich kodow. Poprawiam
Go to the top of the page
+Quote Post
nospor
post 24.06.2019, 10:34:57
Post #2





Grupa: Moderatorzy
Postów: 36 441
Pomógł: 6290
Dołączył: 27.12.2004




Nigdzie nie tworzysz zmiennych $id_przetarg ani $zamawiajacy tylko bierzesz z kosmosu


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
dublinka
post 24.06.2019, 14:32:29
Post #3





Grupa: Zarejestrowani
Postów: 594
Pomógł: 66
Dołączył: 22.02.2008
Skąd: Dublin

Ostrzeżenie: (0%)
-----


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


--------------------
Go to the top of the page
+Quote Post
arwat2019
post 25.06.2019, 06:58:06
Post #4





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 20.06.2019

Ostrzeżenie: (0%)
-----


Dublinka dziękuję za BARDZO wyczerpującą odpowiedz. Lista wybieralna działa. Minęły by lata świetlne zanim sam bym to skleił. Pozdrawiam
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 16.04.2024 - 17:09