Dzień dobry.
Stworzyłem stronę – formularz który dodaje dane do bazy mysql – dodaj.php.
Formularz dodaje dane z kilku list rozwijanych + dane wpisane z klawiatury.
Listy rozwijane pobierają się z innych tabel mysql.
Zapisane dane wyświetlane są prawidłowo w innej stronie - lista.php.
Stworzyłem również możliwość edycji tych danych, wyświetlana jest lista z dodatkową kolumną zmień – obsługa.php.
Po wyborze zmień uruchamia się zmien.php gdzie wyświetlana jest dana pozycja według ID.
Uruchamiają się listy rozwijane i pola z możliwością wpisania nowych wartości.
Wszytko działa prawidłowo:
- listy rozwijane ustawiają się na wartościach które użytkownik wybrał wcześniej
- pola tekstowe wypełniają się wcześniej podanymi danymi
- jeżeli użytkownik zmienia dane zostają one zaktualizowane w bazie.
Problem pojawia się w momencie zapisywania danych z listy rozwijanej, w aktualnym kodzie zapisuje prawidłowo tylko te pozycje z listy które mają jeden wyraz. Jeżeli na liście rozwijanej jest „wybor” zapisuje w bazie „wybor”. Jeżeli na liście jest „wybor test” zapisuje w bazie „wybor”.
Moje pytanie dlaczego tak się dzieje i jak zmienić kod żeby zapisał w bazie „wybor test”.
Prawdopodobnie ta linia sprawia że tak się dzieje. Zapisuje pierwszy wyraz i robi nową linie.
$select =$select = (isset($data['rodzaj']) && $data['rodzaj'] == $rodzaj)?"selected='rodzaj'":"";
<?php
// Połączenie do bazy
include "connection_class.php";
if ($dbConnection->connect_error) {
die("Connection failed: " . $dbConnection->connect_error);
}
//Wybór tabeli zawierającej dane do listy rozwijanej
$sql = "SELECT * FROM tabela";
$result = $dbConnection->query($sql);
if ($result->num_rows > 0) {
//lista
echo "<select name='rodzaj'>"
while($rodzaj = $result->fetch_assoc()) {
extract ($rodzaj);
$select = (isset($data['rodzaj']) && $data['rodzaj'] == $rodzaj)?"selected='rodzaj'":"";
echo "<option value=$rodzaj $select > $rodzaj</option>\n";
}
echo "</select>";
}
$dbConnection->close();
?>