У меня есть 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!";
Пользовательский запрос внутри цикла 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')";
Вы можете добавить 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"}
или что-то в этом роде — вам нужно иметь правильные столбцы в базе данных, если вы не храните значения в строке, разделенной запятыми.
<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>
Что-то вроде этого:
$ratings = NULL;
$post_rat = $_POST['rating'];
foreach($post_rat as $v){
if(next($post_rat) $ratings .= $v.'|';
else $ratings .= $v
}
@ user3762527
Эти ключи не являются необходимыми. Эти же индексы в серверной части $ _POST [‘rating’] [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);
Теперь значения снова в форме массива, используйте в соответствии с вашими требованиями.