База данных mysql не обновляется, когда в переменной php есть пробелPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 База данных mysql не обновляется, когда в переменной php есть пробел

Сообщение Anonymous »

Я пытаюсь заставить мою базу данных MySQL обновлять значение в столбце, когда флажок установлен/снят. Это работает для переменной, состоящей из 1 слова, но почему-то отказывается, когда проверяемый флажок содержит 2 слова (другими словами, в строке есть пробел).
Список флажков в форме берется из базы данных, которая содержит имя, используемое для поля имени флажка, и отображаемый текст. Это работает безупречно, и нет проблем с такими значениями, как «Мое значение», взятыми из столбца «Служба базы данных».
Оттуда редактирование документа вступает во владение, когда форма публикуется (как обычно), и там я проверяю каждую службу (по имени службы, поскольку оно поступает из базы данных в полях флажков), установлен ли флажок или нет:

Код: Выделить всё

$checkboxes_array = array();
$unset_value = array();

if (isset($_POST['Service1'])) {
$checkboxes_array[] = 'Service1';
} else {
$unset_values[] = 'Service1';
}

if (isset($_POST['My Service2'])) {
$checkboxes_array[] = 'My Service2';
} else {
$unset_values[] = 'My Service2';
}

if (isset($_POST['Service3'])) {
$checkboxes_array[] = 'Service3';
} else {
$unset_values[] = 'Service3';
}
Затем я просматриваю их, поскольку идея этой формы состоит в том, чтобы включить/отключить Сервисы на главной странице. Это делается путем перебора как массива $unset_values, так и $checkboxes_array, чтобы узнать, для каких из них в базе данных должен быть установлен тег «включено» (1), а для каких должно быть установлено значение «отключено» (0). .

Код: Выделить всё

foreach ($checkboxes_array as &$checkbox){
$button_set_results = mysqli_query($conn, "SELECT * FROM buttons_allowed INNER JOIN buttons ON buttons_allowed.buttons_allowed_button_id=buttons.button_id WHERE (buttons_allowed_userid) IN ('".$userId."') AND (Service) IN ('".$checkbox."') ");
while ($rows = mysqli_fetch_array($button_set_results)){
$button_set_service = $rows['Service'];

$update = mysqli_query($conn, "UPDATE buttons_allowed INNER JOIN buttons ON buttons_allowed.buttons_allowed_button_id=buttons.button_id set buttons_allowed_activated = 1 where Service = '".$button_set_service."' and buttons_allowed_userid = '".$userId."' ");
}
}

foreach( $unset_values as &$unset_value ){
$button_unset_results = mysqli_query($conn, "SELECT * FROM buttons_allowed INNER JOIN buttons ON buttons_allowed.buttons_allowed_button_id=buttons.button_id WHERE (buttons_allowed_userid) IN ('".$userId."') AND (Service) IN ('".$unset_value."') ");
while ($rows = mysqli_fetch_array($button_unset_results)){
$button_unset_service = $rows['Service'];

$update = mysqli_query($conn, "UPDATE buttons_allowed INNER JOIN buttons ON buttons_allowed.buttons_allowed_button_id=buttons.button_id set buttons_allowed_activated = 0 where Service = '".$button_unset_service."' and buttons_allowed_userid = '".$userId."' ");
}
}
Судя по тому, что я вижу, просто не имеет смысла, что я не могу установить отключенный тег (buttons_allowed_activated) на 0 для строк с пробелом в них, пока я не могу чтобы установить их как включенные. Код точно такой же, за исключением используемого массива и значения, установленного для столбца button_allowed_activated.
Что мне здесь не хватает или что я делаю неправильно?
Я проверил, верны ли значения в массивах и соответствуют ли они столбцу «Служба».
Я попробовал вызов в самой базе данных, и это работает нормально, и фактически устанавливает значение 1, как и должно быть:

Код: Выделить всё

UPDATE buttons_allowed INNER JOIN buttons ON buttons_allowed.buttons_allowed_button_id=buttons.button_id set buttons_allowed_activated = 1 where Service = 'My Service2' and buttons_allowed_userid = '{user id for testing purposes}'
Пример из базы данных:



buttons_allowed_id
buttons_allowed_userid
buttons_allowed_button_id
buttons_allowed_activated
button_id
Сервис
button_href
button_type




19
28
1
0
1
Plex
{HTML-код кнопки для Plex
медиа


20
28
2
1
2
Ombi
{HTML-код кнопки для Ombi
СМИ


25
28
7
0
7
Домашний помощник
{HTML-код кнопки для Home Assistant
сервера


28
28
10
0
10Основной Pi-Hole
{HTML-код кнопки для основного сервера Pi-Hole
сервера


Код: Выделить всё

var_dump()
обработанных значений (из таблицы примеров, чтобы вы могли видеть как те, у которых есть проблемы, так и те, которые работают). В этом случае я проверил Home Assistant, но не проверил Pi-Hole Main, поэтому Pi-Hole Main теперь будет действителен, но даже если бы я его проверил, он все равно будет говорить «ложь», как и Home Assistant, в то время как те, что без пробелов возвращают правдивую информацию при проверке в форме

Код: Выделить всё

string(4) "Plex" bool(true) string(4) "Ombi" bool(true) string(14) "Home Assistant" bool(false) string(12) "Pi-Hole Main" bool(false)
Как уже говорилось, форма перебирает записи в базе данных для создания списка/формы, поэтому не должно быть никакой разницы между записями без пробелов и записями с ними. Оба должны сообщать как true, если они отмечены, но те, у кого в имени есть пробелы, отказываются это делать, что приводит к их удалению из активированного списка в базе данных (проверено или нет).

Подробнее здесь: https://stackoverflow.com/questions/784 ... p-variable
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»