Ok. Таким образом, у меня есть форма, которая должна получать информацию о пользователе, в том числе информацию о этнической принадлежности, которая должна храниться в массиве, чтобы допускать множественные выборы, но она также должна быть необязательной, чтобы никто не делал никаких выборовPHP: значение NULL в ARRAY, сохраненное как строка в таблице
вход страница Этническое происхождение (Выберите все, что применимо):
<input type="checkbox" name="ethnicity[]" value="Indian"> American Indian or Alaska Native<br>
<input type="checkbox" name="ethnicity[]" value="Asian"> Asian<br>
<input type="checkbox" name="ethnicity[]" value="African-American"> Black or African-American<br>
<input type="checkbox" name="ethnicity[]" value="Pacific"> Native Hawaiian or other Pacific Islander<br>
<input type="checkbox" name="ethnicity[]" value="White"> White<br>
на моей странице ProcessData все затем хранится в переменных
$email = filter_input (INPUT_POST, 'email');
$passwordUser = filter_input (INPUT_POST, 'passwordUser');
$phone = filter_input (INPUT_POST, 'phone');
$sex = filter_input (INPUT_POST, 'sex');
if ($sex == NULL) {
$sex = 'unknown';
}
$age = filter_input (INPUT_POST, 'age');
$state = filter_input (INPUT_POST, 'state');
$ethnicity = filter_input (INPUT_POST, 'ethnicity', FILTER_SANITIZE_SPECIAL_CHARS, FILTER_REQUIRE_ARRAY);
if ($ethnicity !== NULL) {
} else {
'No answer selected.';
}
include 'insertData.php';
и на странице insertData все из информация затем вставляется в таблицы.
include 'database.php';
try {
$query = "INSERT INTO accounts
(ageGroup, emailAddress, gender, password, phoneNumber, stateAbbr)
VALUES
(:ageGroup, :emailAddress, :gender, :passwordUser, :phoneNumber, :stateAbbr)";
$statement = $db->prepare($query);
$statement->bindValue(':ageGroup', $age);
$statement->bindValue(':emailAddress', $email);
$statement->bindValue(':gender', $sex);
$statement->bindValue(':passwordUser', $passwordUser);
$statement->bindValue(':phoneNumber', $phone);
$statement->bindValue(':stateAbbr', $state);
$statement->execute();
$statement->closeCursor();
foreach ($ethnicity as $result) {
$query = "INSERT INTO customerethnicity
(emailAddress, ethnicity)
VALUES
(:emailAddress, :ethnicity)";
$statement = $db->prepare($query);
$statement->bindValue(':ethnicity', $result);
$statement->bindValue(':emailAddress', $email);
$statement->
execute();
$statement->closeCursor();
}
echo "Account created successfully!";
} catch (PDOException $e) { //Catches and handles db errors to prevent site crash
$title = 'Error';
$caption = 'System message:';
$message = $e->getMessage() . '<br><br> An error has occurred. Please check the information entered and try again.';
include 'Database_error.php';
База данных использует две таблицы, связанные по электронной почте и по электронной почте и этнической вместе создают новые строки в таблице, разработанной специально для этнической принадлежности. Остальная часть информации хранится в другой таблице. Все ПОЧТИ работает. Я могу иметь пол пустым, и он хранит «неизвестный» в таблице, но я не могу оставить этикетные флажки непроверенными и иметь такое же «неизвестное» значение, вставленное в таблицу вместо NULL, не получая это сообщение:
Предупреждение: неверный аргумент поставляются для Еогеасп() в C: \ XAMPP \ HTDOCS \ FormData \ insertData.php на линии 26
Account created successfully!
это на линии 26: foreach ($ethnicity as $result) {
Счет успешно создан сообщение тестера p, и если я посмотрю в таблице, я вижу, что вся другая введенная информация отображается в таблице учетных записей, но ничего не отображается в таблице customerethnicity. Если я заполню информацию или даже если оставил другие значения пустым и выберет только одну или несколько этнических групп, тогда все будет работать. Проблема в том, что этническая принадлежность не выбрана. Мне нужно показать значение, обозначая, что ничего не выбрано.
Вопрос: Если выбрано только 1 этническая принадлежность: будет ли это еще массив? – Thomas
Если выбрано только 1, оно отображается правильно в таблице customerethnicity с адресом электронной почты и одним из них, которые отображаются в одной строке. Если есть несколько вариантов, то есть несколько строк, которые используют один и тот же адрес электронной почты. Проблема в том, что, если нет выбора, все еще выполняется, но я получаю предупреждающее сообщение, и никакой записи в этой таблице не производится. Другое прекрасно. – Kr4ckl3s