动态创建复选框

时间:2011-08-04 16:13:49

标签: php mysql html sql

我是php新手。我想动态创建从MySQL获取结果的复选框。如果我在员工表中有10条记录,那么它必须创建10个复选框,员工姓名为value。我看过几个教程制作一些复选框等但无法解决问题。请任何人帮助!!!

6 个答案:

答案 0 :(得分:7)

试试这个:

<?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; ?>

您在上面看到的示例依赖于实际正常运行的两件事:

  1. 您正在使用MySQL
  2. 您的SQL查询必须检索员工的姓名(以便您可以在循环中使用它们

答案 1 :(得分: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为你工作的情况 - 使用员工的身份证号码(无论你的数据库中有什么)比他们的名字更可靠。

答案 2 :(得分: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'] . '" />';
}

答案 3 :(得分:1)

这非常简单。我假设你的MySQL结果数据在一个名为$ employees的数组中,包含至少2个元素:id和name。你提到复选框的“值”必须是名称,但我会假设你想要显示在复选框旁边的HTML中。最好将“value”作为每个员工的数据库记录的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。

希望有道理......

答案 4 :(得分:0)

在for循环中设置echo你将始终能够设置循环变量
现在只需回显/打印代码

答案 5 :(得分:0)

我已经很容易创建复选框以及任何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'); ?>

第一个参数是复选框字段或无线电字段的名称,对于两种情况,所有选项的名称始终相同。第二个是标签数组,第三个是选定的选项,它们会在加载表单时显示这些选项。第四种是字段类型,它将是一个字符串,作为“复选框”或“无线电”。第五个是值数组,如果存在,它将包含标签的值,其顺序与标签的顺序相同。如果不存在,则标签数组将被设为值数组