Я новичок в php.I хочу динамически создавать флажки по результату, полученному из MySQL. Если у меня есть 10 записей в таблице сотрудников, чтобы создать 10 флажков с именем employee в качестве значения. Я видел несколько руководств для создания массива флажки и т. д., но не смогли исправить проблему. Пожалуйста, всем там, чтобы помочь !!!
Попробуйте это:
<?php //Create the query $sql = "SELECT `name` FROM Employees"; //Run the query $query_resource = mysql_query($sql); //Iterate over the results that you've gotten from the database (hopefully MySQL) while( $employee = mysql_fetch_assoc($query_resource) ): ?> <span><?php echo $employee['name']; ?></span> <input type="checkbox" name="employees[]" value="<?php echo $employee['name']; ?> /><br /> <?php endwhile; ?>
Пример, который вы видите выше, основывается на двух действиях:
MySQL – всего лишь источник данных. Тот же процесс будет применяться для создания списка флажков из ЛЮБОГО источника данных (массив, содержимое файла, база данных и т. Д.). Скелетной основой для процесса будет:
$sql = "select idfield, namefield FROM sometable ..."; $result = mysql_query($sql) or die(mysql_error()); while($row = mysql_fetch_assoc($result)) { echo <<<EOL <input type="checkbox" name="name[]" value="{$row['namefield']}" /> {$row['namefield']}<br /> EOL; }
Обратите внимание, что я использую «поле имени», как вы указали. Но рассмотрите случай, когда у вас есть 2 или более Джон Смит, работающих на вас – гораздо надежнее использовать идентификационный номер сотрудника (что бы он ни находился в вашей базе данных), чем их имя.
Допустим, результат, полученный вами, находится в массиве $ result.
Массив имеет 10 поддиапазонов – каждый выглядит следующим образом:
[0] => array ['name'] => 'ZainShah' [1] => array ['name'] => 'Stack'
Самый простой способ сделать это:
foreach ( $result as $key => $employee ) { echo '<label for="employee' . $key . '">' . $employee['name'] . '</label>' echo '<input type="checkbox" name="employee[]" id="employee' . $key . '" value="' . $employee['name'] . '" />'; }
Это довольно просто. Я предполагаю, что ваши данные результата MySQL находятся в массиве с именем $ employees, содержащем не менее двух элементов: id и name. Вы отмечаете, что «значение» флажка должно быть именем, но я предполагаю, что это то, что вы хотите отобразить в HTML рядом с этим флажком. Было бы лучше, чтобы «ценность» была идентификатором записи базы данных для каждого сотрудника (так как у сотрудников может быть одно и то же имя). Создание HTML-кода для флажков – это просто повторение через них цикла foreach () и создание переменной php для хранения HTML.
Итак, если ваш массив $ employees выглядит примерно так:
[0] => 'id' => '1' 'name' => 'Sam Jones' [1] => 'id' => '2' 'name' => 'Tom Smith' [2] => 'id' => '3' 'name' => 'Sarah Conners'
Просто нужно запустить массив и создать вывод:
// init the var to hold the HTML $output = ''; // cook the HTML foreach ($employees AS $k=>$v) { $output .= "<input type='checkbox' name='employee_array[]' value='" . $v['id'] . "'> " . $v['name'] . "<br />"; }
В вашей HTML-форме просто выделите переменную $ output. Обратите внимание, что операнд «. =» Используется для добавления к переменной $ output, которую я создал. И «имя» поля формы заканчивается на «[]». Это создаст массив с именем «employee_array», который будет передан на PHP при отправке формы. Каждый проверенный элемент становится элементом этого массива, его значение является идентификатором записи сотрудника.
Надеюсь, это имеет смысл …
установить цикл echo in for
вы всегда сможете установить переменную цикла
теперь просто эхо / печатать код
Я упростил создание флажков, а также переключателей в любой форме php. Единственное, что я использую Framework Codeigniter MVC.
Вот определение функции, которое вы можете вставить в свою общую модель или любой вспомогательный файл.
function createOptions($fieldName, $labelsArray=array(), $selectedOption, $fieldType,$valuesArray = array()) { $returnString = ''; if(count($valuesArray)!=count($labelsArray)) $valuesArray=$lebelsArray; if ($fieldType === 'checkbox') { for ($i=0;$i<count($labelsArray);$i++) { $returnString.='   <input type="checkbox" name=' . $fieldName.' value='.$valuesArray[$i].' id='.$valuesArray[$i]; if(in_array($valuesArray[$i], $selectedOption)){ $returnString.=' checked="checked" '; } $returnString.=' />  <label>'.$labelsArray[$i].'</label>'; } } if ($fieldType === 'radio') { for ($i=0;$i<count($labelsArray);$i++) { $returnString.='  <input type="radio" name=' . $fieldName.' value='.$valuesArray[$i].' id='.$valuesArray[$i]; if($valuesArray[$i]== $selectedOption) $returnString.=' checked="checked" '; $returnString.=' /><label>'.$labelsArray[$i].'</label>'; } } return $returnString; }
И вы должны вызвать эту функцию в файле вида,
<?php echo $this->common_model->createOptions('userHobbies[]', $hobbyOptions, $userHobbies, 'checkbox'); ?>
Первый параметр – это имя поля флажка или поля радио, которое всегда будет одинаковым для всех параметров для обоих случаев. Во-вторых, это массив меток, третий – это параметры, которые будут показывать эти параметры, указанные при загрузке формы. Четвертое – это тип поля, который будет строкой как «флажок» или «радио». Пятый будет массивом значений, который, если присутствует, будет содержать значения для меток в том же порядке, что и метки. Если его отсутствует, массив меток будет раздроблен как массив значений