动态创建复选框
Posted
技术标签:
【中文标题】动态创建复选框【英文标题】:Dynamically creating checkboxes 【发布时间】:2011-10-20 04:00:19 【问题描述】:我是 php 新手。我想根据从 mysql 获取的结果。如果我在员工表中有 10 条记录,那么它必须创建 10 个以员工姓名为值的复选框。我看过几个教程制作复选框等数组,但无法解决问题。请那里的任何人帮忙!!!
【问题讨论】:
【参考方案1】:试试这个:
<?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 查询必须检索员工的姓名(以便您可以在循环中使用它们
【讨论】:
我应该在哪里写查询?我无法将第一行 $employees 作为 $employee 我已经更新了代码以澄清一些事情,如果您需要任何进一步的帮助,请告诉我。 此代码仅从员工表中获取一个员工姓名。它不显示复选框和其他员工姓名... 我有四名员工..我在 WAMP 上运行此页面。复选框将以 html 格式显示,但我们没有将其包含在 htlm 标记中..你说什么? 好吧,上面的代码应该列出所有四名员工 - 你介意用你的确切代码更新你原来的帖子吗?【参考方案2】: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 个或更多 John Smith 为您工作的情况 - 使用员工的 ID 号(无论它在您的数据库中可能是什么)比他们的姓名更可靠。
【讨论】:
【参考方案3】:假设您获取的结果在 $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'] . '" />';
【讨论】:
【参考方案4】:我使创建复选框以及任何 php 表单中的单选按钮变得容易。唯一的问题是我正在使用 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'); ?>
第一个参数是复选框字段或单选字段的名称,对于两种情况的所有选项,它总是相同的。第二个是标签数组,第三个是选定的选项,它将在加载表单时将这些选项显示为选中。第四种是将字符串作为“复选框”或“收音机”的字段类型。第五个是 values 数组,如果存在,它将包含标签的值,其顺序与标签的顺序相同。如果它不存在,标签数组将被转换为值数组
【讨论】:
如果你不使用 codeigniter 甚至 MVC ,你仍然可以将函数定义放在某个地方,然后在任何你想创建复选框或单选按钮的地方调用它。【参考方案5】:这很简单。我假设您的 MySQL 结果数据位于一个名为 $employees 的数组中,其中至少包含 2 个元素:id 和 name。您提到复选框的“值”必须是名称,但我假设这就是您希望在复选框旁边的 HTML 中显示的内容。最好将“值”作为每个员工的数据库记录的 id(因为员工可能具有相同的名称)。为复选框创建 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。检查的每一项都成为该数组的一个元素,其值为员工记录的 ID。
希望这是有道理的......
【讨论】:
【参考方案6】:在 for 循环中设置回显您将始终能够设置循环变量现在只需回显/打印代码
【讨论】:
以上是关于动态创建复选框的主要内容,如果未能解决你的问题,请参考以下文章