У меня есть HTML-страница, где есть форма и сохраняет результаты в MySQL. Проблема в том, что флажок сохраняет только одно значение в таблице MySQL. Что мне нужно сделать, чтобы сохранить несколько значений в столбце БД?
HTML-код:
<input type="checkbox" name="rating[]" value="Homepage">Homepage
<input type="checkbox" name="rating[]" value="Facilities">Facilities
<input type="checkbox" name="rating[]" value="reservation">Reservation
<input type="checkbox" name="rating[]" value="Contact">Contact
PHP-код:
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$sql="INSERT INTO db (firstname, lastname, password, email, address, postcode, country, phonenumber, rating, subscribe)
VALUES ('$firstname', '$lastname', '$password', '$email', '$address', '$postcode','$country', '$phonenumber', '$rating', '$subscribe')";
if (!mysqli_query($con,$sql)) {
die('Error: ' . mysqli_error($con));
}
echo " Success!";
Я думаю, у вас есть три варианта.
Первый.
Создайте еще одну таблицу и свяжите их с внешним ключом.
Во-вторых.
Сделайте, чтобы флажки имели значение и делали битовую маскировку.
Ex)
<input type="checkbox" name="something[]" value="1">blah
<input type="checkbox" name="something[]" value="2">blah2
<input type="checkbox" name="something[]" value="4">blah3
Если кто-то проверяет «бла» и «бла3», сделайте их 5. (1 & 4)
Как это:
for($i=0; $i<count($rating); $i++)
{
$rating_value &= $rating[$i];
}
И сохранить его в базе данных в целое число.
В третьих.
Объедините их в одну строку и сохраните в базе данных в виде строки (например, VARCHAR).
Если $rating
это попытка массива лопаются ()
$sql="INSERT INTO db (firstname, lastname, password, email, address, postcode, country, phonenumber, rating, subscribe)
VALUES ('$firstname', '$lastname', '$password', '$email', '$address', '$postcode','$country', '$phonenumber', '".implode(',',$rating)."', '$subscribe')";
Я настоятельно рекомендую вам прочитать следующие материалы:
Но у вас пока нет проблем с PHP или HTML. Вы пытаетесь сохранить информацию в базе данных, в которой нет места для этого.
Вам нужно как минимум две дополнительные таблицы:
rating
мастер стол с:
rating_id
(автоинкремент или произвольный код)rating_value
(например, «Плохо», «Средне», «Хорошо» …)… где вы храните доступные рейтинги.
db_rating
стол с:
db_id
(db
первичный ключ)rating_id
(rating
первичный ключ)… где вы храните отношения.
… и они удаляют ваш текущий db.rating
колонка.