2014-01-03 4 views
0

У меня есть этот флажок:PHP - значение флажка не работает должным образом

<label>Maintenance Mode: <small>Tick to enable/disable.</small></label> 
<input type="checkbox" name="maintenance" value="1" <?php echo $maintenance; ?> > 

я получаю данные из моей базы данных. Итак, если в моей базе данных включено обслуживание, установите флажок. Это происходит следующим образом:

if($sdata['maintenance']==1): 
    $maintenance="checked='checked'"; 
else: 
    $maintenance=""; 
endif; 

Проблема в том, что всякий раз, когда я хочу отключить обслуживание, он не обновляет базу данных. Он все равно будет установлен на «1».

Это, как я его:

$maintenance = inputFilter($_POST['maintenance']); 

Моя таблица базы данных имеет два столбца:

setting_name и setting_value. В этом случае было бы:

maintenance и 1

Я обновить это следующим образом:

foreach($_POST as $key => $value) 
{ 
    $value = inputFilter($value); 
    mysql_query("UPDATE settings SET setting_value='$value' where setting_name='$key' limit 1") 
    or die(mysql_error()); 
} 

Всякий раз, когда я снимите флажок, и сохранить настройки, ничего не происходит. Я даже попытался получить сообщение от $maintenance с сообщением, и когда он не установлен, значение равно 0.

У кого-нибудь есть идеи, что вызывает это?

+0

Webbrowser не отправить флажок в запросе POST, а затем не проверяется. – Siper

ответ

5

Номера проверены Флажки не посылают в запросе POST, поэтому его ключ не в $ _POST

Вы должны проверить, если имя флажок существует.

if(!isset($_POST['maintenance'])) { 
    // Checkbox is unchecked 
} 
+0

Я попытался сделать это: 'if (! Isset ($ _ POST ['maintenance'])) { $ maintenance = 0; } '.. все еще не работает. – oliverbj

+0

Посмотрите на свою петлю, вы перебираете $ _POST, а $ _POST не содержит ключа «обслуживания» –

+0

Я не следую. Сожалею. Не могли бы вы обновить свой ответ с помощью своего примера? – oliverbj

0

Если флажок снят, он не установлен в вашем $ _POST. Вы должны проверить, что-то вроде этого:

if(isset($_POST['maintenance']) && $_POST['maintanance'] != 0) { 
    //is checked 
} else { 
    //is unchecked 
} 
+0

@ Alex-barroso избил меня;) – Tim

+0

Я пробовал это. Если он был проверен, я ставлю hte $ maintenance = 1, и если он не установлен, $ maintenance = 0. Не работает. – oliverbj

0

Вы можете попробовать это:

<?php 

if($_SERVER['REQUEST_METHOD'] == 'GET') { 
    if($sdata['maintenance']==1): 
     $maintenance="checked='checked'"; 
    else: 
     $maintenance=""; 
    endif; 
} 
elseif($_SERVER['REQUEST_METHOD'] == 'POST') { 
    if(array_key_exists('maintenance',$_POST)) { 
     $maintenance="checked='checked'"; 
    } 
    else{ 
     $maintenance=""; 
    } 
} 
0

Место значение по умолчанию (выключено) в скрытом ввода перед флажком:

<input type="hidden" name="maintenance" value="0"/> 
<input type="checkbox" name="maintenance" value="1" <?=($sdata['maintenance']==1 ? 'checked' : '')?> > 
Смежные вопросы