Несколько значений в MySQL из флажка

У меня есть HTML-страница, где есть форма и сохраняет результаты в MySQL. Проблема в том, что флажок сохраняет только одно значение в таблице MySQL. Что мне нужно сделать, чтобы сохранить несколько значений в столбце БД?

HTML-код:

<fieldset>
<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
<input type = "checkbox" name = "rating[]" value = "current"> The current one
</fieldset>

PHP-код:

$con=mysqli_connect("xxx","zzz","yyy","xxx");

if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

$firstname = mysqli_real_escape_string($con, $_POST['firstname']);
$lastname = mysqli_real_escape_string($con, $_POST['lastname']);
$password = mysqli_real_escape_string($con, $_POST['password']);
$email = mysqli_real_escape_string($con, $_POST['email']);
$address = mysqli_real_escape_string($con, $_POST['address']);
$postcode = mysqli_real_escape_string($con, $_POST['postcode']);
$country = mysqli_real_escape_string($con, $_POST['country']);
$phonenumber = mysqli_real_escape_string($con, $_POST['phonenumber']);
$rating = mysqli_real_escape_string($con, $_POST['rating_value']);
$subscribe = mysqli_real_escape_string($con, $_POST['subscribe']);for($i=0; $i<count($rating); $i++) { $rating_value &= $rating[$i];}

$sql="INSERT INTO customers (firstname, lastname, password, email, address, postcode,     country, phonenumber, rating, subscribe)
VALUES ('$firstname', '$lastname', '$password', '$email', '$address', '$postcode','$country', '$phonenumber', '$rating_value', '$subscribe')";if (!mysqli_query($con,$sql)) {
die('Error: ' . mysqli_error($con));
}
echo " Success!";

0

Решение

Пользовательский запрос внутри цикла for …. Если вы хотите сохранить каждый отдельный код для каждого значения …

 for($i=0; $i<count($rating); $i++) {

$rating_value = $rating[$i];
$sql="INSERT INTO customers (firstname, lastname, password, email, address, postcode,     country, phonenumber, rating, subscribe)
VALUES ('$firstname', '$lastname', '$password', '$email', '$address', '$postcode','$country', '$phonenumber', '$rating_value', '$subscribe')";

}

ИЛИ То же значение через запятую в одном столбце, используйте код ниже.

foreach ($_POST['rating'] as $rateingvalue)
{
$rating_value .= $rateingvalue.",";
}

$sql="INSERT INTO customers (firstname, lastname, password, email, address, postcode,     country, phonenumber, rating, subscribe)
VALUES ('$firstname', '$lastname', '$password', '$email', '$address', '$postcode','$country', '$phonenumber', '$rating_value', '$subscribe')";
0

Другие решения

Вы можете добавить rating_value в базу данных в виде значений, разделенных запятыми … т.е. «Item1, item2, item3, …».

Другой вариант — использовать операторы if … т.е.

if($rating[x]){ //Not sure if this syntax is correct, but $rating[x] refers to the name of the rating checkbox which was checked.
$sql =+ "rating_x"}

или что-то в этом роде — вам нужно иметь правильные столбцы в базе данных, если вы не храните значения в строке, разделенной запятыми.

0

   <fieldset>
<input type = "checkbox" name = "rating[0]" value = "Homepage">Homepage
<input type = "checkbox" name = "rating[1]" value = "Facilities"> Facilities
<input type = "checkbox" name = "rating[2]" value = "Reservation"> Reservation
<input type = "checkbox" name = "rating[3]" value = "Contact"> Contact
<input type = "checkbox" name = "rating[4]" value = "current"> The current one
</fieldset>
0

Что-то вроде этого:

$ratings  = NULL;
$post_rat = $_POST['rating'];

foreach($post_rat as $v){
if(next($post_rat) $ratings .= $v.'|';
else $ratings .= $v
}

@ user3762527

Эти ключи не являются необходимыми. Эти же индексы в серверной части $ _POST [‘rating’] [0]

0

Вы можете сохранить все рейтинги, проверенные пользователем, в КОММАЦИОННОМ ОТДЕЛЬНОМ ФОРМАТЕ
эти значения могут быть легко получены из базы данных, где это необходимо.

Просто взорвать ценность.

Пример :

    $ratingsArray=$_POST['rating'];

$ratingsSelected=implode(',' , $ratingsArray);          /*ALL SELECTED RATING VALUES FROM ARRAY
CONVERT IN COMMA SEPERATED VALUE STRING*/

Теперь строка содержит все выбранные значения оценок, разделенные запятой.
Вы можете просто сохранить строковое значение в базе данных.

Всякий раз, когда вам нужно значение обратно в виде массива.

Просто используйте:

    $ratingsString=$row['rating'];                          //COMMA SEPERATED VALUE STRING FROM DATABASE

$ratingsArray=explode(',' , $ratingsString);

Теперь значения снова в форме массива, используйте в соответствии с вашими требованиями.

0