2013-07-12 5 views
1

Форма, используемая для добавления нового элемента в базу данных и редактирования существующих элементов, представляет собой ту же форму. «Форма» передается в форму, чтобы сказать, добавляли ли что-то новое или загружали существующий элемент для редактирования. Так ....Значение переопределения переопределения, заданное PHP

<input type="checkbox" name="fflreq" id="fflreq" value="<?=$row['FFLr']?>" <?php if ($row['FFLr']=="Yes") {echo 'checked';} ?>> 

Когда новый элемент добавляется, $ строка [ «FFLr»] не существует, поэтому, конечно, значение ПУСТО или NULL или я предполагаю, что 0, если я не первоначально установите флажок. Процессор формы скрывает это в «Нет» и вставляет его в базу данных.

Теперь вот моя проблема. Когда я вернусь к элементу, и форма находится в режиме редактирования, значение VALUE в этом флажке теперь «Нет» - когда я нажимаю на этот флажок, чтобы изменить его статус, я вижу checkbox станет «checked», но значение не меняется. другими словами, статус клика/проверки не устанавливает значение $ _POST ['fflreq'] в YES или 1.

Я думал, что отметка или снятие флажка формы заменяет то, что в настоящее время находится в значении = '' атрибут с 1 или 0 для представления да/нет вкл/выкл или что-то еще. Почему значение, полученное из базы данных, не изменяется при отправке формы?

ответ

4

Вы должны сделать это таким образом:

<input type="checkbox" name="fflreq" id="fflreq" value="Yes" <?php if ($row['FFLr']=="Yes") {echo 'checked';} ?>> 

и когда отправить форму, если выше флажок установлен, то вы получили $ _POST [ «fflreq»] в форме представить страницы и если он не проверяется не Получать ничего $ _POST

так на странице представить вы можете сделать это:

$fflreq = "No" 
if(isset($_POST["fflreq"]) && $_POST["fflreq"] == "Yes") 
{ 
    $fflreq = $_POST["fflreq"]; 
} 
//then you can simply do anything with the $fflreq such as inserting it into database etc. 

Я надеюсь, что это может быть какой-то помощи.

+0

Спасибо, это не похоже на логический способ, которым он должен работать, но я его понимаю, и это устранило проблему. благодаря – DMSJax

2

Это не так, как это работает. Если вы «проверили» флажок, он (вместе с его значением) будет отправлен с сообщением/получателем (т. Е. Подача) формы. Если вы его не проверили, то он не будет установлен ...

1

Если флажок активен, браузер отправляет пару ключ/значение, определенную во входном теге. Однако, если флажок не активен, для этого флажка ничего не отправляется.

Есть два варианта, чтобы иметь дело с этим:

Чистый вариант должен быть осведомлен об этом на стороне сервера, и предположим, что флажок не был активен, когда значение не приходит через.

Более грязный вариант имеет тег <input type="hidden"> перед тем, как поставить флажок, используя то же имя, но значение, которое необходимо увидеть, когда флажок неактивен. Таким образом, когда флажок активен, вы все равно получите нужное значение из флажка, потому что оно перезапишет скрытое значение. Однако, если флажок неактивен, вы получите значение из скрытого поля.

+0

Спасибо, думая назад я использовал этот «грязный» метод раньше, но не думать об этом на этот раз. Это также сработало бы. – DMSJax

1

Не совсем, статус проверки/непроверенного чтения считывается, если значение атрибута HTML name присутствует в параметре $_POST.

Вы можете проверить это с помощью:

<? 
    if (!empty($_POST['fflreq'])){ /*checked*/ } 
    else{ /*unchecked*/ } 
?> 

Значение этого атрибута HTML value всегда остается все, что находится в вашем HTML. Таким образом, никакое взаимодействие с пользователем (кроме JS) не может изменить это.

Работа с функцией PHP empty() позволяет обойти все проблемы с заданием строки «Да» «1».

Далее я хотел бы использовать трехкомпонентные обозначения для такого рода вещей:

<input type="checkbox" name="fflreq" id="fflreq" 
    value="<?=$row['FFLr']?>" <?=(!empty($row['FFLr'])?'checked':'')?>>