2011-08-04 267 views
3

我是新來的php.I想動態創建從MySQL獲取的結果的複選框。如果我在僱員表中有10條記錄,所以它必須創建10個複選框,並將僱員名稱作爲value.I曾見過幾個教程,使數組複選框等,但無法解決問題。請任何人在那裏幫助!動態創建複選框

回答

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查詢必須檢索員工的姓名(以便您可以在循環中使用它們)
+0

我應該在哪裏寫查詢?我不能得到第一行$僱員作爲$員工 –

+0

我已更新代碼澄清一些事情,讓我知道如果您需要任何進一步的援助。 – ninetwozero

+0

此代碼只從員工表中獲取emplyee的單個名稱。它不顯示覆選框和其他員工姓名... –

2

MySQL只是d ATA。同樣的過程將適用於從任何數據源(數組,文件內容,數據庫等)製作複選框列表。該過程的骨架框架將爲:

$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; 
} 

請注意,我已按照您的指定使用「名稱字段」。但考慮一下你有兩個或兩個以上的約翰史密斯爲你工作的情況 - 使用員工的身份證號碼(無論它在數據庫中可能是什麼)比他們的名字更加可靠。

0

組回波在for循環
你將永遠是能夠循環變量
現在簡單地附和/打印的代碼

2

比方說,結果你取的是$結果陣列英寸

陣列具有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'] . '" />'; 
} 
1

這是相當簡單的。我假設你的MySQL結果數據存在一個名爲$ employees的數組中,包含至少兩個元素:id和name。您提到複選框的「值」需要是名稱,但我會假設您希望顯示在複選框旁邊的HTML中。將「價值」作爲每個員工的數據庫記錄的ID會更好(因爲員工可能具有相同的名稱)。爲複選框創建HTML只需要用foreach()循環遍歷它們,並創建一個PHP變量來保存HTML。

因此,假設您的$員工陣列看起來是這樣的:

[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變量。並且表單字段的「名稱」以「[]」結尾。這將創建一個名爲「employee_array」的數組,當表單提交時,該數組會被傳回給PHP。每個被檢查的項目都成爲該數組的一個元素,其值是員工記錄的ID。

希望有道理...

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

第一個參數是複選框字段或無線電場,這始終會是相同的,對於兩種情況的所有選項的名稱。第二個是標籤數組,第三個是選擇的選項,它會在加載表單時顯示這些選項。第四種是字段類型,它是一個字符串,如'checkbox'或'radio'。第五個是values數組,如果存在的話,它將包含與標籤相同順序的標籤值。如果它不存在,標籤數組將被測試爲數組

+0

如果您不使用codeigniter甚至MVC,仍然可以將funtion定義放在某處並在任何地方將其稱爲無論您想創建複選框還是單選按鈕。 –