动态创建复选框

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.='&nbsp&nbsp&nbsp<input type="checkbox" name=' . $fieldName.' value='.$valuesArray[$i].' id='.$valuesArray[$i];
                    if(in_array($valuesArray[$i], $selectedOption))
                            $returnString.=' checked="checked" ';
                    
                    $returnString.=' />&nbsp&nbsp<label>'.$labelsArray[$i].'</label>';
                
            
            if ($fieldType === 'radio') 
                for ($i=0;$i<count($labelsArray);$i++) 
                    $returnString.='&nbsp&nbsp<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 循环中设置回显您将始终能够设置循环变量现在只需回显/打印代码

【讨论】:

以上是关于动态创建复选框的主要内容,如果未能解决你的问题,请参考以下文章

使用动态创建的复选框和数组维护复选框值

动态创建的复选框不可点击

向动态创建的复选框 jQuery 添加验证

如何使用表单从数组动态创建复选框?

如何通过创建动态复选框来更改进度条

在刀片中动态创建复选框