Заполните переключатели значениями из базы данных - PullRequest
0 голосов
/ 25 сентября 2011

два вопроса за один день ...

Я пытаюсь проверить правильность переключателя, когда извлекаю данные из базы данных MySQL для отображения в форме редактирования. Пробовал все виды кода, но каждый раз получал один и тот же результат: всегда проверяется последнее значение. Mystified.

Мой код несколько усложняется тем, что находится внутри длинной строки html, отсюда и конструкция для чтения переменных php. У меня есть этот код в верхней части страницы:

$row = mysql_fetch_assoc($result, MYSQL_ASSOC);
 if ($row)
 {
 print("<p>$se_id is in the database. You can edit this record.</p>");

 //get variables to set radio buttons in $form
 $type = $row['se_source'];
$checked[$type] = "checked";

и т.д ... и этот код внутри строки html:

<li>
    <label for="se_source">Contributed by:</label>
          echo ' . $type . '
    <input id="se_source" type="radio" id = "radio" name="se_source"  value="CNFP" checked = ' . $checked["CNFP"] . '>CNFP</input>
    <input id="se_source" type="radio" id = "radio" name="se_source" value="User" checked = ' . $checked["User"] . '>User</input>

Заявление эха для моего здравомыслия - я знаю, что это не совсем эхо здесь. Но даже когда он говорит «echo CNFP», всегда проверяется кнопка «Пользователь». Так что я знаю, что он получает правильное значение для этой переменной, но по какой-то причине он по умолчанию равен последнему значению в списке. Я тоже пробовал с "===". Нет радости Любое просветление ценится, большое спасибо за взгляд.

Ответы [ 5 ]

2 голосов
/ 25 сентября 2011

AFAIK, значение проверяемого атрибута не важно, достаточно только его наличия, чтобы пометить флажок как проверенный. ( Стандарт HTML5 подтверждает это)

Попробуйте что-то вроде этого:

 <input id="se_source" type="radio" id = "radio" name="se_source"  value="CNFP"'.(($checked["CNFP"]) ? 'checked="checked"': '').'>CNFP</input>
0 голосов
/ 30 июля 2013

Проверьте это!Это может быть то, что вы ищете:)

Создать флажок на основе записей в таблице MySQL

$sql = "SELECT name FROM students";
$res = mysql_query($sql);
while($row = mysql_fetch_assoc($res)){
    echo "<input type='checkbox' name='students[]' value='".$row['name']."'>"
        .$row['name'];
}
0 голосов
/ 09 декабря 2012

Причина, по которой вы всегда проверяетесь на последнем, заключается в том, что вы устанавливаете каждую кнопку-переключатель последовательно.

Когда вы передаете набор переключателей с одинаковым именем в браузер, поведение по умолчанию состоит в том, что последняя установленная кнопка, установленная как проверенная, будет той, которая отображается как проверенная.Таким образом, если вы передадите пять радиокнопок, и все они будут установлены как отмеченные, у радиостанции не может быть более одной отмеченной опции.

Когда браузер обнаруживает вторую опцию радиосвязи, которая также помечена как «проверено,«он просто удаляет« проверено »из первого».

Ваш php-код выполняет это в следующей строке:

$checked[$type] = "checked";

Проблема в том, что вы создаете массив, которыйбудет отображаться с:

se_source => флажок

Это означает, что флажок - это значение строки для каждого элемента в вашем массиве.

Я думаю, вам следует переосмыслить структуру таблицыи процесс.Вместо того, чтобы создавать столбец для проверки чего-либо, я использую следующее:

По сути, ваша проблема в том, что вам нужно:

  1. Значение всоответствующая база данных

  2. Значение самой радиокнопки

, которая позволит вам:

Сравнить базу данныхзначение (DBV) со значением переключателя (RBV) и установите его как проверенное, если сравнение вернется как истинное.

Переменные ниже:

$ ar_rvbs = массив значений радиосети(обычно это строки или логические значения), которые вы собираетесь выполнить в цикле и проверить сохраненное DBV.

$ value = значение каждого элемента в массиве значений радиомодуля

$ attrval = сохраненное значениезначение для радиокнопки.это не обязательно должно быть в базе данных.Вы можете использовать метод post для передачи его с одной страницы на следующую.

$ checked = если DBV соответствует RBV при прохождении цикла, это будет установлено в строку «флажок», иначе этопросто пустая строка.

function makeRadioSet($ar_rvbs,$attrval=[DBV] /*A*/
  {

  foreach ($ar_rvbs as $value)
     {
      $checked = '';                          /*B*/
      if ($attrval==$value)                   /*C*/
      $checked = "checked";                   /*D*/
      echo '<input type="radio" name = "fieldname" value = "'.$value.'" '.$checked.'>';
     }
  }

/ A / Передать список RBV в виде массива и DBV в качестве переменной

/ B / Установите флажок в пустую строку, потому что это будет по умолчанию для всех переключателей в наборе, кроме той, которая соответствует DBV

/ C / Сравните DBV с текущимRBV обрабатывается циклом из массива RBV

/ D / Если сравнение с шага C возвращает true, сделайте проверенную строку доступной для вставки в элемент ввода

Echo позаботится о том, чтобы генерировать каждую опцию радиостанции и убедиться, что тот, который соответствует DBV, «проверил» в теге элемента ввода

0 голосов
/ 25 сентября 2011

Я думаю, что приведенный ниже код будет работать так, как вы хотите. Вы должны добавить поле, чтобы проверить, проверено ли оно.

while($result = mysql_fetch_array($queryRes)){
if(chack the radio button chacked field){
   echo "<input type="radio" checked="checked" value="value" name="same" />";
}
echo "<input type="radio" value="value" name="same" />";

}

0 голосов
/ 25 сентября 2011

Вам нужно иметь атрибут «флажок» ТОЛЬКО на выбранном переключателе. Поэтому вам нужно изменить ваш php-код, чтобы он отображался в правильном формате.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...